我们是否应该混淆商业.Net应用程序?

时间:2020-03-05 18:55:37  来源:igfitidea点击:

我当时正在考虑混淆商业.Net应用程序。但是,选择,购买和使用这样的工具真的值得吗?被混淆的二进制文件真的可以安全地进行逆向工程吗?

解决方案

回答

不,混淆已被证明不能阻止某人解密已编译的代码。这使这样做更加困难,但并非没有可能。

回答

我们可能不必购买工具Visual Studio.NET随社区版本的Dotfuscator一起提供。其他免费的混淆工具在此处列出,它们可能满足需求。

混淆的二进制文件可能无法逆向工程,因此就像自行车锁可能会断裂/可撬一样。但是,通常情况下,一些小麻烦足以阻止代码/自行车小偷。

同样,如果是时候在法庭上主张我们对某段代码的权利,则被视作努力保护该代码(通过模糊处理)可能会给我们带来额外的好处。 :-)

我们确实需要考虑不利因素,尽管使用混淆代码进行反射可能会更加困难,并且如果我们使用log4net之类的东西根据所涉及的类的名称来生成部分日志行,这些消息可能会变得非常多。更难解释。

回答

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

代码混淆器可以很好地将代码隐藏在大多数逆向工程黑客面前,并且在专有和具有竞争力的代码上使用是一个好主意,从而为应用增添价值。

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

回答

...snip... 
  these messages can become much more
  difficult to interpret

是的,但是Visual Studio随附的免费社区版具有地图功能。
这样,我们可以将混淆的方法名称追溯到原始名称。

回答

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

回答

我们实际上可以对其进行反向工程的事实并不会使混淆变得毫无用处。它确实大大提高了标准。

一个清晰的.NET程序集将通过下载.NET Reflector向我们显示所有源代码,突出显示的内容以及所有内容。对此添加混淆,将显着减少能够修改代码的人员数量。

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

回答

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

因此,所有混淆器都将其重命名,我们当然可以将其禁用,但是那样一来我们就失去了许多混淆的好处。

另外,在我们的代码中,我们有很多NUnit测试,它们依赖于更多的公共方法和属性,这使某些混淆器无法混淆那些类。

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

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

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

回答

我认为这取决于我们产品的类型。如果将其定向给开发人员使用,则混淆会伤害客户。我们一直在使用ArcGIS产品,并且所有DLL都被混淆了。这使我们的工作更加困难,因为我们无法使用Reflector来破译怪异的行为。而且,我们购买的客户花了数千美元购买了该产品。

因此,请不要混淆,除非我们确实需要。

回答

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

回答

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

如果代码中有秘密(例如密码),那么我们做错了。

如果我们担心有人会根据想法来生产自己的软件,则可以通过提供客户所需的新版本,技术支持以及成为他们的合作伙伴来在市场上取得更大的运气。好生意赢了。

回答

我非常喜欢阅读x86汇编代码,而从事汇编工作已有20多年的人们呢?

我们总会发现只需要一分钟即可看到cor代码正在做什么的人...

回答

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

回答

是的,我们愿意。我们使用BitHelmet混淆器。它是新的,但效果很好。

回答

是的,我们绝对应该。并不是要保护自己免受某个坚定的人的侵害,而是要获取一些利润并拥有客户。顺便说一句,如果我们到了这里要说的话,就会有人尝试破解软件,这意味着我们出售了流行的软件。

问题是要为工作选择哪种工具。看看我对商用混淆器的经验:https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575

回答

But is it really worth the effort to select, buy and use such a tool?

我发现Eazfuscator价格便宜(免费)且易于使用:大约花了一天的时间。
我已经进行了广泛的自动化测试(覆盖面很广),所以我认为我可以找到混淆所带来的任何错误。