我在考虑混淆商业.Net应用程序。但是选择,购买和使用这样的工具真的值得吗?混淆的二进制文件是否真的不受逆向工程的影响?
答案 0 :(得分:39)
您可能不需要购买工具 - Visual Studio.NET附带了Dotfuscator的社区版本。其他免费的混淆工具are listed here,它们可能满足您的需求。
混淆的二进制文件可能无法进行逆向工程,就像你的自行车锁可能是易碎/可拾取的一样。然而,通常情况下,一个小小的不便足以阻止代码/自行车窃贼。
此外,如果有时间在法庭上断言你对一段代码的权利,那么看到他们努力保护它(通过混淆它)可能会给你额外的分数。 : - )
你必须考虑缺点 - 使用带有混淆代码的反射会更加困难,如果你使用像log4net这样的东西来根据所涉及的类的名称生成部分日志行,这些消息可能变得更加难以解释。
答案 1 :(得分:29)
请记住,混淆只是代码的临时检查员的障碍。如果有人认真地想弄清楚你写的是什么,你将很难停止它们。
如果你的代码中有秘密(比如密码),你就错了。
如果您担心有人可能会根据您的想法制作您自己的软件,那么通过提供客户需要的新版本,技术支持以及成为他们的合作伙伴,您将在市场中获得更多的运气。好的生意赢了。
答案 2 :(得分:12)
在我们公司,我们评估了几种不同的混淆技术,但它们都有问题。最大的问题是我们非常依赖反射,例如:根据属性名称动态创建网格。
所以所有的混淆器都重命名,你当然可以禁用它,但是你会失去很多混淆的好处。
此外,在我们的代码中,我们有很多NUnit测试依赖于更多的方法和属性是公共的,这阻止了一些混淆器能够混淆这些类。
最后,我们选择了一款名为.NET Reactor
的产品效果很好,我们没有任何与其他产品相关的问题。
“与混淆器相比,.NET Reactor通过将任何纯.NET程序集(用C#,VB.NET,Delphi.NET,J#,MSIL ......编写)与本机机器代码混合来完全停止任何反编译。详细地说, .NET Reactor在潜在的黑客和.NET代码之间构建了原生墙。结果是一个基于Windows的标准文件,而不是MSIL兼容的文件。原始的.NET代码保持完整,受本机代码保护良好,对于窥探眼睛是不可见的。任何时候都不会在硬盘上复制原始.NET代码。没有能够反编译.NET Reactor保护程序集的工具。“
答案 3 :(得分:7)
您实际上可以对其进行逆向工程这一事实并不会使混淆无效。它确实显着提高了标准。
未经模糊处理的.NET程序集将通过下载.NET Reflector向您显示所有源代码,突出显示所有内容。添加混淆,你将非常有意义地减少能够修改代码的人数。
这取决于你是在保护自己。如果您将其进行未经过模糊处理,您可以开源应用程序并从营销中获益。运输它混淆将只允许人们通过补丁相对容易地生成修改后的二进制文件,而不是能够窃取您的代码并创建一个直接的竞争对手。当然,取决于混淆器,从混淆代码中获取实际来源非常困难。
答案 4 :(得分:4)
我认为这取决于您的产品类型。如果它被指示供开发人员使用 - 混淆会伤害您的客户。我们一直在使用ArcGIS产品,所有的DLL都被混淆了。它使我们的工作变得更加艰难,因为我们不能使用Reflector来破译奇怪的行为。我们正在购买为此产品支付数千美元的客户。
所以请不要混淆,除非你真的需要。
答案 5 :(得分:4)
你应该考虑的事情:
混淆可以解决的唯一问题是有人创建了特定实现的1:1(或接近1:1)副本。
同样在理想的世界中,混淆应用程序的逆向工程经济缺乏吸引力。
但回到现实:
所以现实是,你可以让你的应用程序更难,更耗时,但你不会得到任何可靠的保护。无论您使用的是免费商品还是商品。
控制流混淆或代码虚拟化等先进技术可能有助于理解逻辑有时非常困难,但它们也会导致很多有趣且难以调试或解决问题。因此,它们有时更像是一个解决问题的附加问题。
从我的观点来看,混淆是不值得一些公司为其产品收取的费用。如果你想唠叨休闲开发者,开源混淆器就足够了。如果你想让它尽可能地深入了解你的应用程序的核心,你需要使用带有虚拟执行环境和虚拟文件系统的加密容器,但它们也提供攻击向量,也可能是一个充满问题的包的来源
您的知识产权和产品在大多数受法律保护的国家/地区。因此,如果有一位竞争对手分析并复制您的代码,您可以起诉他。如果一个坏人或黑客或黑客攻击你的应用程序,你会被恶作剧 - 但混淆器并没有什么区别。
因此,您应首先考虑您的目标,市场以及您想要使用混淆器实现的目标。 正如您可以在这里(以及其他地方)阅读的那样,混淆并不能真正解决逆向工程的问题。它只会让它变得更难,更耗时。但如果这是你想要的,你可能会看一下开源混淆器,例如: sharpObfuscator或obfuscar,可能足以唠叨偶然编码器(列表可以在这里找到:List of .NET Obfuscators on Wikipedia)。
如果您的方案中有可能,您可能也对SaaS-Concepts感兴趣。这意味着您可以访问您的软件而不是软件本身。因此,客户通常无法访问您的程序集。 但是,根据服务水平,安全性和用户群,它可能是昂贵,复杂且难以实现可靠,自信和高性能的SaaS服务。
答案 6 :(得分:3)
不,已经证明混淆不会阻止某人破译已编译的代码。这使得这样做更加困难,但并非不可能。
答案 7 :(得分:3)
我非常难以阅读x86汇编代码,那些使用汇编20多年的人呢?
你总能找到一个只需要一分钟就能看到你的c#或c代码正在做什么的人......
答案 8 :(得分:3)
这是几年后阅读其他人的简单说明 - 几小时前我刚刚浏览了Dotfuscator社区版(VS2008附带)许可证,我相信您不能使用此版本来分发商业产品,或者从涉及除您自己以外的任何开发人员的项目中混淆代码。因此对于商业应用程序开发人员来说,它实际上只是一个试用版。
答案 9 :(得分:2)
... ...剪断 这些消息可以变得更多 很难解释
是的,但Visual Studio附带的免费社区版具有地图功能。 有了它,您可以将混淆的方法名称追溯到原始名称。
答案 10 :(得分:2)
我成功地从一个免费的混淆器into a different obfuscator输出了输出。在Dotfuscator CE中,只包含了一些混淆技巧,因此使用具有不同技巧的第二个混淆器会使其更加模糊。
答案 11 :(得分:1)
使用.net reflector对.net应用程序进行逆向工程非常简单 - 因为应用程序将直接从MSIL生成VB,VC和C#代码,并且可以提取各种有用的宝石。
代码混淆器可以从大多数逆向工程黑客中隐藏代码,并且最好使用专有和有竞争力的代码,为您的应用程序增加价值。
There's a pretty good article on obfuscation and it's workings here
答案 12 :(得分:1)
This post和周围的问题有一些可能有价值的讨论。这不是一个是或否的问题。
答案 13 :(得分:1)
是的,你绝对应该。不是为了保护自己不是一个坚定的人,而是为了获得一些利润并拥有客户。顺便说一句,如果你在这里达到一个点,有人试图破解你的软件,那意味着你卖了一个流行的软件。
问题是为工作选择的工具。查看我对商业混淆器的经验:https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575
答案 14 :(得分:0)
是的,我们这样做。我们使用BitHelmet混淆器。它是新的,但它的效果非常好。
答案 15 :(得分:0)
但选择,购买和使用这种工具真的值得吗?
我发现Eazfuscator价格便宜(免费),且易于使用:花了大约一天时间。 我已经进行了大量的自动化测试(覆盖率很高),所以我认为我可以找到混淆引入的任何错误。