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