你应该混淆商业.Net应用程序吗?

low*_*der 37 .net c# obfuscation

我正在考虑混淆商业.Net应用程序.但是选择,购买和使用这样的工具真的值得吗?混淆的二进制文件是否真的免于逆向工程?

Bla*_*rad 39

您可能不必购买工具 - Visual Studio.NET附带了Dotfuscator的社区版本.此处列出了其他免费的混淆工具,它们可能满足您的需求.

混淆的二进制文件可能不会安全地进行逆向工程,就像你的自行车锁可能是易碎/可拾取的一样.然而,通常的情况是,一个小的不便足以阻止代码/自行车窃贼.

此外,如果有时间在法庭上主张您对一段代码的权利,被视为努力保护它(通过混淆它)可能会给你额外的分数.:-)

但是你必须考虑缺点 - 使用混淆代码的反射会更加困难,如果你使用像log4net这样的东西来根据所涉及的类的名称生成部分日志行,这些消息就会变成更难以解释.

  • 此外,为了保留API,公共和受保护类型和成员的名称不会被混淆,因此即使在混淆之后,堆栈跟踪的某些部分也将保持不变. (3认同)

Jay*_*uzi 29

请记住,混淆只是代码的临时检查员的障碍.如果有人认真考虑你所写的内容,那么你将很难阻止他们.

如果您的代码中有秘密(如密码),那么您做错了.

如果您担心某人可能会根据您的想法制作您自己的软件,那么通过提供客户需要的新版本,技术支持以及成为他们的合作伙伴,您将在市场中获得更多的运气.好的生意赢了.


Ric*_*ckL 12

在我们公司,我们评估了几种不同的混淆技术,但它们都有问题.最大的问题是我们非常依赖于反射,例如根据属性名称动态创建网格.

所以所有的混淆器都重命名,当然你可以禁用它,但是你会失去很多混淆的好处.

此外,在我们的代码中,我们有很多NUnit测试依赖于更多的方法和属性是公共的,这阻止了一些混淆器能够混淆这些类.

最后,我们选择了一款名为.NET Reactor的产品

它运作良好,我们没有任何与其他产品相关的问题.

"与混淆器相比,.NET Reactor通过将任何纯.NET程序集(用C#,VB.NET,Delphi.NET,J#,MSIL ......编写)与本机机器代码混合来完全阻止任何反编译.详细地说,.NET Reactor在潜在的黑客和你的.NET代码之间建立一个原生墙.结果是一个标准的基于Windows的,而不是MSIL兼容的文件.原始的.NET代码保持完整,受到本机代码的良好保护,对于窥探眼睛是不可见的.原始.NET代码不会随时复制到硬盘上.没有工具可以反编译.NET Reactor保护的程序集."

  • 从包含Reactor的任何东西中的压缩.net应用程序中删除.net代码充其量是微不足道的.甚至还有几个教程. (10认同)
  • 并根据您的描述自动破坏任何便携性的好处. (10认同)
  • 根据您的描述,这似乎不会阻止确定的黑客使用x86反编译器.如果计算机可以执行它,那么代码可以被反编译. (2认同)

Vin*_*vic 7

你实际上可以对其进行逆向工程这一事实并不会使混淆无效.它确实显着提高了标准.

未经模糊处理的.NET程序集将通过下载.NET Reflector向您显示所有源代码,突出显示所有内容.添加混淆,你将非常有意义地减少能够修改代码的人数.

这取决于你是在保护自己.如果您将其进行未经过模糊处理,您可以开源应用程序并从营销中获益.运输它混淆将只允许人们通过补丁相对容易地生成修改后的二进制文件,而不是能够窃取您的代码并创建一个直接的竞争对手.当然,取决于混淆器,从混淆代码中获取实际来源非常困难.


小智 5

您应该考虑的事项:

  • 混淆不会保护您的代码或逻辑。它只会让阅读和理解变得更加困难。
  • 混淆并不能阻止逆向工程。它只会减慢进程。
  • 您的知识产权在大多数国家都受到法律保护。因此,如果竞争对手使用您的代码或特定实现,您可以起诉他。

混淆可以解决的唯一问题是有人创建了您的特定实现的 1:1(或接近 1:1)副本。

同样在理想的世界中,对混淆应用程序进行逆向工程在经济上没有吸引力。

但回到现实:

  • 这个星球上没有任何工具可以阻止某人复制任何应用程序提供或产生的用户界面、行为或结果。混淆在这种情况下 100% 没用
  • 市场上最好的混淆器无法阻止人们使用某种反汇编器或十六进制编辑器,对于一些极客来说,了解应用程序的核心是非常好的。它只是比未混淆的代码更难。

因此,现实情况是,您可以使查看您的应用程序变得更加困难和耗时,但您不会真正获得任何可靠的保护。无论您使用免费产品还是商业产品。

控制流混淆或代码虚拟化等高级技术有时可能有助于理解逻辑有时非常困难,但它们也会导致许多有趣且难以调试或解决的问题。所以它们有时更像是一个额外的问题而不是一个解决方案。

在我看来,一些公司为其产品收取的费用不值得混淆。如果你想唠叨临时开发人员,开源混淆器就足够了。如果您想尽可能难以深入了解您的应用程序的核心,您需要使用具有虚拟执行环境和虚拟文件系统的加密容器,但它们也提供了攻击向量,并且也可能是一大堆问题的来源.

您的知识产权和产品在大多数国家/地区都受到法律保护。因此,如果有一个竞争对手分析和复制您的代码,您可以起诉他。如果一个坏人或黑客或破解者拿走了你的应用程序,你就会被恶作剧——但混淆器并没有什么区别。

因此,您应该首先考虑您的目标、您的市场以及您希望使用混淆器实现的目标。正如您在此处(以及其他地方)所读到的那样,混淆并不能真正解决逆向工程的问题。它只会让它变得更难,更耗时。但是,如果这是您想要的,您可能会查看开源混淆器,例如sharpObfuscator 或 obfuscar,它们可能足以让休闲编码人员烦恼(可以在此处找到列表维基百科上的 .NET 混淆器列表)。

如果在您的场景中可能,您可能也对 SaaS-Concepts 感兴趣。这意味着您提供对软件的访问权限,但不提供软件本身的访问权限。因此,客户通常无法访问您的程序集。但是,根据服务级别、安全性和用户群,实现可靠、自信和高性能的 SaaS 服务可能是昂贵、复杂和困难的。