Dotfuscator社区版有多好?什么是“足够好的混淆器”?

时间:2010-01-08 19:27:45

标签: .net obfuscation piracy dotfuscator piracy-prevention

我计划发布一个价格低廉的小型实用程序。由于这比业务更重要,我计划使用随VS2008一起提供的Dotfuscator Community Edition。

有多好?

我还可以使用“足够好的混淆器”的定义 - Dotfuscator Community Edition缺少哪些功能以使其足够好。

修改

我检查了商业混淆器数量的定价,但是它们花了很多钱。这值得么?

商业版本是否更好地保护免受逆向工程?

我并不十分害怕我的应用程序被破解(如果应用程序如此糟糕以至于没有人有兴趣破解它,那将是令人失望的)。它无论如何都没有受到严密保护,而不是在代码中的几个地方进行过于复杂的串行密钥和许可证检查。它只是让我感到困惑,没有混淆,有人可以轻松获取源代码,重新命名并将其作为自己出售。

这种情况会发生很多吗?

编辑2:

有人可以推荐商业混淆器。我发现很多,它们都很贵,有些甚至没有列在网站上的价格。

特征明智,所有产品似乎或多或少相似。

混淆器应具备的最小功能集是什么?

4 个答案:

答案 0 :(得分:49)

简而言之,Dotfuscator Community Edition和其他“专业”版本之间的主要区别在于,Community Edition只会真正模糊和更改您的类的名称空间,方法名称和其他“公共”可访问方面。它不会深入研究函数本身并模糊函数中的“私有”代码。

此外,Community Edition不会对应用程序中的控制流进行模糊处理,也不会将多个程序集中的代码“组合”到一个程序集中。这些功能可在“专业”付费版本中使用。

通过查看以下两个链接,可以找到Community Edition(Visual Studio附带的“免费”版本)和“专业”付费版本之间的最佳比较:

Preemptive Dotfuscator Editions Comparison

Dotfuscator Community Edition 3.0 on MSDN

MSDN链接略有过时,但可以更好地解释各种版本的Dotfuscator中可用的实际功能。

修改

商业混淆器确实需要花费很多钱,至于它们是否物有所值?好吧,这是一个只有你能做出的判断。就个人而言,我会说在你的场景中它是不值得的。首先,因为你只想保护一个应用程序(“我计划发布一个小的,低价的实用程序。”),其次,你说你并不过分担心应用程序被“破解”(“我”我并不十分害怕我的申请被破解。“)。

我理解为什么它会让你感到厌烦,编译的.NET应用程序,没有任何混淆,可以很容易地逆向设计到他们原来的源代码,并且有人可能利用这个来窃取你的软件并将其作为自己的软件出售,然而,事实仍然是软件盗版确实存在,你可能永远不会阻止它。

试图阻止软件盗版一直存在争议(Stack Overflow)和整个互联网。

普遍的共识似乎是你需要把你的时间和精力放在使你的产品尽可能好的上,而不是同时试图保护一些东西,如果有足够的时间/金钱,“攻击者尽管你尽最大努力阻止他这样做,否则“无论如何都会破解”/偷窃你的软件。

  

这种情况会发生很多吗?

我会说它可能比你想象的要少得多。当然,软件破解了,但我不认为有太多人真正窃取其他人的源代码并完全重新标记它以自己的形式出售。我并不是说它没有,或者没有发生,但它肯定不常见。

总而言之,我认为你最好的选择是专注于使你的实用程序尽可能好,并使用免费的Dotfuscator混淆器,因为它需要很少的时间/金钱投入来混淆你的代码从最明显的窥探眼睛,但不要失去任何睡眠,因为如果有人想要严重破解/窃取你的产品/代码,他们就会这样做。

答案 1 :(得分:11)

我认为Visual Studio附带的Dotfuscator Community Edition是一个非常天真的解决方案。它仅提供符号重命名,并且根本不会混淆控制流。如果有人决定窃取你的代码,它只需要重构所有的名字,这对于少量的课程来说非常容易。

此外,你可以依靠Reflector提供的不那么完美的反编译(它通常会使开关块混乱,产生大量的错误,if-else块等不匹配)。

但我建议你试试Eziriz .NET Reactor。仅售179美元(AFAIK最优惠的价格/功能比)。它提供标准的混淆技术,如符号重命名,字符串加密,控制流混淆。作为一个很好的奖励,它为您的应用程序创建本机启动器,它将包含您的主程序集和所有第三方引用加密和按需加载。此外,它还提供了一些许可功能。

无论如何,逆转.NET应用程序并不是那么难,我这样做是为了好玩,并且可以说只是时间和金钱(当然还有常识)的问题,你的应用程序将被破解或撤销的速度有多快。

答案 2 :(得分:8)

至少,混淆器应该具有:

  1. 字符串加密
  2. 符号重命名
  3. 控制流混淆
  4. 很有特色的是:

    1. 资源保护
    2. 装配合并/嵌入
    3. 外部方法调用隐藏
    4. 能够自动签署混淆程序集
    5. 支持附属程序集
    6. 死码消除
    7. 元数据缩减
    8. 反反编译器(反射器)
    9. 防篡改
    10. 反调试
    11. 查看支持所有这些内容的Crypto Obfuscator产品。

答案 3 :(得分:5)

绕过逆向工程代码的另一种方法是,如果你真的买不起那些增加支持的混淆器,你可以放置你的dll。在部署之前的组件中告诉编译器在哪里查找它们,这是一种阻碍逆向工程的旧实践。 但就像已经说过的那样,主要集中在开发出优秀的产品和良好的编码实践,那么将来你将能够买得起漂亮的混淆器应用程序。 此外,尽量不要担心其他人破解你的代码,因为大多数黑客破解代码只是找到一种方法来使用产品而不需要付费而不是窃取代码或从初学程序员那里学习。是的,我希望JIT只支持c#和vb.net,它们可以真正减少逆向工程,但由于.net可以读取很多,因为.net真的是语言友好的价格。 所以编码并赚钱,买一些额外的证券。