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

时间:2010-02-22 21:52:21

标签: .net obfuscation

从我所看到的,代码混淆并不是那么难以“破解”,它只会延迟不可避免的。在那种情况下,它的目的是什么?

如果有人真的想偷你的来源,他们可以。

如果有人需要查看您的源代码是否无害/有用,他们就不能。

您可能不应该在代码中存储任何敏感内容,因此这不应成为问题。

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

有趣的是,我见过的唯一代码混淆是可怕的代码,其中有bug。我需要查看代码的唯一原因是弄清楚问题是什么以及我可以做些什么来解决它。

例如,我需要替换ASPDotNetStoreFront中的一些图像。在查找标签的位置时,我发现它们包含在已编译的代码中。废话。所以我想我会反编译代码,找出要通过Regex替换的img标签。我试图查看源代码,看看哪些图像可能来自给定的编译方法,而反射器无法处理它,我认为是因为混淆。我没有时间去寻找de-comilers / de-obfuscators。

6 个答案:

答案 0 :(得分:18)

我觉得它值得。你的成本几乎没有,你让黑客的生活更加艰难。即使他们破解了它,你也会感到满意的是,他们知道你浪费了几个小时到几个星期的生命。仅仅因为锁不完美并不意味着你不会锁门。

答案 1 :(得分:11)

只有当你的项目长期运行并且需要花费大量时间来实施它才值得。这当然是一个意见,但我还没有找到一个混淆的.Net DLL,但是我无法弄清楚只使用Reflector会发生什么。

这是威慑力,仅此而已。如果某人对代码进行逆向工程的成本高于自己实现代码的成本,那么这是我看到的唯一合法案例,但如果有人想知道你的代码是如何编写代码的,那么防止这种代码就不是很好。

我看到的一个常见情况是如何生成和/或解密许可证密钥。任何有动力去解决这个问题并且为你的盐/解密方法挖掘反射器的人都不会被混淆停止,我敢说它不会真的减慢他们的速度。

答案 2 :(得分:3)

在我看来,没有。我见过有人用不同的语言编写黑客程序。使用像IDA这样的专业工具(适用于非托管代码),没有什么是100%安全的。由于仍然存在元数据,混淆的程序集更容易被破解。

答案 3 :(得分:2)

我不知道混淆是否“值得”,但我可以说混淆的替代品更安全。

例如,XHEO提供了一个工具(CodeVeil)来实际加密.NET程序集,而不仅仅是对它们进行模糊处理。

答案 4 :(得分:2)

当然没有什么是100%受保护的。但是因为这个原因没有混淆就像不关闭你的房子门,因为“无论如何,任何坚定的窃贼都可以打开它”。 无论如何你都锁门!

我认为主要威胁是一些人使用ildasm反编译您的应用程序,查找SQL语句,篡改它们,然后再次编译它。通过这种方式,他/她可以消除限制并获得完整的客户列表,例如,或者只是造成简单的伤害。

作为应用程序提供商,您首先将负责......

BitHelmet的家伙在http://www.bithelmet.com/Overview.html中解释得很好。

几年前我在一家中等规模的信用卡公司工作。有三起涉及我们所知道的员工的盗窃(大笔时间金钱),所有这些都不是由俄罗斯或中国的世界级黑客执行,而是由kwnow-just-enough-of-programming员工制作,只做了一点点转向收银员软件。

我当时是一名大三学生:),我的老板不得不处理它。我总是想知道有多少这些盗窃案从未被发现;-)。我本可以做到的,但从未做过!

事实上,你必须考虑某种程度的保护,你必须考虑内部攻击者。而且也会让坚定的反向工程师的生活更加艰难。

答案 5 :(得分:1)

对于.Net应用程序,不要混淆使您的产品开源,因为它很容易使用Reflector查看和分析源代码。 您可能拥有许可协议,但只有少数公司有时间和金钱在法庭上为许可协议辩护。对于这些公司来说,混淆是最好的选择。当然,您需要测试混淆的程序集,但是,您已经在测试您的产品,那么为什么不测试最终的混淆程序集。

这还取决于混淆器有多大帮助。考虑我们的Crypto Obfuscator - 它支持与Visual Studio的轻松集成,因此您始终运行模糊的程序集。它还有许多自动排除功能,因此它不会混淆会导致混淆程序集错误运行的类/成员。它还将显示代码的警告(包括行号),可能导致混淆的程序集错误地运行。这节省了大量时间。