在.NET中是否可以从运行的应用程序中转储IL?

时间:2012-03-13 14:44:43

标签: .net obfuscation il

让我们说我的应用程序包含一些我想要防止观察和调查的算法。我正在考虑从Smart Assembly产品中选择将我的程序集的加密版本嵌入到主exe程序集资源中。因此,如果没有解密,reversengineer就无法调查那些程序集的代码。在运行时,SA在需要时透明地将它们解密到内存中。

所以我的问题是:逆向工程师是否有可能从运行applcation的内存中转储IL的程序集?

为什么不使用混淆?好吧,我的应用程序非常复杂,我看到的所有.NET混淆器都无法正确处理它。

2 个答案:

答案 0 :(得分:4)

一旦解密IL并将其存储在内存中以便执行,它就可以被感兴趣的第三方检索到。您可以向上游游泳并在您的应用程序中添加额外的复杂层,但最终愿意花时间的人将能够获得您的IL。

您必须权衡制定对策的成本与某人花费精力浏览您的算法的IL(或JIT输出)的可能性。也许更强大的商业混淆引擎是增值。也许IL的加密和解密是一种增值。

我只能说安全是一个很好的经验法则:不允许访问您不希望其他人拥有的内容。

如果他们无法访问您的算法,则可执行文件的分发是非首发:考虑托管解决方案(例如Citrix,虚拟桌面等)。

答案 1 :(得分:2)

是的,这是可能的,即使它不一定是微不足道的。对于采用这种方法的几种混淆产品,有一些公开的翻斗车,虽然他们的消息来源声名狼借,我个人不会在非常孤立和非常一次性的机器上使用它们。这并不意味着那些故意滥用您的知识产权的人可能会有任何顾忌使用(或开发)此类工具。