.NET混淆工具/策略

时间:2008-08-05 16:20:38

标签: .net security obfuscation

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

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

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

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

30 个答案:

答案 0 :(得分:48)

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

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

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

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

答案 1 :(得分:42)

我现在正在'Knee Deep',试图找到一个好的解决方案。到目前为止,这是我的印象。

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回购中的Issue #498,ConfuserEx已“损坏”。

答案 2 :(得分:41)

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

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

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

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

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

答案 3 :(得分:22)

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


Since June 29, 2012,Eazfuscator.NET现已商业化。最后一个免费版本是3.3。

答案 4 :(得分:18)

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

答案 5 :(得分:10)

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

答案 6 :(得分:9)

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

为了清楚起见,我只是一个喜欢该产品且与公司无任何关系的客户。

答案 7 :(得分:7)

简短的回答是,你不能。

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

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

答案 8 :(得分:6)

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

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

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

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

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

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

答案 9 :(得分:5)

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

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

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

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

答案 10 :(得分:5)

Crypto Obfuscator解决您的所有问题和方案。它:

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

答案 11 :(得分:4)

我最近尝试将一个免费混淆器的输出连接到另一个免费混淆器 - 即Dotfuscator CE和CodePlex上的新Babel混淆器。更多详情on my blog

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

答案 12 :(得分: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没有完全有效的混淆策略 - 有足够技能的人总是可以反编译/更改你的应用程序。

答案 13 :(得分:3)

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

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

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

答案 14 :(得分:3)

我对Smartassembly没有任何问题。

答案 15 :(得分:3)

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

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

答案 16 :(得分:3)

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

答案 17 :(得分:2)

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

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

答案 18 :(得分:2)

Here's a document from Microsoft themselves.希望这有助于...,它来自2003年,但它可能仍然具有相关性。

答案 19 :(得分:1)

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

还会添加一些额外的问题。在日志文件/异常中打印出您的类名称必须进行反模糊处理。当然不能从它的名字创建一个类。因此,最好先了解一下您的客户,看看哪些问题可以通过混淆得到。

答案 20 :(得分:1)

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

答案 21 :(得分:1)

这完全取决于您使用的编程语言。 阅读文章:Obfuscated code

答案 22 :(得分:1)

我必须在我的最新项目中使用模糊处理/资源保护,并发现Crypto Obfuscator是一个简单易用的工具。序列化问题只是此工具中的设置问题。

答案 23 :(得分:1)

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

答案 24 :(得分:0)

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

答案 25 :(得分:0)

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

答案 26 :(得分:0)

您可能还希望查看新的代码保护技术,例如MetaforicV.i.Labs以及新的软件复制保护技术,例如ByteShield。披露:我为ByteShield工作。

答案 27 :(得分:-1)

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

答案 28 :(得分:-1)

混淆不是真正的保护。

如果您有.NET Exe文件,则有 FAR更好解决方案。

我使用 Themida ,可以说它运作良好。

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

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

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

答案 29 :(得分:-2)

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