.NET世界中混淆的替代方案

是否有任何混淆的替代方法可以保护您的代码不被窃取?

最终的保护是SaaS模型。 任何其他东西都会以某种方式暴露你的宝贵秘密。

请参阅: http : //en.wikipedia.org/wiki/Software_as_a_service

简短的回答是:

  • 混淆与盗窃保护毫无关系。
  • 混淆的唯一目的是使您更难以阅读和理解您的代码,以便在最好的情况下,逆向工程经济缺乏吸引力。

有人可能会窃取您的源代码。 即使您使用最佳可用的混淆技术,或者您考虑使用SaaS方案。

通常,您的源代码至少在两个位置以及构建项目所需的所有元文件:

  1. 你的开发计算机
  2. 你的代码库

如果您想保护您的代码免遭盗窃,这些是第一个必须处于活动状态的地方。 即便是像Adobe,微软公司,赛门铁克这样的市场上最大的玩家也因盗窃而丢失了源代码,但并未因逆向工程而丢失。 在大公司中,它不需要外部攻击者 – 离职员工有时候就足够了。

您可能对以下内容感兴趣:

  • 强大的机器加密
  • 防病毒,Anti rootkit,反恶意软件
  • 防火墙和入侵检测
  • 数字财产保护
  • 开发计算机上有限的互联网访问
  • 托管远程开发环境,以便源永远不会离开安全的服务器和基础架构
  • 等等。
  • 明确的流程和合理的权利管理

今天在许多情况下,一些坏人设法访问您的存储库或开发系统或者离开的员工拥有代码的“备份副本”比一些公司在现有应用程序的逆向工程中投入时间更大的风险创建一个1:1的副本或进行修改(在大多数国家/地区都是非法的,可能会导致声誉和昂贵的句子受到严重损害,他们也无法获得此类黑客和修改软件的专业支持)

混淆并不意味着您的知识产权可以安全地防止被盗或被复制。 根据您使用的混淆器,仍然可以分析逻辑。

如果你想让分析逻辑更难,你需要某种控制流混淆。 但是cfo可以产生很多有趣且难以调试的问题。 我敢肯定,在大多数情况下,这是一个额外的问题而不是解决方案。

糟糕的现实是,混淆解决了逆向工程的问题。 它解决了1:1(或接近1:1)代码副本的问题。 这是因为大多数软件具有可识别的用户界面或行为,并且几乎在所有情况下都可以重现用户界面和行为(或者更确切地说:结果)并且没有工具来保护软件不受此影响。

如果你想让偶然的程序员理解你的代码,像obfuscar这样的开源工具可能就足够了。 但我敢打赌,如果您使用reflection,远程处理,插件,动态assembly加载和构建等技术,您会遇到问题。

从我的观点来看 – 这也是我的经验 – 在大多数情况下,混淆是可以消耗的。

如果你真的想让其他人难以访问你的代码(虽然“真的很难”是相对的),你通常有两个选择:

  1. 某种具有虚拟执行环境和虚拟文件系统的加密容器,它不仅可以保护您的代码,还可以保护整个应用程序及其结构。 攻击向量例如是运行时期间的内存或容器本身。

  2. 想想SaaS,这意味着您提供对软件的访问权限,而不是软件本身。 但请记住,SaaS-Solutions难以开发且价格昂贵,具体取决于您希望或必须提供的服务级别,安全性和信心。 攻击向量是例如服务器基础结构。

最终的100%防弹解决方案 – 实际上 – 在这个星球上不存在。

最后但并非最不重要的是,在某些情况下可能需要向客户提供完整的源代码。 例如,如果您开发单独的软件并且交付代码是合同的一部分,或者您希望在航空航天,军事工业,政府系统等关键领域开展业务。

您还可以将敏感函数/组件编码为本机C ++,将其包装在C ++ / CLI中并与.NET一起使用。

显然,它仍然可以进行逆向工程,但仍然是一种替代方案。

没有任何混淆器足以保护用.NET编写的应用程序。 算了吧! 混淆不是真正的保护。

如果您有.NET Exe文件,则可以使用FAR更好的解决方案。

我使用Themida并且可以说它运作良好。

Themida比最混淆的人便宜得多,并且是市场上最好的反盗版保护。 它创建了一个虚拟机,运行代码的关键部分并运行多个线程来检测由破解者设置的操作或断点。 它将.NET Exe转换为Reflector甚至不再识别为.NET程序集的东西。

请阅读其网站上的详细说明: http : //www.oreans.com/themida_features.php

Themida的唯一缺点是它无法保护.NET Dlls。 (它的优势在于保护Exe和DLL中的C ++代码)