是否可以防止.NET MSIL DLL的反编译?

时间:2010-01-21 05:03:18

标签: .net security decompiling

几乎所有.net程序集都可以使用Reflection进行解编译。这意味着所有.net产品都是开源的,因为代码可以很容易地被其他开发人员使用。 是不是有办法让我们可以加密代码(至少对某些安全逻辑来说),这样就不会轻易破解或误用。

修改

旧问题 winforms .net是否真的等同于开源?是根据有关正确使用开源

一词的评论进行编辑的

6 个答案:

答案 0 :(得分:10)

有些工具可以加密.NET程序集,防止使用Reflector和类似工具进行反编译。他们还执行一些相关的服务,如混淆,嵌入资源的保护等。我知道的两个:

<强> RemoteSoft Salamander Suite
XHEO DeployLX

答案 1 :(得分:9)

没有

所有代码都可以进行逆向工程,复制,克隆,重用,重新链接等。什么开源意味着它在法律意义上免费来限制,因此人们可以从代码学习。这也意味着技术可以增长,可以创造更强大的长期技术经济,而不是短期主义。阅读“大教堂和市集”是有偏见但相关的观点。

我不知道一种足够强大的代码保护方法,它不仅仅是高度混淆,而且只是通过默默无闻的安全性。仅凭您的问题表明,您需要通过阅读和研究技术,逻辑和可能问题意图的哲学品质来了解您所询问的主题。

  

编辑:即使使用“开放源代码”一词,我也坚持我的原则。

答案 2 :(得分:6)

  

我们有办法吗?   加密代码(至少对某些人而言)   安全逻辑)所以它不可能   容易破解或误用。

其他人已触及代码混淆器,但问问自己你真正想要实现的目标:

  • 您是否想让您的代码更“安全”?通过默默无闻的安全性不仅是一种相对较弱的策略,您也不应该将敏感数据放入源代码中!将密码,连接字符串等移出代码并转移到配置文件中。

    据推测,只要没有人可以访问您的物理机,应用程序就是安全的。您可以假设攻击者是否拥有物理机器,无论如何都有希望消失。

  • 您是否在尝试保护专有算法?如果您不想花钱获得专利,那么最好的尝试和真正的策略是通过您控制的服务器上的Web服务公开您的API。该应用程序调用Web服务 - 意味着性能下降,并且您依赖于具有Internet连接的用户,但至少您的代码绝对安全。

  • 您是否试图阻止用户盗版软件?有关许可密钥系统的问题有lots of posts

答案 3 :(得分:1)

任何东西都可以进行逆向工程。虽然可以更容易地反编译.NET程序集,但many obfuscators可以使代码更难理解。

没有任何好方法可以加密您发送给客户的代码。在某些时候,代码必须被解密才能运行,这意味着客户端机器必须能够执行此操作。如果客户端计算机具有解密代码的能力,那么有权访问该计算机的任何其他人也是如此。

此问题并非.NET程序集独有 - 任何应用程序都容易受到反编译。如果原始资源的安全性是您主要关注的问题,那么基于Web的应用程序(如网站或Web服务)可能会更好,因为您可以将程序集与外部世界隔离开来。

答案 4 :(得分:0)

晦涩永远无法帮助你......

您反编译的代码可能有也可能没有有用的变量/类名称,它肯定不会有评论,当然版权仍属于您。

从法律上讲,你无论如何都不能使用反编译程序(甚至反编译它们)而且我确定有一些选项(如果默认不启用)你可以使用基本的默认设置,例如使用var1 ... 9999作为变量名和类名。

答案 5 :(得分:0)

如果需要opensource,请尝试mono框架。虽然它的一部分部分尚未作为公共语言基础结构CLI的一部分由microsoft发布。对于你回答否,你不能在任何地方使用或重复使用/发布部分内容。您还可以查看rotor共享源公共语言基础结构2.0,它是一个开放的源码并由microsoft管理,但它不包含Window表单命名空间CLI。它仅用于学习和研究目的。 Microsoft还在codeplex的MPL下发布了代码。即使对于开源也请仔细阅读许可证,GPL和LGPL也有区别。为了学习的目的而进行逆向工程我觉得好的,例如某些问题出现在你的代码中,你可能想调试它。为此,microsoft允许直接从其符号服务器使用它的框架源。您可以配置可视化工作室来下载任何.NET框架的源代码和符号:t并将其调试到框架代码中的方式和内容。这是一篇非常好的文章,如何在shawn burke blog处完成。