我正在考虑混淆商业.Net应用程序.但是选择,购买和使用这样的工具真的值得吗?混淆的二进制文件是否真的免于逆向工程?
您可能不必购买工具 - Visual Studio.NET附带了Dotfuscator的社区版本.此处列出了其他免费的混淆工具,它们可能满足您的需求.
混淆的二进制文件可能不会安全地进行逆向工程,就像你的自行车锁可能是易碎/可拾取的一样.然而,通常的情况是,一个小的不便足以阻止代码/自行车窃贼.
此外,如果有时间在法庭上主张您对一段代码的权利,被视为努力保护它(通过混淆它)可能会给你额外的分数.:-)
但是你必须考虑缺点 - 使用混淆代码的反射会更加困难,如果你使用像log4net这样的东西来根据所涉及的类的名称生成部分日志行,这些消息就会变成更难以解释.
请记住,混淆只是代码的临时检查员的障碍.如果有人认真考虑你所写的内容,那么你将很难阻止他们.
如果您的代码中有秘密(如密码),那么您做错了.
如果您担心某人可能会根据您的想法制作您自己的软件,那么通过提供客户需要的新版本,技术支持以及成为他们的合作伙伴,您将在市场中获得更多的运气.好的生意赢了.
在我们公司,我们评估了几种不同的混淆技术,但它们都有问题.最大的问题是我们非常依赖于反射,例如根据属性名称动态创建网格.
所以所有的混淆器都重命名,当然你可以禁用它,但是你会失去很多混淆的好处.
此外,在我们的代码中,我们有很多NUnit测试依赖于更多的方法和属性是公共的,这阻止了一些混淆器能够混淆这些类.
最后,我们选择了一款名为.NET Reactor的产品
它运作良好,我们没有任何与其他产品相关的问题.
"与混淆器相比,.NET Reactor通过将任何纯.NET程序集(用C#,VB.NET,Delphi.NET,J#,MSIL ......编写)与本机机器代码混合来完全阻止任何反编译.详细地说,.NET Reactor在潜在的黑客和你的.NET代码之间建立一个原生墙.结果是一个标准的基于Windows的,而不是MSIL兼容的文件.原始的.NET代码保持完整,受到本机代码的良好保护,对于窥探眼睛是不可见的.原始.NET代码不会随时复制到硬盘上.没有工具可以反编译.NET Reactor保护的程序集."
你实际上可以对其进行逆向工程这一事实并不会使混淆无效.它确实显着提高了标准.
未经模糊处理的.NET程序集将通过下载.NET Reflector向您显示所有源代码,突出显示所有内容.添加混淆,你将非常有意义地减少能够修改代码的人数.
这取决于你是在保护自己.如果您将其进行未经过模糊处理,您可以开源应用程序并从营销中获益.运输它混淆将只允许人们通过补丁相对容易地生成修改后的二进制文件,而不是能够窃取您的代码并创建一个直接的竞争对手.当然,取决于混淆器,从混淆代码中获取实际来源非常困难.