反编译和反向工程.net程序集是标准做法。
我想发布一些将添加到现有应用程序的插件程序集,但我不希望其他人使用它们。
有什么方法可以隐藏这些装配的来源?
答案 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)中打开。