40

我正在考虑混淆一个商业 .Net 应用程序。但是,真的值得选择、购买和使用这样的工具吗?混淆后的二进制文件真的不受逆向工程的影响吗?

4

16 回答 16

40

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

混淆后的二进制文件可能无法避免逆向工程,就像您的自行车锁可能易碎/易撬一样。但是,通常情况下,一个小小的不便就足以阻止代码/自行车窃贼。

此外,如果到了在法庭上维护您对一段代码的权利的时候,已经看到努力保护它(通过混淆它)可能会给您加分。:-)

但是,您确实必须考虑缺点 - 将反射与混淆代码一起使用可能会更加困难,并且如果您使用 log4net 之类的东西根据所涉及的类的名称生成部分日志行,这些消息可能会变成更难解释。

于 2008-09-16T11:03:08.587 回答
29

请记住,混淆只是临时检查代码的障碍。如果有人认真想弄清楚你写了什么,你将很难阻止他们。

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

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

于 2008-09-16T13:30:43.300 回答
12

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

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

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

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

它工作得很好,我们没有任何与其他产品相关的问题。

“与混淆器相比,.NET Reactor 通过将任何纯 .NET 程序集(用 C#、VB.NET、Delphi.NET、J#、MSIL...编写)与本机机器代码混合来完全停止任何反编译。详细地说,.NET Reactor在潜在的黑客和您的 .NET 代码之间建立本地墙。结果是基于标准 Windows 的文件,不兼容 MSIL代码在任何时候都不会复制到硬盘上。没有能够反编译受 .NET Reactor 保护的程序集的工具。”

于 2008-09-16T11:18:22.870 回答
7

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

一个未混淆的 .NET 程序集将显示所有源代码,突出显示,只需下载.NET Reflector即可。对此添加混淆,您将大大减少能够修改代码的人数。

这取决于你是否保护自己免受伤害。如果你不混淆地发布它,你不妨开源应用程序并从营销中受益。对其进行混淆处理只会让人们相对容易地通过补丁生成修改后的二进制文件,而不是能够窃取您的代码并创建直接竞争对手。从混淆代码中获取实际源代码非常困难,当然,这取决于混淆器。

于 2008-09-16T11:11:09.423 回答
5

你应该考虑的事情:

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

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

同样在理想世界中,模糊应用程序的逆向工程在经济上没有吸引力。

但回到现实:

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

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

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

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

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

所以你应该首先考虑你的目标、你的市场以及你想用混淆器实现什么。正如您在这里(和其他地方)所读到的那样,混淆并不能真正解决逆向工程的问题。它只会让它变得更难,更耗时。但是,如果这是您想要的,您可以看看开源混淆器,例如 sharpObfuscator 或 obfuscar,它们可能足以让随意的编码人员感到厌烦(可以在此处找到列表:Wikipedia 上的 .NET 混淆器列表)。

如果在您的场景中可能,您可能还会对 SaaS 概念感兴趣。这意味着您提供对软件的访问,而不是软件本身。因此,客户通常无法访问您的组件。但是,根据服务水平、安全性和用户群,实现可靠、自信和高性能的 SaaS 服务可能是昂贵、复杂和困难的。

于 2014-04-19T00:49:42.447 回答
4

我认为这取决于您的产品类型。如果它被指示供开发人员使用 - 混淆会伤害您的客户。我们一直在使用 ArcGIS 产品,所有的 DLL 都被混淆了。这让我们的工作变得更加困难,因为我们无法使用 Reflector 来破译奇怪的行为。我们正在购买为该产品支付数千美元的客户。

所以请不要混淆,除非你真的必须这样做。

于 2008-09-16T13:22:00.233 回答
3

不,混淆已被证明不会阻止某人能够破译编译的代码。这使这样做变得更加困难,但并非不可能。

于 2008-09-16T10:58:51.467 回答
3

我很喜欢阅读 x86 汇编代码,那些从事汇编工作超过 20 年的人呢?

你总会找到只需要一分钟就可以看到你的 c# 或 c 代码在做什么的人......

于 2009-10-21T13:00:51.203 回答
3

只是给几年后阅读的其他人的说明-几个小时前我刚刚浏览了 Dotfuscator 社区版(VS2008 附带)许可证,我相信您不能使用此版本分发商业产品或混淆代码来自一个涉及除您之外的任何开发人员的项目。所以对于商业应用开发者来说,它实际上只是一个试用版。

于 2010-01-26T09:16:57.633 回答
2

...剪辑...这些消息可能变得更难以解释

是的,但是 Visual Studio 附带的免费社区版具有地图功能。有了它,您可以将混淆的方法名称回溯到原始名称。

于 2008-09-16T11:10:02.517 回答
2

我已经成功地将一个免费混淆器的输出放入另一个混淆器。在 Dotfuscator CE 中,仅包含一些混淆技巧,因此使用具有不同技巧的第二个混淆器会使其更加混淆。

于 2008-09-16T11:10:42.157 回答
1

使用.net 反射器对 .net 应用程序进行逆向工程非常简单——因为该应用程序将直接从 MSIL 生成 VB、VC 和 C# 代码,并且可以提取各种有用的 gem。

代码混淆器很好地隐藏了大多数逆向工程黑客的代码,并且将是用于为您的应用程序增加价值的专有和竞争代码的好主意。

有一篇关于混淆的很好的文章,它在这里工作

于 2008-09-16T11:05:56.630 回答
1

这篇文章和周围的问题有一些可能有价值的讨论。这不是一个是或否的问题。

于 2008-09-16T13:26:20.020 回答
1

是的,你绝对应该。不是为了保护它免受一个有决心的人的伤害,而是为了获得一些利润并拥有客户。顺便说一句,如果您在这里达到某个点,有人试图破解您的软件,这意味着您销售的是流行的软件。

问题是为这项工作选择什么工具。查看我使用商业混淆器的经验:https ://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575

于 2010-04-24T21:45:41.550 回答
0

是的,我们有。我们使用 BitHelmet 混淆器。它是新的,但效果非常好。

于 2010-04-06T13:45:18.417 回答
0

但是,真的值得选择、购买和使用这样的工具吗?

我发现 Eazfuscator 便宜(免费)且易于使用:大约需要一天时间。我已经进行了广泛的自动化测试(良好的覆盖率),所以我认为我可以找到任何由混淆引入的错误。

于 2010-04-24T21:57:49.843 回答