.NET混淆工具/策略

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

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

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

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

使用.Net 1.1模糊处理是非常重要的:反编译代码非常简单,您可以从汇编,到IL,再到C#代码,再次编译,只需要很少的工作。

现在与。净3.5我不完全确定。 尝试反编译一个3.5程序集; 你从编译得到的是一个很长的路要走。

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

一个有很多时间的专业团队仍然可以对其进行反向工程,但是对于任何混淆的代码也是如此。 他们从中得到什么代码将是不可维护的,而且极有可能是非常麻烦的。

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

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

我们已经尝试了DotFuscator Pro,SmartAssembly,XenoCode,Salamander和几个名字让我不知所措的小应用程序。

坦率地说,我确信混淆是一个很大的破坏。

即使它解决的问题也不完全是一个真正的问题。 唯一需要保护的是连接字符串,激活码,安全敏感等。 另一家公司正在对您的整个代码库进行逆向工程,并从中创建一个竞争产品,这是一个偏执狂管理者的噩梦,而不是现实。

我现在是'膝盖深',试图找到一个很好的解决方案。 这是我迄今的印象。

Xenocode – 我有一个Xenocode2005旧许可证,我用它来模糊我的.net 2.0程序集。 它在XP上运行良好,是一个体面的解决方案。 我当前的项目是.net 3.5,我在Vista上,支持告诉我,但是2005版本甚至不能在Vista(崩溃)上工作,所以我现在不得不以gobsmacking的价格购买“PostBuild2008” 1900美元。 这可能是一个好工具,但我不会去了解。 太贵了。

Reactor.Net – 这是一个更有吸引力的价格点,它在我的独立可执行文件上工作得很好。 许可模块也很好,并会节省我一大堆的努力。 不幸的是,它缺少一个关键功能,那就是从混淆中排除东西的能力。 这使得我不可能实现我所需要的结果(将多个程序集合在一起,混淆了一些,而不是混淆其他)。

SmartAssembly – 我为此下载了Eval,并且工作完美无瑕。 我能够实现我想要的一切,界面是一流的。 价格点还是有点高。

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

Confuser – 一个开放源代码项目,工作得很好(正如顾名思义,混淆了ppl)。 https://confuser.codeplex.com/
(由jgauffin添加)

注意:根据他们的GitHub仓库中的问题#498 ,ConfuserEx据报道是“破损的”。

如果你想找一个免费的,你可以试试Visual Studio或Eazfuscator.NET自带的DotObfuscator Community Edition。


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

我一直在使用smartassembly。 基本上,你选择一个DLL,它返回混淆。 它似乎工作正常,迄今为止我没有任何问题。 非常非常容易使用。

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

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

只是要清楚,我只是一个喜欢这个产品而不是与公司有任何关系的顾客。

简短的答案是你不能。

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

然而,所有这些都会让阅读变得更加困难 – 他们会增加所需的工作量,就是这样。 通常这足以阻止偶然的读者,但是决心挖掘你的代码的人总是能够这样做。

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

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

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

根据我的经验,任何混淆器都可以正常使用.net的任何方面,包括asp.net和远程处理,你只需要熟悉设置,了解你可以在代码的哪个部分推送它。 花些时间尝试对你所得到的结果进行逆向工程,看看它是如何与各种设置一起工作的。

我们在商业应用程序中使用了几年,并从9rays.net定居香料混淆器,因为价格是正确的,它做的工作,他们有很好的支持,虽然我们真的不再需要多年来的支持,但说实话我不认为这是真正重要的是你使用的混淆器,问题和学习曲线都是一样的,如果你想让它与远程处理和asp.net正常工作。

正如其他人所提到的,你所做的只是挂锁的功能,否则就会使诚实的人不知所措,或者使得重新编译应用程序变得更加困难。

许可证通常是大多数人的关键领域,无论如何您都一定要使用某种数字签名的证书系统。 如果你没有一个聪明的系统,你最大的损失将来自偶然分享许可证,打破许可证制度的人从来不会去购买。

这太容易了,对你的客户和你的业务有负面影响,做简单而合理的事情,不用担心。

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

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

我试图混淆一个真正的项目,这是基于Excel的VSTO,虚拟地球集成,大量的web服务调用和一个国际奥委会容器和很多思考。 这是不可能的。

如果混淆真的是一个关键的需求,那么您应该从头开始设计您的应用程序,在进行时测试混淆的构建。 否则,如果这是一个相当复杂的项目,你将会面临严重的痛苦。

你应该使用最便宜和最有名的平台,并称之为一天。 高级语言的混淆是一个难题,因为VM操作码流不会受到本地操作码流所做的两个最大的问题:功能/方法识别和寄存器混叠。

关于字节码反转,你应该知道的一点是,安全测试人员已经习惯于直接查看X86代码并找到其中的漏洞。 在原始的X86中,你甚至不一定能找到有效的函数,更不用说在整个函数调用中跟踪一个局部变量。 几乎在任何情况下,本机代码翻译器都无法访问函数和变量名称,除非他们正在审查Microsoft代码,MSFT会将这些信息有用地提供给公众。

“Dotfuscation”主要通过加扰函数和变量名称来工作。 这样做可能比发布具有调试级别信息的代码更好,其中Reflector真正放弃了您的源代码。 但是超出这个范围的任何事情都有可能导致收益递减。

我最近尝试将一个免费混淆器的输出传送到另一个免费混淆器 – 即Codeflex上的Dotfuscator CE和新的Babel混淆器。 在我的博客更多细节。

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

我对Smartassembly没有任何问题。

你可以使用“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,我没有看到其他地方)。

反应器和xenocode有两个主要区别。 第一个是Xenocode实际上工作。 第二个是你的程序集的执行速度没有什么不同。 有了反应堆,大约要慢六百万倍。 我也有这样的印象,反应堆是一个人的操作。

我发现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中使用混淆/资源保护,并发现Crypto Obfuscator是一个很好用的工具。 序列化问题只是这个工具的一个设置问题。

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

您也可能想要查看新的代码保护技术,如Metaforic和ViLabs以及ByteShield等新的软件复制保护技术。 披露:我为ByteShield工作。

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

SmartAssembly是伟大的,我用在我的大部分项目

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

混淆不是一个真正的保护。

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

我使用Themida ,可以说它工作得很好。

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

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

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

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