
.NET obfuscation tools/strategy我的产品有几个组件:ASP.NET,Windows Forms App和Windows Service。 95%左右的代码是用VB.NET编写的。 出于知识产权的原因,我需要对代码进行模糊处理,直到现在我一直在使用现已超过5年的dotfuscator版本。 我认为现在是时候转向新一代工具了。 我正在寻找的是在搜索新的混淆器时我应该考虑的一系列要求。 我知道到目前为止我应该寻找的东西:
我们尝试了很多混淆器。它们都不适用于使用远程处理的大型客户端/服务器应用程序。问题是客户端和服务器共享一些dll,我们还没有发现任何可以处理它的混淆器。 我们尝试过DotFuscator Pro,SmartAssembly,XenoCode,Salamander以及一些名字让我失望的小型应用程序。 坦率地说,我确信混淆是一个很大的问题。 即使它解决的问题也不完全是一个真正的问题。您真正需要保护的唯一事情是连接字符串,激活码,安全敏感的东西。另一家公司打算对你的整个代码库进行逆向工程并从中创建一个竞争产品,这是一个荒谬的经理人的噩梦,而不是现实。 我现在正在'膝盖深',试图找到一个好的解决方案。到目前为止,这是我的印象。 Xenocode - 我有一个Xenocode2005的旧许可证,我曾经用它来混淆我的.net 2.0程序集。它在XP上运行良好,是一个不错的解决方案。我目前的项目是.net 3.5,我在Vista上,支持告诉我试一试,但2005版本甚至不能在Vista(崩溃)上工作所以我现在必须以高斯价格购买'PostBuild2008' 1900美元这可能是一个很好的工具,但我不会发现。太贵了。 Reactor.Net - 这是一个更具吸引力的价格点,它在我的Standalone Executeable上运行良好。许可模块也很好,本来可以省去一大堆努力。遗憾的是,它缺少一个关键功能,即能够从混淆中排除内容。这使得无法实现我需要的结果(将多个程序集合并在一起,混淆一些,而不是混淆其他程序集)。 SmartAssembly - 我为此下载了Eval,它运行完美。我能够实现我想要的一切,界面是一流的。价格点仍然有点沉重。 Dotfuscator Pro - 无法在网站上找到价格。目前正在讨论中获取报价。听起来不祥。 Confuser - 一个非常好的开源项目(混淆ppl,顾名思义)。 https://confuser.codeplex.com/(由jgauffin添加) 注意:据报道,根据GitHub回购中的问题#498,ConfuserEx被"破坏"。 回到.Net 1.1混淆是必不可少的:反编译代码很简单,你可以从汇编,到IL,到C#代码,并且只需很少的努力就可以再次编译。 现在使用.Net 3.5我完全不尝试反编译3.5程序集;你得到的是编译还有很长的路要走。
添加3.5中的优化(远远优于1.1)以及反射处理匿名类型,委托等的方式(它们是重新编译的噩梦)。添加lambda表达式,编译器'magic',如Linq-syntax和 拥有大量时间的专业团队仍然可以对其进行反向工程,但对于任何混淆的代码都是如此。他们从中得到的代码是不可维护的,很可能是非常错误的。 我建议对你的程序集进行密钥签名(这意味着如果黑客可以重新编译他们必须重新编译所有程序集),但我不认为混淆是值得的。 如果您正在寻找一个免费的,您可以尝试Visual Studio或Eazfuscator.NET附带的DotObfuscator社区版。 自2012年6月29日起,Eazfuscator.NET现已商业化。最后一个免费版本是3.3。 我一直在使用smartassembly。基本上,你选择一个DLL并返回它混淆。它似乎工作正常,到目前为止我没有遇到任何问题。非常非常容易使用。 我在市场上尝试过几乎所有的混淆器,SmartAssembly在我看来是最好的。
我也一直在使用SmartAssembly。 为了清楚起见,我只是一个喜欢该产品而不是与公司有任何关系的客户。 简短的回答是,你做不到。 有各种各样的工具可以让人们更难阅读你的代码 - 其中一些已被其他答案指出。 然而,所有这些都使得阅读更加困难 - 它们增加了所需的工作量,就是这样。通常这足以阻止随意的读者,但是那些决心深入挖掘代码的人总是能够这样做。 我们有一个多层应用程序,带有asp.net和winform接口,也支持远程处理。我使用任何混淆器都没有问题,除了加密类型,它会生成一个加载器,这种加载器在各种意想不到的方面都有问题,在我看来根本不值得。实际上我的建议更像是"避免像瘟疫那样加密装载机类型的混淆器"。 :) 根据我的经验,任何混淆器都可以在.net的任何方面工作,包括asp.net和远程处理,你只需要与设置密切相关,并了解你可以在代码的哪些区域推动它。并花时间尝试对所获得的内容进行逆向工程,并了解它如何与各种设置一起工作。 多年来我们在商业应用程序中使用了几个并且从9rays.net找到了Spices混淆器因为价格合适,它完成了工作而且他们得到了很好的支持,尽管我们实际上已经不再需要这些支持但是说实话我不认为你使用哪个混淆器真的很重要,如果你想让它与远程处理和asp.net一起工作,问题和学习曲线都是一样的。 正如其他人提到的那样,你真正做的就是相当于一个挂锁,保持其他人诚实,或者更难以简单地重新编译应用程序。 许可通常是大多数人的关键领域,无论如何,您肯定应该使用某种数字签名的证书系统进行许可。如果您没有智能系统,那么您最大的损失将来自临时共享许可证,打破许可证制度的人员从来都不会购买。 这样做太容易,对您的客户和您的业务产生负面影响,做一些简单而合理的事情,然后不用担心。 在过去的两天里,我一直在尝试使用Dotfuscator Community Edition高级版(在注册Visual Studio捆绑的基本CE之后免费下载)。 我认为更多人不使用混淆作为默认选项的原因是,与风险相比,这是一个严重的麻烦。在较小的测试项目中,我可以通过大量的努力来运行混淆的代码。通过ClickOnce部署一个简单的项目很麻烦,但是在用mage手动签署清单之后可以实现。唯一的问题是,在出错时,堆栈跟踪会被混淆,并且CE没有打包出去混淆器或澄清器。 我试图混淆一个真正的项目,这是一个基于Excel的VSTO,Virtual Earth集成,大量的webservice调用和一个IOC容器和很多反射。这是不可能的。 如果混淆确实是一个关键要求,那么您应该从一开始就设计应用程序,在进度时测试混淆的构建。否则,如果这是一个相当复杂的项目,你最终会遭受严重的痛苦。 Crypto Obfuscator解决您的所有问题和场景。它: 我最近尝试将一个免费混淆器的输出连接到另一个免费混淆器 - 即Dotfuscator CE和CodePlex上的新Babel混淆器。我博客上的更多细节。 至于序列化,我已将该代码移动到另一个DLL中并包含在项目中。我的理由是那里没有任何秘密,不管怎样都不在XML中,所以它不需要混淆。如果这些类中有任何严重的代码,则在主程序集中使用部分类应该涵盖它。 我对Smartassembly没有任何问题。 您应该使用最便宜和最知名的平台,并将其称为一天。高级语言的混淆是一个难题,因为VM操作码流不会受到本机操作码流所做的两个最大问题的影响:功能/方法识别和寄存器别名。 关于字节码反转你应该知道的是,安全测试人员已经习惯于审查直接X86代码并发现其中的漏洞。在原始X86中,您甚至不一定能找到有效的函数,更不用说在函数调用中跟踪局部变量了。在几乎任何情况下,本机代码反向器都不能访问函数和变量名称 - 除非他们正在查看Microsoft代码,MSFT有助于向公众提供该信息。 "Dotfuscation"主要通过加扰函数和变量名来工作。这样做可能比发布带有调试级别信息的代码更好,其中Reflector实际上放弃了源代码。但是,除此之外你所做的任何事情都可能导致收益递减。 您可以使用"Dotfuscator Community Edition" - 它默认出现在Visual Studio 2008 Professional中。你可以在以下网址阅读:
http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx 该产品的"专业"版本需要花钱,但更好。 你真的需要你的代码混淆吗?通常,您的应用程序被反编译时几乎没有错,除非它用于安全目的。如果你担心人们"窃取"你的代码,那就不要了;绝大多数查看代码的人都是出于学习目的。无论如何,.NET没有完全有效的混淆策略 - 有足够技能的人总是可以反编译/更改你的应用程序。 避免使用Reactor。它完全没用(是的,我支付了许可证)。 Xenocode是我遇到过的最好的一个,并且也购买了许可证。支持非常好,但我不需要它,因为它只是工作。我测试了我能找到的每个混淆器,我的结论是xenocode是最强大的并且做得最好(也可能将你的.NET exe文件发布到我在其他任何地方都看不到的本??机exe文件。)。
reactor和xenocode之间有两个主要区别。
我发现Agile.Net为.Net程序集提供了很好的保护,因为它不仅提供了混淆,还提供了加密。下载免费线索。 这是微软自己的一份文件。希望有帮助......,它是从2003年开始的,但它可能仍然具有相关性。 自从.Net 1以来,我一直在同一个应用程序中混淆代码,从维护的角度来看,这是一个令人头痛的问题。正如您所提到的,可以避免序列化问题,但是很容易出错并混淆您不希望混淆的内容。破解构建或更改混淆模式并且无法打开旧文件很容易。此外,很难找出问题出在哪里以及在哪里。 我们的选择是Xenocode,如果我今天再次做出选择,我宁愿不混淆代码,也不想使用Dotfuscator。 我们在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和V.i.Labs以及新的软件复制保护技术,如ByteShield。披露:我为ByteShield工作。 SmartAssembly很棒,我的大多数项目都使用过
我也使用smartassembly。但是,我不知道它如何适用于Web应用程序。但是,我想指出,如果您的应用程序使用共享软件类型保护,请确保它不检查具有布尔返回的许可证。字节破解太容易了。 混淆不是真正的保护。 如果您有.NET Exe文件,则可以使用FAR更好的解决方案。 我使用Themida,可以说它运作得很好。
Themida的唯一缺点是它无法保护.NET Dlls。 Themida比这里提到的混淆器便宜得多,并且是市场上反盗版保护的最佳选择。 它创建了一个虚拟机,运行代码的关键部分并运行多个线程来检测由破解者设置的操作或断点。 它将.NET Exe转换为Reflector甚至不再识别为.NET程序集的东西。
请阅读他们网站上的详细说明: 我试过Eziriz演示版....我喜欢它。但从未带过软件。 我尝试了一种名为Rummage的产品,它在给你一些控制方面做得很好......虽然它缺少Eziriz提供的许多东西,但Rummage的价格太高了...... |