.NET 模糊处理工具/策略

我的产品有几个组件: ASP.NET、 Windows 窗体应用程序和 Windows 服务。95% 左右的代码是用 VB.NET 编写的。

出于知识产权的原因,我需要混淆代码,直到现在,我一直在使用一个版本的 dotfuscator,现在已经超过5年。我认为是时候转向新一代工具了。我正在寻找的是一个需求列表,我应该考虑当搜索一个新的混淆器。

到目前为止,我知道我应该寻找什么:

  • 序列化/反序列化 。在我目前的解决方案中,我只是告诉工具 没有混淆任何类数据成员,因为无法加载以前序列化的数据的痛苦实在太大了。
  • 与构建过程的集成
  • 使用 ASP.NET 。在过去,我发现这个问题由于改变。Dll 名称(通常每页有一个)——并非所有工具都能很好地处理这些名称。
148767 次浏览

我一直在用智能组装。基本上,你选择一个 dll,它返回它混淆。它看起来工作得很好,到目前为止我还没有遇到任何问题。非常,非常容易使用。

如果你想找一个免费的,你可以试试 VisualStudio 或者 Eazfuscator.NET附带的 DotObfuscator 社区版。


从2012年6月29日开始,Eazfuscator.NET 已经商业化,最新的免费版本是3.3。

我尝试了市场上几乎所有的模糊处理器,在我看来 SmartAssembly 是最好的。

我们已经尝试了一些混淆器。它们都不能在使用远程处理的大型客户机/服务器应用程序上工作。问题是客户端和服务器共享一些 dll,我们没有发现任何模糊处理程序可以处理它。

我们已经尝试了 DotFuscator Pro、 SmartAssembly、 XenoCode、 Salamander 和几个名字让我想不起来的小应用程序。

老实说,我相信混淆是个大问题。

甚至它所解决的问题也不完全是一个真正的问题。您真正需要保护的唯一事情是连接字符串、激活代码和诸如此类的安全敏感事件。另一家公司将对你的整个代码库进行逆向工程,并从中创建一个竞争产品,这种胡说八道是偏执狂经理的噩梦,而不是现实。

回来了。Net 1.1的模糊处理是必要的: 反编译代码很容易,你可以从汇编,到 IL,再到 C # 代码,然后很轻松地再次编译它。

现在。净值3.5,我一点也不确定。尝试反编译一个3.5程序集; 从编译得到的结果还有很长的路要走。

添加来自3.5的优化(远远优于1.1)和匿名类型、委托等通过反射处理的方式(它们是重新编译的噩梦)。添加 lambda 表达式、像 Linq 语法和 var这样的编译器“魔法”,以及像 yield这样的 C # 2函数(这会导致新类的名称不可读)。反编译的代码离可编译还有很长的路要走。

一个有大量时间的专业团队仍然可以对它进行反向工程,但是对于任何混淆的代码也是如此。他们从中得到的代码将是不可维护的,并且很可能有很多错误。

我建议对程序集进行密钥签名(这意味着如果黑客可以重新编译一个程序集,他们必须重新编译所有程序集) ,但我认为混淆是不值得的。

从那以后,我一直在同一个应用程序中混淆代码。从维护的角度来看,这是一个令人头疼的问题。正如您所提到的,序列化问题是可以避免的,但是很容易出现错误并混淆您不希望混淆的内容。很容易破坏构建,或者更改混淆模式,无法打开旧文件。另外,要找出哪里出了问题,哪里出了问题,可能会很困难。

我们的选择是 Xenocode,如果我今天再次做出这个选择,我宁愿不要混淆代码,或者使用 Dotfuscator。

我也一直在使用 SmartAssembly。 我发现 Ezrinz.Net 反应器在.Net 应用程序上对我更好。 它混淆、支持 Mono、合并程序集,并且它还有一个非常好的许可模块来创建试用版或将许可链接到特定的机器(非常容易实现)。 价格也是非常有竞争力的,当我需要支持他们的地方很快。 Eziriz

先说清楚,我只是一个喜欢产品的顾客,与公司没有任何关系。

您应该使用最便宜和最知名的平台,然后收工。高级语言的混淆是一个难题,因为 VM 操作码流不会遇到本机操作码流所遇到的两个最大问题: 函数/方法识别和寄存器别名。

关于字节码逆转,您应该知道的是,对于安全测试人员来说,检查直接的 X86代码并发现其中的漏洞已经是标准做法。在原始 X86中,甚至不一定能找到有效的函数,更不用说在整个函数调用过程中跟踪局部变量了。几乎没有任何情况下,本地代码反向程序可以访问函数和变量名——除非他们正在查看 Microsoft 代码,而 MSFT 为此向公众提供了有用的信息。

“ Dotfusation”主要通过加扰函数和变量名来工作。这样做可能比使用调试级别的信息发布代码更好,因为在这种情况下,反射器实际上放弃了您的源代码。但除此之外,你做的任何事情都有可能陷入报酬递减。

我最近尝试管道输出的一个免费模糊处理器到另一个免费模糊处理器-即 Dotfuscator CE 和新的 Babel 模糊处理器在 CodePlex。更多细节 在我的博客上

至于序列化,我已经将该代码移动到另一个 DLL 中,并将其包含在项目中。我推断,这里面没有任何不存在于 XML 中的秘密,所以它不需要混淆。如果这些类中有任何重要的代码,那么在主程序集中使用分部类应该可以解决这个问题。

我对 SmartAssembly 没有意见。

我们有一个具有 asp.net 和 winform 界面的多层应用程序,它也支持远程处理。我没有使用任何混淆器的问题,除了加密类型生成一个加载程序,可以在各种意想不到的方式是有问题的,只是不值得在我看来。实际上,我的建议更接近于“避免像瘟疫一样加密加载程序类型的模糊处理器”。:)

根据我的经验,任何模糊处理器都可以很好地处理。Net 包括 asp.net 和 Remoting,你只需要熟悉一下设置,了解一下你可以把它推到代码的哪个区域。花点时间尝试一下你得到的逆向工程,看看它是如何与各种设置协同工作的。

我们在商业应用程序中使用了几年,最终选择了9rays.net 的 Spices 模糊处理器,因为它的价格合理,功能正常,而且支持性也很好,虽然我们已经很多年没有需要支持了,但是说实话,我不认为你使用哪个模糊处理器真的有什么关系,如果你想让它在 Remoting 和 asp.net 中正常工作,问题和学习曲线都是一样的。

正如其他人提到的那样,你所做的一切实际上相当于一把挂锁,把诚实的人拒之门外,或者让重新编译一个应用程序变得更加困难。

许可证通常是大多数人的关键领域,无论如何,您都应该使用某种数字签名的证书系统进行许可。如果你没有一个合适的智能系统,你最大的损失将来自于随意的共享许可证,那些违反许可证制度的人从一开始就不会购买许可证。

这真的很容易走得太远,对你的客户和你的业务产生负面影响,做什么是简单和合理的,然后不要担心它。

您可能还想了解新的代码保护技术,如 超能力者V.I 实验室,以及新的软件复制保护技术,如 字节盾牌。披露: 我为字节盾工作。

在过去的两天里,我一直在试验 Dotfuscator 社区版的高级版(注册了 Visual Studio 附带的基本 CE 之后可以免费下载)。

我认为,更多的人不使用模糊处理作为默认选项的原因是,与风险相比,这是一个严重的麻烦。在较小的测试项目中,我可以费很大的力气让混淆的代码运行起来。通过 ClickOnce 部署一个简单的项目是很麻烦的,但是在使用魔法手动签署清单之后就可以实现。唯一的问题是,在错误的堆栈跟踪返回模糊和 CE 没有一个解模糊或澄清包。

我试图混淆一个真正的项目,它是基于 Excel 的 VSTO,集成了虚拟地球,大量的 Web 服务调用和 IOC 容器以及大量的反射。这是不可能的。

如果模糊化真的是一个关键的需求,那么您应该从一开始就牢记这一点来设计您的应用程序,并随着您的进展测试模糊化的构建。否则,如果这是一个相当复杂的项目,你最终将承受巨大的痛苦。

我也用智能组装。然而,我不知道它是如何工作的一个网络应用程序。但是,我想指出的是,如果您的应用程序使用共享软件类型保护,请确保它不检查一个布尔返回许可证。字节破解太容易了。 Http://blogs.compdj.com/post/binary-hack-a-net-executable.aspx

我们在 Windows 客户端上使用 SmartAssembly,工作正常。

也增加了一些额外的问题。在日志文件/异常中打印您的类名必须解除混淆。当然也不能用它的名字创建一个类。所以,最好看看你的客户,看看通过混淆视听你能得到什么样的问题。

我现在正在努力寻找一个好的解决方案,以下是我目前的印象。

Xenocode -我有一个 Xenocode2005的旧许可证,我用它来混淆我的。净2.0组件。它在 XP 上运行良好,是一个不错的解决方案。我现在的项目是。Net 3.5,我在 Vista 上,支持人员告诉我试一试,但2005版本甚至不能在 Vista 上工作(崩溃) ,所以我和现在我不得不以令人瞠目结舌的1900美元的价格点购买“ PostBuild2008”。这可能是一个很好的工具,但我不会去找出。太贵了。

反应堆。Net -这是一个更具吸引力的价格点,它在我的独立可执行文件上运行良好。授权模块也很不错,可以节省我很多精力。不幸的是,它缺少一个关键特性,那就是从混淆中排除东西的能力。这使得它不可能实现我需要的结果(合并多个程序集在一起,混淆一些,而不是混淆其他)。

SmartAssembly -我为此下载了 Eval,它工作得非常完美。我能够实现我想要的一切,接口是一流的。价格还是有点高。

Dotfuscator Pro -在网站上找不到价格。目前正在讨论获得报价。听起来不妙。

Confuser -一个非常好用的开源项目(顾名思义,就是为了混淆 ppl)。

注意: 据报道 ConfuserEx 在 GitHub 的回购中被 第498期“破坏”了。

这完全取决于您所使用的编程语言。 阅读这篇文章: 模糊代码

这里有一份来自微软自己的文档。 Hope that help... ,它来自2003年,但可能仍然是相关的。

免费的方式将是使用 dotfuscator 从内部的视觉工作室,否则你必须走出去,并购买一个混淆器喜欢 Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)

简而言之,你不能。

周围有各种各样的工具,它们会让别人更难读懂你的代码——其中一些已经被其他答案指出来了。

然而,所有这些只会让阅读变得更加困难——它们增加了所需的努力量,仅此而已。通常,这足以阻止一般的读者,但是那些决心深入研究您的代码的人总是能够做到这一点。

您可以使用“ Dotfuscator 社区版”-它在 VisualStudio2008Professional 中默认使用。你可以在以下网址阅读:

Http://msdn.microsoft.com/en-us/library/ms227240%28vs.80%29.aspx
Http://www.preemptive.com/dotfuscator.html

该产品的“专业”版本花费金钱,但更好。

你真的需要你的代码被混淆吗?除非出于安全目的,否则反编译应用程序通常没有什么问题。如果您担心有人“窃取”您的代码,那么不必担心; 绝大多数查看您的代码的人都是出于学习的目的。无论如何,没有完全有效的混淆策略。NET-有足够技能的人总是能够反编译/改变你的应用程序。

我尝试了 Eziriz 的演示版本... ... 我喜欢它。但从来没有带来的软件。

Crypto Obfuscator 解决所有你关心的问题和场景。它:

  1. 根据规则自动排除类型/成员,序列化的类型/字段就是其中之一。
  2. 它可以使用 MSBuild 集成到构建过程中。
  3. 支持 ASP.Net 项目。

SmartAssembly 很棒,我在大多数项目中都使用了它

我不得不在我最近的项目中使用模糊/资源保护,并发现 加密迷惑器是一个很好的和简单的使用工具。序列化问题只是此工具中的设置问题。

避免使用反应堆。这是完全没有用的(是的,我支付了许可证)。Xenocode 是我遇到的最好的一个,我也买了一个许可证。支持是非常好的,但我不需要它,因为它只是工作。我测试了每一个我能找到的混淆器,我的结论是,异种代码是远远最健壮的,并做了最好的工作(也可能后期处理你的。NET exe 转换为原生 exe,这是我在其他任何地方都没有看到的。).

反应器和异种密码有两个主要的区别。 第一个是 Xenocode 实际上可以工作。 其次,程序集的执行速度没有什么不同。使用反应堆时,它的速度要慢600万倍。我还得到的印象是,反应堆是一个人的操作。

我找到了敏捷。网络为你提供了很好的保护。因为它不仅提供混淆,而且加密。下载一条免费小径。
Http://secureteam.net/net-code-protection.aspx Http://secureteam.net/downloads.aspx

我已经尝试了一个产品称为翻箱倒柜,它做了一个很好的工作,给你一些控制... 虽然它缺乏许多东西,Eziriz 提供,但价格翻箱倒柜是太好了..。

有一个很好的开源版本叫做 Obfuscar。看起来没问题。可以排除类型、属性、字段和方法。原来是在这里: https://code.google.com/p/obfuscar/,但因为它似乎不再更新

混淆视听不是真正的保护。

如果您有一个.NETExe 文件,则有一个 好多了解决方案。

我使用 塞米达,可以看出它工作得非常好。

Themida 唯一的缺点是它不能保护.NET Dlls。 (它还保护 Exe 和 DLL 中的 C + + 代码)

Themida 是远远低于这里提到的混淆器,是最好的在 盗版 保护在市场上。它创建了一个虚拟机的关键部分,您的代码运行,并运行几个线程,检测操作或断点设置的破解器。它将。NET 执行文件转换成反射器甚至不能识别为。NET 程序集了。

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