165

我的产品有几个组件:ASP.NET、Windows Forms App 和 Windows Service。95% 左右的代码是用 VB.NET 编写的。

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

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

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

30 回答 30

50

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

我们已经尝试过 DotFuscator Pro、SmartAssembly、XenoCode、Salamander 和几个小型应用程序,它们的名字让我无法理解。

坦率地说,我确信混淆是一个大技巧。

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

于 2008-08-07T18:15:46.197 回答
46

我现在对此很“膝盖”,试图找到一个好的解决方案。以下是我目前的印象。

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

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

SmartAssembly - 我为此下载了 Eval,它运行良好。我能够实现我想要的一切,并且界面是一流的。价格点还是有点高。

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

Confuser - 一个运行良好的开源项目(顾名思义,混淆 ppl)。

注意:据报道,ConfuserEx在其 GitHub存储库中根据Issue #498被“破坏”。

于 2009-05-11T06:04:41.227 回答
45

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

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

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

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

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

于 2008-08-12T12:19:13.800 回答
23

如果您正在寻找免费的,您可以尝试使用 Visual Studio 或Eazfuscator.NET附带的 DotObfuscator 社区版。


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

于 2008-08-05T16:30:40.170 回答
18

我一直在使用智能组装。基本上,您选择一个 dll,它会返回混淆的内容。它似乎工作正常,到目前为止我没有遇到任何问题。非常非常好用。

于 2008-08-05T16:21:56.223 回答
10

我已经尝试了市场上几乎所有的混淆器,SmartAssembly 在我看来是最好的。

于 2008-08-07T10:44:33.580 回答
9

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

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

于 2008-08-22T17:41:21.020 回答
7

简短的回答是你不能。

周围有各种工具会使某人更难阅读您的代码 - 其中一些已被其他答案指出。

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

于 2009-07-16T21:45:02.367 回答
6

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

根据我的经验,任何混淆器都可以很好地处理 .net 的任何方面,包括 asp.net 和远程处理,您只需要熟悉设置并了解您可以在代码的哪些区域推动它。并花时间尝试对你得到的东西进行逆向工程,看看它是如何与各种设置一起工作的。

多年来,我们在我们的商业应用程序中使用了几个,并选择了来自 9rays.net 的 Spices 混淆器,因为价格合适,它可以完成工作并且他们有很好的支持,虽然我们真的多年来不再需要支持,但老实说我认为你使用哪个混淆器并不重要,如果你想让它与远程处理和 asp.net 一起正常工作,问题和学习曲线都是一样的。

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

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

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

于 2008-11-16T19:57:28.593 回答
6

Crypto Obfuscator解决您所有的问题和场景。它 :

  1. 根据规则自动从混淆中排除类型/成员。序列化类型/字段就是其中之一。
  2. 它可以使用 MSBUild 集成到构建过程中。
  3. 支持 ASP.Net 项目。
于 2009-10-09T09:42:26.303 回答
5

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

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

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

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

于 2009-02-04T22:40:14.280 回答
4

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

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

于 2008-09-11T11:53:35.760 回答
3

您应该使用最便宜和最适合您的平台的任何东西,然后收工。高级语言的混淆是一个难题,因为 VM 操作码流不会受到原生操作码流存在的两个最大问题的困扰:函数/方法识别和寄存器别名。

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

“Dotfuscation”主要通过加扰函数和变量名来工作。这样做可能比发布带有调试级别信息的代码更好,因为反射器实际上放弃了您的源代码。但是,您在此之外所做的任何事情都可能导致收益递减。

于 2008-09-10T21:38:59.277 回答
3

我对 Smartassembly 没有任何问题。

于 2008-09-16T11:12:55.457 回答
3

您可以使用“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 没有完全有效的混淆策略 - 有足够技能的人总是能够反编译/更改您的应用程序。

于 2009-07-16T21:47:44.360 回答
3

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

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

于 2011-05-04T09:43:43.223 回答
3

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

于 2013-09-03T15:26:53.543 回答
2

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

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

于 2008-08-21T20:31:40.433 回答
2

这是微软自己的文档。希望对您有所帮助......,它是从 2003 年开始的,但它可能仍然是相关的。

于 2009-07-16T21:38:16.373 回答
1

我们在 Windows 客户端上使用 SmartAssembly。工作得很好。

也增加了一些额外的问题。在日志文件/异常中打印出你的类名必​​须去混淆。当然不能从它的名字创建一个类。所以最好看看你的客户,看看你可以通过混淆来解决哪些问题。

于 2009-04-04T11:28:07.090 回答
1

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

于 2009-07-16T21:31:20.273 回答
1

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

于 2009-07-16T21:38:38.480 回答
1

我不得不在我最新的项目中使用混淆/资源保护,并发现Crypto Obfuscator是一个很好用且易于使用的工具。序列化问题只是此工具中的设置问题。

于 2011-04-22T11:18:34.787 回答
1

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

于 2013-12-19T04:24:37.257 回答
0

您可能还想了解 Metaforic 和 ViLabs 等新的代码保护技术以及ByteShield的软件复制保护技术。披露:我为 ByteShield 工作。

于 2009-01-03T18:56:59.397 回答
0

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

于 2009-04-04T10:53:56.470 回答
0

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

于 2010-12-01T04:49:21.953 回答
-1

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

于 2009-09-04T03:21:58.513 回答
-1

混淆不是真正的保护。

如果你有一个 .NET Exe 文件,有一个更好的解决方案。

我使用Themida ,可以看出它运行良好。

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

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

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

于 2014-03-06T03:03:16.467 回答
-2

我试过一种叫做 Rummage 的产品,它在给你一些控制方面做得很好......虽然它缺乏 Eziriz 提供的很多东西,但 Rummage 的价格太高了......

于 2013-09-06T17:27:45.063 回答