security -.NET混淆工具/策略

Translate

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

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

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

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

所有的回答

Joyce Lee
Translate

回到.Net 1.1,混淆是必不可少的:反编译代码很容易,您可以从汇编,IL到C#代码,再用很少的精力重新编译它。

现在,对于.Net 3.5,我完全不确定。尝试反编译3.5程序集;您得到的信息距离编译还有很长的路要走。

添加3.5中的优化(远优于1.1),以及通过反射处理匿名类型,委托等的方式(它们是重新编译的噩梦)。添加lambda表达式,像Linq-syntax这样的编译器“魔术”和var和C#2函数,例如yield(这会导致名称不可读的新类)。您反编译的代码与可编译代码的距离很长。

一个有很多时间的专业团队仍然可以再次对其进行反向工程,但是对于任何混淆的代码来说都是如此。他们从中获得什么代码将是难以维护的,并且极有可能是错误的。

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

来源
Translate

我们已经尝试了许多混淆器。它们都无法在使用远程处理的大型客户端/服务器应用程序上工作。问题是客户端和服务器共享一些dll,而我们还没有找到可以处理它的混淆器。

我们已经尝试过DotFuscator Pro,SmartAssembly,XenoCode,Salamander和一些名称不知我的小型应用程序。

坦白说,我坚信混淆是一个大问题。

即使它解决的问题也不是完全真实的问题。您真正需要保护的唯一一件事就是连接字符串,激活码以及诸如此类的对安全敏感的东西。另一家公司将对整个代码库进行反向工程并从中创建竞争产品的想法是胡说八道,这是妄想狂经理的噩梦,而不是现实。

来源
Translate

我现在正对此深有感触,试图找到一个好的解决方案。到目前为止,这是我的印象。

异码-我拥有Xenocode2005的旧许可证,该许可证曾经用于混淆.net 2.0程序集。它在XP上运行良好,是一个不错的解决方案。我当前的项目是.net 3.5,我在Vista上,支持人员告诉我可以尝试一下,但2005版甚至无法在Vista上运行(崩溃),因此我现在必须以惊人的价格购买“ PostBuild2008” 1900美元。这可能是一个很好的工具,但是我不会发现。太贵了

反应堆网-这是一个更具吸引力的价格,并且在我的Standalone Executeable上运行良好。许可模块也很好,可以为我省去很多精力。不幸的是,它缺少一个关键功能,那就是能够将事物排除在混淆之外。这使得无法实现我需要的结果(将多个程序集合并在一起,混淆一些而不是混淆其他)。

智能装配-我为此下载了Eval,它运行正常。我能够实现我想要的一切,并且界面是一流的。价格仍然有点高。

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

迷惑者-一个运行良好的开源项目(正如名称所暗示的那样,混淆了ppl)。https://confuser.codeplex.com/
(由jgauffin添加)

注意:据报道,ConfuserEx被“破坏”了问题#498在他们的GitHub存储库上。

来源
Translate

如果您要寻找免费的版本,可以尝试Visual Studio随附的DotObfuscator社区版或Eazfuscator.NET.


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

来源
Eunice Lee
Translate

我一直在使用smartassembly。基本上,您选择一个dll,然后将其混淆。看来一切正常,到目前为止我还没有遇到任何问题。非常非常易于使用。

来源
Jerome Lee
Translate

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

来源
Yves Lee
Translate

我也一直在使用SmartAssembly。我发现Ezrinz .Net Reactor在.net应用程序上对我来说要好得多。它混淆,支持Mono,合并程序集,并且还具有非常好的许可模块,用于创建试用版或将许可链接到特定计算机(非常易于实现)。价格也很有竞争力,当我需要支持时,价格会很快。埃齐里兹

明确地说,我只是喜欢该产品的客户,与公司没有任何关系。

来源
Carl Lee
Translate

简短的答案是您不能这样做。

周围有各种各样的工具,这会使某人阅读您的代码变得更加困难-其中一些已由其他答案指出。

但是,所有这些操作都使它更难阅读-它们增加了所需的工作量,仅此而已。通常,这足以阻止不经意的读者,但是决心研究您的代码的人将始终能够做到这一点。

来源
Madge Lee
Translate

我们有一个带有asp.net和winform界面的多层应用程序,它还支持远程处理。我使用任何混淆器都没有问题,除了加密类型会生成一个加载程序,该加载程序可能会以各种意外方式出现问题,我认为这不值得。实际上,我的建议将更多地遵循“避免像瘟疫一样加密加载程序类型混淆器”的思路。 :)

以我的经验,任何混淆器都可以在.net的任何方面(包括asp.net和远程处理)正常工作,您只需要熟悉设置并了解可以在代码的哪些区域进行扩展即可。并花时间尝试对所获得的内容进行逆向工程,并查看其在各种设置下如何工作。

多年来,我们在商业应用程序中使用了数年,并从9rays.net上选择了Spices混淆器,因为价格合适,可以完成工作,并且它们具有良好的支持,尽管实际上我们多年来不再需要这些支持,但是说实话我认为使用哪种混淆器并不重要,如果要使其与远程处理和asp.net一起正常工作,问题和学习曲线都是相同的。

正如其他人提到的那样,您真正要做的只是相当于挂锁,将其他情况下的老实人拒之门外,或者使重新编译应用程序变得更加困难。

许可通常是大多数人的关键领域,无论如何,您绝对应该使用某种数字签名的证书系统进行许可。如果没有合适的智能系统,最大的损失将来自于随意共享许可证,而破坏许可证系统的人永远不会首先购买。

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

来源
Eric Lee
Translate

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

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

我试图混淆一个基于Excel的VSTO的真实项目,该项目具有Virtual Earth集成,大量的Web服务调用,一个IOC容器以及大量的反思。这是不可能的。

如果混淆确实是至关重要的要求,则应从一开始就考虑到这一点,在设计应用程序时,请在进行过程中测试混淆的构建。否则,如果这是一个相当复杂的项目,那么最终将带来极大的痛苦。

来源
Theobald Lee
Translate

加密混淆器解决您所有的疑虑和方案。它:

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

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

至于序列化,我已经将该代码移到了另一个DLL中,并将其包含在项目中。我认为在XML中没有任何秘密,因此它不需要混淆。如果这些类中有任何严肃的代码,则应在主机部件中使用部分类来解决。

来源
Wilbur Lee
Translate

您应该使用平台上最便宜,最著名的东西,然后每天称呼它。高级语言的混淆是一个难题,因为VM操作码流不会遭受本机操作码流所面临的两个最大问题:函数/方法标识和寄存器别名。

您应该了解的字节码反转是,安全测试人员查看标准X86代码并查找其中的漏洞已经成为标准做法。在原始X86中,您甚至不必找到有效的函数,更不用说在整个函数调用中跟踪局部变量了。几乎在任何情况下,本机代码反向器都不能访问函数和变量名-除非他们正在审阅Microsoft代码,而MSFT会帮助他们将这些信息公开。

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

来源
Stan Lee
Translate

我的Smartassembly没有任何问题。

来源
Translate

您可以使用“ Dotfuscator社区版”-Visual Studio 2008 Professional中默认提供它。您可以在以下位置阅读有关它的信息:

http://msdn.microsoft.com/zh-CN/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html

该产品的“专业”版本要花钱,但效果更好。

您是否真的需要对代码进行混淆?通常,除非将其用于安全目的,否则将应用程序反编译的错误很少。如果您担心人们会“窃取”您的代码,那就不要了。绝大多数查看您代码的人都是出于学习目的。无论如何,.NET没有完全有效的混淆策略-具有足够技能的人将总是能够反编译/更改您的应用程序。

来源
Glenn Lee
Translate

避免使用反应堆。这是完全没用的(是的,我付了许可证)。 Xenocode是我遇到的最好的,并且也购买了许可证。支持非常好,但我并不需要它,因为它可以正常工作。我测试了我能找到的每个混淆器,得出的结论是xenocode无疑是最健壮的,并且做得最好(也有可能将.NET exe后处理为本机exe,而我在其他任何地方都看不到)。

反应器和异种代码之间有两个主要区别。第一个是Xenocode实际上有效。第二个是程序集的执行速度没有什么不同。使用反应堆时,速度要慢约600万倍。我还给人的印象是反应堆是一个人的手术。

来源
Robert Lee
Translate

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

来源
Cheryl Lee
Translate

从.Net 1开始,我就一直在混淆同一应用程序中的代码,从维护角度来看,这一直是一个头疼的问题。正如您已经提到的,可以避免序列化问题,但是很容易犯一个错误并混淆您不想混淆的内容。破坏构建或更改混淆模式很容易,而且无法打开旧文件。另外,可能很难找出问题所在和出处。

我们的选择是Xenocode,如果我今天要再次做出选择,我希望不要混淆代码或使用Dotfuscator。

来源
Una Lee
Translate

这是Microsoft自己提供的文档。希望能有所帮助...,那是从2003年开始的,但它可能仍然有意义。

来源
Benjamin Lee
Translate

我们在Windows客户端上使用SmartAssembly。效果很好。

确实还会增加一些额外的问题。必须清除对日志文件/异常中的类名的打印输出。当然不能从其名称创建类。因此,最好看一下您的客户,看看通过混淆可以解决哪些问题。

来源
Eugene Lee
Translate

这完全取决于您使用的编程语言。阅读文章:混淆代码

来源
Dylan Lee
Translate

免费的方法是在Visual Studio中使用dotfuscator,否则您必须出去购买诸如Postbuild(http://www.xenocode.com/Landing/Obfuscation.aspx)

来源
Translate

我不得不在最新的rpoject中使用混淆/资源保护,发现加密混淆器作为一个好用且易于使用的工具。序列化问题仅是此工具中的设置问题。

来源
Translate

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

来源
Cathy Lee
Translate

您可能还需要研究新的代码保护技术,例如变元ViLabs以及新的软件复制保护技术,例如字节盾。披露:我为ByteShield工作。

来源
Shirley Lee
Translate

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

来源
Amanda Lee
Translate

SmartAssembly很棒,我在大多数项目中都使用过

来源
Murray Lee
Translate

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

来源
Translate

混淆不是真正的保护。

如果您有.NET Exe文件,则有一个好得多解。

我用塞米达并可以说它运作良好。

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

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

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

来源
Rupert Lee
Translate

我尝试过一种叫做Rummage的产品,它在为您提供一些控制方面做得很好。虽然它缺少Eziriz提供的许多功能,但是Rummage的价格太高了……

来源