.NET混淆工具/策略

csm*_*mba 157 .net security obfuscation

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

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

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

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

Jud*_*ngo 50

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

我们尝试过DotFuscator Pro,SmartAssembly,XenoCode,Salamander以及一些名字让我失望的小型应用程序.

坦率地说,我确信混淆是一个很大的问题.

即使它解决的问题也不完全是一个真正的问题.您真正需要保护的唯一事情是连接字符串,激活码,安全敏感的东西.另一家公司打算对你的整个代码库进行逆向工程并从中创建一个竞争产品,这是一个荒谬的经理人的噩梦,而不是现实.

  • 这就是为什么我不喜欢这个声誉系统,你有19票,而你没有提供aswer.用户并不是在询问您对混淆的看法,他想了解更多有关灌输技术的信息. (180认同)
  • 我提供了有关使用几个现有混淆器的经验的信息.我的观点源于这种经历. (32认同)
  • 保护代码的一个非常有效的需求是向那些仅在少数用户内部使用它们的公司销售昂贵的专用应用程序.诱惑是扭转代码以允许内部黑客攻击和修改以用于自己的目的,避免维护合同,或甚至破解试用版本以获得他们需要的好东西. (15认同)
  • 布拉沃犹大!保持领先的唯一方法是开发新的,更好的代码,而不是依赖于您已编写的代码.你最终将时间,精力甚至金钱投入到无关紧要的事情上.混淆是不值得的. (14认同)
  • +1"坦率地说,我确信混淆是一个很大的黑客攻击." 你不能比这更好. (6认同)
  • 关于它没有什么特别的偏执.人们可以下载工具并查看大部分确切的源代码.对我而言,它与人们进行反编译然后重新编译为新应用程序完全无关,它与我的源代码块有关,无需我的许可即可使用.显然每个应用程序应该只是开源?如果您不保护您的源代码,那就是最终的代码.我有很多这方面的经验,看着我自己的代码,大多数反编译代码与我编写的代码完全相同.甚至我的评论都在那里. (4认同)
  • 虽然我得到了反对,但作为研究某个主题的人,我总是觉得有必要让专业人士讨论一个主题是否有必要.对我来说,最有用的一点是这些类型的讨论. (2认同)

Mic*_*ann 43

我现在正在'膝盖深',试图找到一个好的解决方案.到目前为止,这是我的印象.

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被"破坏" .

  • 你能发帖报道多少dotfuscator吗? (8认同)
  • @Anthony我最近在2011年初购买了许可证.最低1台机器+ 1开发商许可证的报价为2475美元.包括12个月的升级和支持. (6认同)
  • DotFuscator报价为4999美元,由于10%的折扣,降至4500美元.这是1个开发许可证!在讨论中,它减少到2500美元,但仍然太昂贵. (5认同)
  • .NET Reactor现在有一个排除规则编辑器,允许从混淆中排除某些类,方法或属性.此外,您可以使用复选框"仅合并"来从混淆中排除特定的dll (3认同)
  • 在发布此帖子时我没有使用.NET Reactor,但现在您可以使用System.Reflection.Obfuscation属性从代码混淆中排除部分代码.还有一些设置可以让您执行排除所有方法或所有可序列化类型的操作. (2认同)
  • Confuserex没有被打破.它仍然可以很好地重命名和剥离元数据 (2认同)

Kei*_*ith 42

回到.Net 1.1混淆是必不可少的:反编译代码很简单,你可以从汇编,到IL,到C#代码,并且只需很少的努力就可以再次编译.

现在使用.Net 3.5我完全不确定.尝试反编译3.5程序集; 你得到的是编译还有很长的路要走.

添加3.5中的优化(远远优于1.1)以及反射处理匿名类型,委托等的方式(它们是重新编译的噩梦).添加lambda表达式,编译器'magic'就像Linq-syntax一样var,和C#2函数一样yield(导致新类具有不可读的名称).您的反编译代码最终会在可编译的情况下走很长一段路.

拥有大量时间的专业团队仍然可以对其进行反向工程,但对于任何混淆的代码都是如此.他们从中得到的代码是不可维护的,很可能是非常错误的.

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

  • 完全不同意.签名不能代替混淆.签名旨在再次破解您的代码.但是,如果你隐藏你的想法,算法等混淆是唯一的方法. (127认同)
  • 我不认为签名可以取代混淆,它只会使黑客攻击变得更加困难.混淆无法掩盖你的想法 - 如果他们想要复制它们无论如何,混淆甚至不会使它变得更加困难.特别是算法是所有操作符混淆对它们没有太大影响 - 它们通常是最容易提取的东西之一. (24认同)
  • 多么可怕的答案.你最近真的尝试过反编译吗?反编译器已经_better_,而不是更糟.反射器提供接近原始质量,当然没有评论. (8认同)
  • 如果你谈论一个拥有大量资源的团队,那么混淆可能是不值得的,但混淆是很好的,以防止"平均"开发人员只想使用Reflector打开你的程序集并保存源代码作为一个项目并进行调整.混淆有它的位置,完全排除它是错误的态度.这是一层防守. (6认同)
  • 反编译时,源处于凌乱状态,但逻辑上它仍然遵循相同的路径.没有编译器'魔术'伏都教.我知道因为我最近丢失了一个存储库并使用了反射器来恢复源代码.如果它不是构建过程的一部分,那么混淆只是"维护"的痛苦.它确实增加了开销,但我们都在编写计算密集型应用吗?不,对于弱势攻击者来说,这是一个薄弱的防御层. (5认同)
  • @Keith 1.并非每个项目都是一个拥有多个开发团队的企业项目,这是一个奇怪的世界观.即使它们是,重写大多数程序需要_some_量的逆向工程_(例如服务器协议,文件格式等)_.逆向工程**不是**非法,至少在美国不是.服务条款不是合同,也不违法.许多人靠逆向工程谋生_(杀毒软件开发者,Mono开发者,AMD工程师等等)_.见[这里](https://en.wikipedia.org/wiki/Reverse_engineering) (3认同)

Sam*_*Sam 23

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


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


Sha*_*awn 18

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

  • Smartassembly很没用.一个破解者将您的应用程序放入DumbAssembly,并通过鼠标单击删除所有"保护":http://www.woodmann.com/collaborative/tools/index.php/Dumbassembly (6认同)
  • 到目前为止,Google安全浏览已将woodmann的网站标记为不安全。另外,woodmann的网站上有整篇关于他以前遭受恶意软件感染的文章,因此当Google不信任他时,我真的不想浏览他的网站。 (2认同)

And*_*ers 10

我在市场上尝试过几乎所有的混淆器,SmartAssembly在我看来是最好的.

  • Smartassembly很没用.一个破解者将您的应用程序放入DumbAssembly,并通过鼠标单击删除所有"保护":http://www.woodmann.com/collaborative/tools/index.php/Dumbassembly (6认同)
  • 截至目前,谷歌安全浏览标志着伍德曼的网站是不安全的.此外,woodmann的网站上有一篇关于他以前遭受恶意软件感染的整篇文章,所以当Google不信任时,我真的不想浏览他的网站. (3认同)

Ron*_*nie 9

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

为了清楚起见,我只是一个喜欢该产品而不是与公司有任何关系的客户.

  • .NET Reactor糟透了.我更换了计算机,发送了两次有关许可证文件的电子邮件,但没有得到答案.您看到.NET Reactor许可证是硬件锁定的. (4认同)
  • 为Eziriz +1.我用它得到了很好的结果.这是现在最好的,IMO. (2认同)
  • 这是正常的.你怎么期望他们相信你?他们怎么知道你真的改变了你的计算机,而不是试图在你的计算机上运行你朋友的许可证?那是一个硬件锁!如果它可以在多台计算机上使用,那么硬件锁将毫无用处. (2认同)

Bev*_*van 7

简短的回答是,你做不到.

有各种各样的工具可以让人们更难阅读你的代码 - 其中一些已被其他答案指出.

然而,所有这些都使得阅读更加困难 - 它们增加了所需的工作量,就是这样.通常这足以阻止随意的读者,但是那些决心深入挖掘代码的人总是能够这样做.

  • if(effort.Required> codeFromScratch.Costs)DoNoReverseEngineer(); (51认同)
  • @NicolasDorier,`Operator'>'不能应用于'System.TimeSpan'和'decimal'类型的操作数 (40认同)
  • @Saeb肯定他们可以,从TimeSpan投入到金钱(十进制)是大多数企业的意思. (21认同)

Joh*_*hnC 6

我们有一个多层应用程序,带有asp.net和winform接口,也支持远程处理.我使用任何混淆器都没有问题,除了加密类型,它会生成一个加载器,这种加载器在各种意想不到的方面都有问题,在我看来根本不值得.实际上我的建议更像是"避免像瘟疫那样加密装载机类型的混淆器".:)

根据我的经验,任何混淆器都可以在.net的任何方面工作,包括asp.net和远程处理,你只需要与设置密切相关,并了解你可以在代码的哪些区域推动它.并花时间尝试对所获得的内容进行逆向工程,并了解它如何与各种设置一起工作.

多年来我们在商业应用程序中使用了几个并且从9rays.net找到了Spices混淆器,因为价格合适,它完成了工作并得到了很好的支持,尽管我们实际上已经不再需要这些支持但是说实话我不认为你使用哪个混淆器真的很重要,如果你想让它与远程处理和asp.net一起工作,问题和学习曲线都是一样的.

正如其他人提到的那样,你真正做的就是相当于一个挂锁,保持其他人诚实,或者更难以简单地重新编译应用程序.

许可通常是大多数人的关键领域,无论如何,您肯定应该使用某种数字签名的证书系统进行许可.如果您没有智能系统,那么您最大的损失将来自临时共享许可证,打破许可证制度的人员从来都不会购买.

这样做太容易了,对您的客户和您的业务产生负面影响,做一些简单合理的事情,然后不用担心.


bur*_*ide 5

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

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

我试图混淆一个真正的项目,这是一个基于Excel的VSTO,Virtual Earth集成,大量的webservice调用和一个IOC容器和很多反射.这是不可能的.

如果混淆确实是一个关键要求,那么您应该从一开始就设计应用程序,在进度时测试混淆的构建.否则,如果这是一个相当复杂的项目,你最终会遭受严重的痛苦.


log*_*cnp 5

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

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

  • fyi @logicnp写了加密. (3认同)