【发布时间】:2011-01-08 22:09:22
【问题描述】:
对 .net 程序集进行反编译和逆向工程是一种标准做法。
我想发布一些将添加到现有应用程序的插件程序集,但我不希望它们被其他人使用。
有哪些方法可以隐藏这些程序集的来源?
【问题讨论】:
标签: c# obfuscation decompiling
对 .net 程序集进行反编译和逆向工程是一种标准做法。
我想发布一些将添加到现有应用程序的插件程序集,但我不希望它们被其他人使用。
有哪些方法可以隐藏这些程序集的来源?
【问题讨论】:
标签: c# obfuscation decompiling
这是软件;世事皆可能。您可以加密您的二进制文件,然后在运行时将它们全部或部分解密到您的应用程序中。这不是万无一失的,但要由你决定你想变得多么严厉。
【讨论】:
您可以使用obfuscator tool,这会有所帮助,但逆向工程仍然很有可能。
您的用户的计算机需要知道它需要做什么,因此您必须告诉它。计算机的所有者对其拥有完全的控制权,因此他可以知道您告诉计算机做什么,并且他可以告诉它做其他事情。
【讨论】:
除非您控制目标硬件,否则理论上不可能实现 100% 的保护。如果 CPU 能够执行它,只要有足够的时间和知识,人类也可以阅读它。这甚至不限于 C#(尽管它通常更容易在托管语言中执行)。您可以使用 Dotfuscator 或 XenoCode 之类的混淆器来使反编译代码更难理解。如果你真的很担心,你应该转向基于服务器的应用程序。
【讨论】:
您可以编写一个将host CLR using the CLR COM api 的应用程序,这样您就可以首先在本机代码级别加载和解码程序集。如果您使用多个anti-reverse engeneering techniques 来加强本机加载程序,您可以获得足够好的安全性。
【讨论】:
有一种方法可以隐藏数据,称为steganography。 CodeProject 上涵盖了许多文章的作者,他为此编写了一个框架。我认为文章的标题是从 1 到 12 的系列中的“隐写术”。这是作者所属的website。
还有一个叫'Phoenix Protector'的混淆器,找到here,可以对.NET代码进行混淆,我个人没试过,但听起来不错。
希望这会有所帮助, 最好的祝福, 汤姆。
【讨论】:
至少,您应该混淆您的 dll,以防止黑客和竞争对手查看和理解您的代码。混淆不是 100% 万无一失的,但它在他们的道路上提出了一个足够大的障碍。
Crypto Obfuscator 等一些混淆器具有将所有 dll 嵌入到主 exe 中的功能,因此您的 dll 不会显式可见,并且可以在磁盘上使用 Reflector 等逆向工程工具打开。
【讨论】: