几乎所有的 .net 程序集都可以使用Reflection进行反编译。这意味着所有 .net 产品都是开源的,因为代码可以很容易地被其他开发人员使用。有没有一种方法可以让我们加密代码(至少对于某些安全逻辑),这样它就不会被轻易破解或滥用。
编辑
老问题winforms .net 真的等于开源吗? 编辑考虑了有关正确使用开源一词的评论
几乎所有的 .net 程序集都可以使用Reflection进行反编译。这意味着所有 .net 产品都是开源的,因为代码可以很容易地被其他开发人员使用。有没有一种方法可以让我们加密代码(至少对于某些安全逻辑),这样它就不会被轻易破解或滥用。
编辑
老问题winforms .net 真的等于开源吗? 编辑考虑了有关正确使用开源一词的评论
有些工具可以加密 .NET 程序集,防止使用 Reflector 和类似工具进行反编译。他们还执行许多相关服务,例如混淆、嵌入式资源保护等。我知道的两个:
所有代码都可以进行逆向工程、复制、克隆、重用、重新链接和其他操作。开源的意思是在法律意义上是免费的,不受限制,所以人们可以从代码中学习。这也意味着技术可以发展,可以创造更强大的长期技术经济,而不是短期主义。阅读“大教堂和集市”以获得有偏见但相关的观点。
我不知道有一种足够强大的代码保护方法,它不仅仅是高度混淆,而且只是通过 obscurity 实现的安全性。仅您的问题就表明您需要通过阅读和研究问题意图 的技术、逻辑和可能的哲学品质来更多地了解您所询问的主题。
编辑:我坚持我的原则,即使“开源”一词的使用被撤回。
有没有一种方法可以让我们加密代码(至少对于某些安全逻辑),这样它就不会被轻易破解或滥用。
其他人已经触及代码混淆器,但问问自己你真正想要完成什么:
你想让你的代码更“安全”吗?通过默默无闻的安全性不仅是一种相对薄弱的策略,而且您也不应该将敏感数据放入源代码中!将密码、连接字符串等从代码中移出并放入配置文件中。
那么,只要没有人可以访问您的物理机器,该应用程序就可能是安全的。您可以假设如果攻击者拥有物理机,那么无论如何都没有希望了。
您是否试图保护专有算法?如果您不想花钱获得专利,那么最好的尝试和真正的策略是通过您控制的服务器上的 Web 服务公开您的 API。该应用程序调用 Web 服务——这意味着性能下降,并且您依赖于具有 Internet 连接的用户,但至少您的代码是绝对安全的。
您是否试图阻止用户盗版软件?SO上有很多关于许可密钥系统的帖子。
任何东西都可以逆向工程。虽然 .NET 程序集可以更容易地反编译,但有许多混淆器可以使代码更难理解。
没有任何好的方法可以加密您发送给客户的代码。在某些时候,代码必须被解密才能运行,这意味着客户端机器必须有能力这样做。如果客户端机器有能力解密代码,那么任何其他有权访问机器的人也有能力解密代码。
这个问题并不是 .NET 程序集所独有的——任何应用程序都容易受到反编译的影响。如果原始源的安全性是您主要关心的问题,那么基于 Web 的应用程序(如网站或 Web 服务)可能会更好,因为您可以将程序集与外界隔离。
默默无闻永远无法帮助你...
你的反编译代码可能有也可能没有有用的变量/类名,它肯定不会有注释,当然版权仍然属于你。
所以在法律上你无论如何都不能使用反编译的程序(甚至反编译它们),我相信有一些选项(如果默认情况下没有打开)你可以使用基本的默默无闻,比如使用 var1...9999 作为变量名称和类名。
如果需要开源尝试单框架。虽然它的一部分有一部分没有被微软作为公共语言基础设施 CLI 的一部分发布。对于您回答“否”,您不能在任何地方使用或重用/发布整体的一部分。您还可以查看转子共享源公共语言基础结构 2.0,它是开源的并由微软管理,但它不包含仅 CLI 的 Window 窗体命名空间。它仅用于学习和研究目的。微软还在codeplex发布了 MPL 下的代码. 即使对于开源,请仔细阅读许可证,GPL 和 LGPL 之间也存在差异。出于学习目的进行逆向工程,我认为可以,以防万一,例如某些不在您的代码中的问题出现,您可能想对其进行调试。为此,微软允许直接从其符号服务器使用它的框架源。您可以配置 Visual Studio 以下载任何 .NET 框架的源代码和符号:t,并对其进行调试以了解框架代码中发生的方式和情况。这是shawn burke 博客上一篇非常好的文章如何做到这一点。