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

出于知识产权的原因,我需要对代码进行混淆,到目前为止我一直在使用 dotfuscator 的版本,该版本已经有 5 年多的历史了。我认为是时候转向新一代工具了。我正在寻找的是在搜索新的混淆器时应该考虑的要求列表。

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

  • 序列化/反序列化. 。在我当前的解决方案中,我只是告诉工具 不是 混淆任何类数据成员,因为无法加载先前序列化的数据的痛苦太大了。
  • 与构建过程集成
  • 使用 ASP.NET. 。过去,我发现这个问题是由于更改 .dll 名称(通常每页都有一个)而导致的 - 并非所有工具都能很好地处理这一问题。
有帮助吗?

解决方案

回到.Net 1.1,混淆是必不可少的:反编译代码很容易,您可以从汇编、IL 到 C# 代码,然后毫不费力地再次编译它。

现在对于 .Net 3.5,我完全不确定。尝试反编译 3.5 程序集;你得到的东西离编译还有很长的路要走。

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

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

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

其他提示

我们已经尝试了许多混淆器。它们都不适用于使用远程处理的大型客户端/服务器应用程序。问题是客户端和服务器共享一些dll,而我们还没有找到任何可以处理它的混淆器。

我们尝试过 DotFuscator Pro、SmartAssembly、XenoCode、Salamander 和几个我记不清名字的小型应用程序。

坦率地说,我确信混淆是一个大黑客。

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

我现在正陷入困境,试图找到一个好的解决方案。这是迄今为止我的印象。

异种代码 - 我有一个旧的 Xenocode2005 许可证,我用它来混淆我的 .net 2.0 程序集。它在 XP 上运行良好,是一个不错的解决方案。我当前的项目是 .net 3.5,我使用的是 Vista,支持人员告诉我可以尝试一下,但 2005 版本甚至无法在 Vista 上运行(崩溃),所以我现在必须以令人惊叹的价格购买“PostBuild2008” 1900 美元。这可能是一个很好的工具,但我不会找出答案。太贵了。

Reactor.Net - 这是一个更具吸引力的价格点,并且在我的独立可执行文件上运行良好。许可模块也很好,可以节省我很多精力。不幸的是,它缺少一个关键功能,那就是从混淆中排除内容的能力。这使得无法实现我需要的结果(将多个程序集合并在一起,混淆一些程序集,不混淆其他程序集)。

智能装配 - 我为此下载了 Eval,它运行得非常完美。我能够实现我想要的一切,并且界面是一流的。价格点还是有点高。

点模糊器专业版 - 在网站上找不到价格。目前正在讨论以获得报价。听起来不祥。

迷惑者 - 一个运行良好的开源项目(顾名思义,是为了迷惑人们)。 https://confuser.codeplex.com/
(由 jgauffin 添加)

笔记:据报道 ConfuserEx 已“损坏” 问题#498 在他们的 GitHub 存储库上。

如果您正在寻找免费的,您可以尝试 Visual Studio 附带的 DotObfuscator Community Edition 或 Eazfuscator.NET.


自2012年6月29日起, ,Eazfuscator.NET 现已商业化。最后一个免费可用版本是 3.3。

我一直在使用智能装配。基本上,你选择一个 dll,它会返回混淆的结果。它似乎运行良好,到目前为止我还没有遇到任何问题。非常非常容易使用。

我尝试过市场上几乎所有的混淆器,我认为 SmartAssembly 是最好的。

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

需要澄清的是,我只是一个喜欢该产品的客户,与公司没有任何关系。

简短的回答是你不能。

有各种各样的工具会让别人更难阅读你的代码 - 其他答案已经指出了其中一些工具。

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

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

根据我的经验,任何混淆器都可以很好地处理 .net 的任何方面,包括 asp.net 和远程处理,您只需熟悉这些设置并了解您可以在代码的哪些区域将其推进到什么程度。并花时间尝试对您获得的内容进行逆向工程,看看它如何在各种设置下工作。

多年来,我们在商业应用程序中使用了几种,最终选择了 9rays.net 的 Spices 混淆器,因为价格合适,它能完成工作,而且他们有很好的支持,尽管我们已经很多年不再需要支持了,但说实话我认为使用哪种混淆器并不重要,如果您想让它与远程处理和 ASP.NET 一起正常工作,问题和学习曲线都是相同的。

正如其他人所提到的,您真正所做的一切相当于一把挂锁,将其他诚实的人拒之门外,或者使简单地重新编译应用程序变得更加困难。

对于大多数人来说,许可通常是关键领域,无论如何,您绝对应该使用某种数字签名证书系统来进行许可。如果您没有适当的智能系统,那么您最大的损失将来自许可证的随意共享,破坏许可系统的人一开始就不会购买。

很容易走得太远,对您的客户和您的业务产生负面影响,做简单合理的事情,然后就不用担心。

在过去的两天里,我一直在尝试 Dotfuscator Community Edition Advanced(注册与 Visual Studio 捆绑在一起的基本 CE 后可以免费下载)。

我认为更多人不使用混淆作为默认选项的原因是,与风险相比,这是一个严重的麻烦。在较小的测试项目中,我可以花费很多精力来运行混淆的代码。通过 ClickOnce 部署一个简单的项目很麻烦,但在使用 mage 手动签署清单后可以实现。唯一的问题是,出现错误时,堆栈跟踪会被混淆,并且 CE 没有封装反混淆器或澄清器。

我试图混淆一个基于 Excel 的 VSTO 的真实项目,其中包含 Virtual Earth 集成、大量 Web 服务调用、IOC 容器以及大量反射。这是不可能的。

如果混淆确实是一个关键要求,那么您应该从一开始就考虑到这一点来设计您的应用程序,并随着您的进展测试混淆的版本。否则,如果这是一个相当复杂的项目,你最终会遭受巨大的痛苦。

加密混淆器 解决您所有的担忧和情况。它 :

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

我最近尝试将一个免费混淆器的输出通过管道传输到另一个免费混淆器 - 即 Dotfuscator CE 和 CodePlex 上的新 Babel 混淆器。更多细节 在我的博客上.

至于序列化,我已将该代码移至另一个 DLL 中并将其包含在项目中。我推断其中没有任何秘密不在 XML 中,因此不需要混淆。如果这些类中有任何严重的代码,则在主程序集中使用分部类应该可以覆盖它。

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

关于字节码逆向,您应该了解的是,安全测试人员检查直接 X86 代码并查找其中的漏洞已经是标准做法。在原始 X86 中,您甚至不一定能找到有效的函数,更不用说在整个函数调用中跟踪局部变量了。在几乎任何情况下,本机代码逆向者都无法访问函数和变量名称——除非他们正在审查 Microsoft 代码,而 MSFT 会为此向公众提供该信息。

“Dotfuscation”主要通过扰乱函数和变量名称来工作。这样做可能比发布带有调试级别信息的代码更好,在调试级别信息中,Reflector 实际上放弃了您的源代码。但超出此范围所做的任何事情都可能会导致收益递减。

我在使用 Smartassemble 时没有遇到任何问题。

您可以使用“Dotfuscator Community Edition” - 它默认出现在 Visual Studio 2008 Professional 中。您可以在以下位置阅读相关内容:

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

该产品的“专业”版本需要花钱,但效果更好。

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

避免反应堆。它完全没用(是的,我支付了许可证费用)。Xenocode 是我遇到过的最好的一个,也购买了许可证。支持非常好,但我并不需要太多,因为它刚刚起作用。我测试了我能找到的每一个混淆器,我的结论是 xenocode 无疑是最强大的并且做得最好(也可以将您的 .NET exe 后处理为我在其他地方没有看到的本机 exe)。

reactor 和 xenocode 之间有两个主要区别。第一个是 Xenocode 确实有效。第二个是程序集的执行速度没有什么不同。使用反应堆时,速度慢了约 600 万倍。我还觉得反应堆是一个人操作的。

我发现 Agile.Net 为您的 .Net 程序集提供了很好的保护,因为它不仅提供混淆,还提供加密。下载免费试用版。
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

自 .Net 1 以来,我一直在同一应用程序中混淆代码,从维护角度来看,这是一个令人头疼的问题。正如您所提到的,序列化问题是可以避免的,但是很容易犯错误并混淆您不想混淆的内容。破坏构建或更改混淆模式很容易并且无法打开旧文件。另外,找出问题所在以及问题所在也很困难。

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

这是微软自己的文档。 希望有帮助...,这是 2003 年的内容,但可能仍然相关。

我们在 Windows 客户端上使用 SmartAssembly。效果很好。

也确实增加了一些额外的问题。在日志文件/异常中打印出类名必须进行反混淆。当然,不能从类的名称创建类。因此,最好检查一下您的客户端,看看通过混淆可以解决哪些问题。

这完全取决于您使用的编程语言。阅读文章: 混淆代码

免费的方法是在 Visual Studio 中使用 dotfuscator,否则你必须出去购买像 Postbuild 这样的混淆器(http://www.xenocode.com/Landing/Obfuscation.aspx)

我必须在最新的 rpoject 中使用混淆/资源保护并发现 加密混淆器 作为一个漂亮且易于使用的工具。序列化问题只是该工具中的设置问题。

有一个很好的开源版本,称为 Obfuscar。似乎工作正常。可以排除类型、属性、字段、方法。原文在这里: https://code.google.com/p/obfuscar/, ,但由于它似乎不再更新,有人将其分叉到这里: https://obfuscar.codeplex.com/

您可能还想了解新的代码保护技术,例如 梅塔福里克V.i.实验室 以及新的软件版权保护技术,例如 字节盾. 。披露:我在 ByteShield 工作。

我也使用智能装配。但是,我不知道它如何适用于网络应用程序。但是,我想指出,如果您的应用程序使用共享软件类型保护,请确保它不会检查带有布尔返回值的许可证。字节破解太容易了。http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

SmartAssembly 很棒,我的大部分项目都用过

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

混淆并不是真正的保护。

如果您有 .NET Exe 文件,则有一个 好得多 解决方案。

我用 泰米达 可以说它运作得很好。

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

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

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

我尝试过一种名为 Rummage 的产品,它在给你一些控制方面做得很好......虽然它缺少Eziriz提供的很多东西,但是Rummage的价格太优惠了......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top