.NET代码混淆真的值得吗?

17

根据我所了解的,代码混淆并不难“破解”,而且它只能将不可避免的事情延迟一下。那么,它的目的是什么?

如果有人真的想窃取你的源代码,他们可以做到。

如果有人需要查看你的源代码以进行无害或有益的目的,他们却无法做到。

你可能不应该在代码中存储任何敏感信息,因此这不应该是一个问题。

如果你不混淆代码,你仍然没有提供完整的源代码,因此你可以销售“源代码许可证”。

有趣的是,我曾经见过的唯一混淆的代码是含有错误的可怕代码。我需要查看代码的唯一原因是找出问题所在以及我可以做些什么来修复它。

例如,我需要替换ASPDotNetStoreFront中的某些图像。当寻找标签位置时,我发现它们包含在编译代码中。太烦人了。因此,我试图反编译代码,找出要通过正则表达式替换哪些img标签。我尝试查看源代码以查看可能来自给定编译方法的图像,并且反编译器无法处理它,我认为这是因为代码混淆。我真的没有时间去寻找解编译器/反混淆器。


你的问题是关于混淆或替换混淆程序集中的代码吗? - John Weldon
1
很多重复:https://dev59.com/y3VD5IYBdhLWcg3wVKEb,https://dev59.com/9nRB5IYBdhLWcg3wr44U,https://dev59.com/mXVD5IYBdhLWcg3wJIEK - Jon Seigel
我的问题更多地是想了解为什么公司会混淆他们的代码。实际上,我发现这是一件非常痛苦的事情。作为一个开发者,我发现查看供应商的源代码很有帮助,但正如我所说,通常出现问题的代码已经被混淆了。 - John B
12
只要雇用一个非常糟糕的VB.NET程序员,你的代码将会比任何混淆软件更加混淆。 - dsimcha
6个回答

19

我认为这是值得的。对你来说成本几乎为零,而且你会让黑客的生活变得更加艰难。即使他们破解了它,你也可以满足于知道你浪费了他们数小时甚至数周的时间。只是因为锁不完美并不意味着你不锁门。


2
你是否考虑过,如果你销售涉及集成或其他组件的软件,每当客户遇到错误时都会感到沮丧和困惑,这对他们来说是一种折磨? - John B
11
那么,他们可以联系我。这不是开源软件(我也写过开源软件且没有混淆代码),有一套明确的流程来审查代码。 - Steve

11

只有当你的项目是长期运行,需要花费大量时间才能实现时,才值得这样做。当然,这只是一种观点,但我还没有发现过一种模糊的 .Net DLL,使用 Reflector 就无法弄清楚其运作原理。

这只是一种威慑,而不是更多。如果某人反编译您的代码的成本大于自己实现它的成本,那么这是我认为唯一合法的情况,但如果有人想要查看您的代码运作方式,那么这并不能很好地阻止他们。

我经常看到的一个普遍情况是您如何生成和/或解密许可证密钥。任何有动力想要了解这个并在 Reflector 中查找您的盐/解密方法的人都不会被混淆所阻止,我敢说它真的不会减慢他们太多。


2
什么会减慢它们的速度?我正在混淆代码,就是为了处理许可证问题。 - Erik Forbes
唯一真正有用的资产是启发天真的开发人员及其经理,让他们看到使用创新技术所带来的问题有多大,这些创新技术通常是他们自己想不出来的,也不愿意为之付费。尽管如此,由于不断更新的新一代开发人员,他们足够具有创新精神和天真无邪,能够为他们提供新鲜的想法,直到他们也被耗尽。多么奇妙的世界啊...! - Haymo Kutschbach

3

在我看来,不是的。我见过很多人黑掉用不同语言编写的程序。使用专业工具如IDA(适用于非托管代码),没有什么是百分之百安全的。混淆程序集甚至更容易被黑客攻击,因为元数据仍然存在。


2
我不知道混淆是否“值得”,但我可以说有比混淆更安全的替代方法。
例如,XHEO提供了一种工具(CodeVeil),可以对.NET程序集进行加密,而不仅仅是混淆它们。

昂贵的选择,但是嘿,如果你非常关注代码混淆,你会花钱购买的,对吧? - Randolpho

2
当然,没有什么是100%受保护的。但是因为这个原因不混淆代码就像不锁门一样,因为“任何决心的小偷都可以打开它”。你还是要锁门!
我认为主要的威胁是有人使用ildasm反编译您的应用程序,发现SQL语句,篡改它们,然后再次编译。这样,他/她就可以消除限制,并获得完整的客户列表,或者只是造成纯粹的伤害。
作为应用程序提供商,您将首先承担责任...
BitHelmet的人在http://www.bithelmet.com/Overview.html中解释得很好。
我几年前曾在一家中型信用卡公司工作。我们知道有三起盗窃(大笔钱),所有这些都不是由俄罗斯或中国的世界级黑客实施的,而是由懂得一点编程的员工对收银软件进行了一些微小的调整。
那时我还是初级员工:),我的老板必须处理这些问题。我总是想知道有多少此类盗窃从未被发现;-)。我本来也可以做到,但我从未这样做!
事实上,你必须考虑到某种程度的保护,并且必须考虑内部攻击者。这也会让决心进行反向工程的人更加困难。

1

对于 .Net 应用程序,不混淆代码就相当于把你的产品开源了,因为使用反编译工具 Reflector 很容易看到并分析源代码。也许您有许可协议,但只有少数公司有时间和金钱在法庭上维护许可协议。对于这样的公司,混淆是最佳选择。当然,您需要测试混淆的程序集,但是,您已经在测试您的产品了,为什么不测试最终的混淆程序集呢。

这也取决于混淆器的便利性。考虑我们的 Crypto Obfuscator - 它支持与 Visual Studio 的轻松集成,因此您始终在运行混淆的程序集。它还有许多自动排除功能,因此它不会混淆将导致混淆的程序集无法正常运行的类/成员。它还将显示警告(包括行号)可以引起混淆的代码可能导致混淆的程序集无法正常运行。这是一个巨大的时间节省者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接