隐藏已编译应用程序的可执行代码的实践

反编译和反向工程.net程序集是标准做法。

我想发布一些将添加到现有应用程序的插件程序集,但我不希望其他人使用它们。

有什么方法可以隐藏这些组件的来源?

除非您控制目标硬件,否则理论上不可能实现100%保护。 如果CPU能够执行它,给定足够的时间和知识,人类也可以阅读它。 这甚至不仅限于C#(尽管在托管语言中通常更容易 )。 您可以使用像Dotfuscator或XenoCode这样的混淆器来更难理解反编译代码。 如果你真的担心,你应该转移到基于服务器的应用程序。

您可以使用混淆器工具 ,这将有所帮助,但逆向工程仍然是非常可能的。

用户的计算机需要知道它需要做什么,所以你必须告诉它。 计算机的拥有者完全控制它,因此可以知道你告诉计算机做什么,他可以告诉它做其他事情。

这是软件; 一切皆有可能。 您可以加密二进制文件,然后在运行时将其全部或部分解密到应用程序中。 这不是万无一失的,但是你要决定你想要的是多么严苛。

您可以使用CLR COM api编写将托管CLR的应用程序,这样您就可以首先在本机代码级别加载和解码程序集。 如果使用多种反向反向生成技术来强化本机加载器,则可以获得足够的安全性。

有一种隐藏数据的方法,称为隐写术 。 CodeProject上有一些文章的作者,他们写了一个框架来完成这个。 我认为这些文章的标题是“隐写术”,从1到12系列。 这是与作者有关​​联的网站 。

在这里找到了一个名为“Phoenix Protector”的混淆器,它可以混淆.NET代码,就个人而言,我没有尝试过,但听起来不错。

希望这会有所帮助,最好的问候,汤姆。

至少,你应该混淆你的dll,以防止黑客和竞争对手查看和理解你的代码。 混淆不是百分之百的万无一失,但它在他们的道路上提出了足够大的障碍。

诸如Crypto Obfuscator之类的一些混淆器具有在主exe中嵌入所有dll的function,因此您的dll不会明确可见并且可在磁盘上使用,以在反向工程工具(如Reflector)中打开。