4

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

编辑

老问题winforms .net 真的等于开源吗? 编辑考虑了有关正确使用开源一词的评论

4

6 回答 6

10

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

RemoteSoft Salamander Suite
XHEO DeployLX

于 2010-01-21T05:07:52.780 回答
9

所有代码都可以进行逆向工程、复制、克隆、重用、重新链接和其他操作。开源的意思是在法律意义上是免费,不受限制,所以人们可以从代码中学习。这也意味着技术可以发展,可以创造更强大的长期技术经济,而不是短期主义。阅读“大教堂和集市”以获得有偏见但相关的观点。

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

编辑:我坚持我的原则,即使“开源”一词的使用被撤回。

于 2010-01-21T05:06:56.997 回答
6

有没有一种方法可以让我们加密代码(至少对于某些安全逻辑),这样它就不会被轻易破解或滥用。

其他人已经触及代码混淆器,但问问自己你真正想要完成什么:

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

    那么,只要没有人可以访问您的物理机器,该应用程序就可能是安全的。您可以假设如果攻击者拥有物理机,那么无论如何都没有希望了。

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

  • 您是否试图阻止用户盗版软件?SO上有很多关于许可密钥系统的帖子。

于 2010-01-21T05:21:43.073 回答
1

任何东西都可以逆向工程。虽然 .NET 程序集可以更容易地反编译,但有许多混淆器可以使代码更难理解。

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

这个问题并不是 .NET 程序集所独有的——任何应用程序都容易受到反编译的影响。如果原始源的安全性是您主要关心的问题,那么基于 Web 的应用程序(如网站或 Web 服务)可能会更好,因为您可以将程序集与外界隔离。

于 2010-01-21T05:06:37.030 回答
0

默默无闻永远无法帮助你...

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

所以在法律上你无论如何都不能使用反编译的程序(甚至反编译它们),我相信有一些选项(如果默认情况下没有打开)你可以使用基本的默默无闻,比如使用 var1...9999 作为变量名称和类名。

于 2010-01-21T05:14:15.233 回答
0

如果需要开源尝试框架。虽然它的一部分有一部分没有被微软作为公共语言基础设施 CLI 的一部分发布。对于您回答“否”,您不能在任何地方使用或重用/发布整体的一部分。您还可以查看转子共享源公共语言基础结构 2.0,它是开源的并由微软管理,但它不包含仅 CLI 的 Window 窗体命名空间。它仅用于学习和研究目的。微软还在codeplex发布了 MPL 下的代码. 即使对于开源,请仔细阅读许可证,GPL 和 LGPL 之间也存在差异。出于学习目的进行逆向工程,我认为可以,以防万一,例如某些不在您的代码中的问题出现,您可能想对其进行调试。为此,微软允许直接从其符号服务器使用它的框架源。您可以配置 Visual Studio 以下载任何 .NET 框架的源代码和符号:t,并对其进行调试以了解框架代码中发生的方式和情况。这是shawn burke 博客上一篇非常好的文章如何做到这一点。

于 2010-01-21T05:24:27.937 回答