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

时间:2011-08-26 11:38:32

标签: c# .net obfuscation

是否有任何混淆的替代方法可以防止您的代码被盗?

4 个答案:

答案 0 :(得分:22)

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

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

答案 1 :(得分:4)

简短的回答是:

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

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

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

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

    所以你可能对以下内容感兴趣:

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

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

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

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

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

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

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

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

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

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:-1)

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

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

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

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

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

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