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

时间:2010-01-24 23:49:31

标签: c# obfuscation decompiling

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

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

有什么方法可以隐藏这些装配的来源?

6 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:2)

你可以使用obfuscator tool,这会有所帮助,但仍然可以进行逆向工程。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以编写一个host CLR using the CLR COM api的应用程序,这样您就可以首先在本机代码级别加载和解码程序集。如果使用多个anti-reverse engeneering techniques来强化本机加载器,则可以获得足够的安全性。

答案 4 :(得分:0)

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

还有一个名为'Phoenix Protector'的混淆器,发现here,它可以混淆.NET代码,个人而言,我没有尝试过,但听起来不错。

希望这有帮助, 最好的祝福, 汤姆。

答案 5 :(得分:0)

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

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