你应该混淆一个商业的.Net应用程序吗?
我正在考虑混淆商业.Net应用程序。 但是select,购买和使用这样的工具真的值得吗? 混淆的二进制文件是否真的可以避免逆向工程?
您可能不需要购买工具 – Visual Studio.NET附带了Dotfuscator的社区版本。 其他免费的混淆工具在这里列出 ,他们可能会满足您的需求。
有可能混淆的二进制文件对于逆向工程是不安全的,就像您的自行车锁可能是易碎的/可选的一样。 但是,通常情况下,一个小的不便就足以阻止代码/自行车盗贼。
另外,如果在法庭上宣称您有权维护一段代码,那么已经看到要努力保护它(通过混淆它)可能会给您额外的分数。 🙂
但是,您必须考虑这些缺点 – 使用带有混淆代码的reflection会更困难,而且如果使用类似log4net的方法根据所涉及的类的名称生成部分日志行,则这些消息可能会变成更难以解释。
请记住,模糊处理对于您的代码的随意审查员来说只是一个障碍。 如果有人认真地搞清楚你写的是什么,你将很难阻止他们。
如果你的代码中有秘密(比如密码),那么你做错了。
如果您担心有人可能会用自己的想法来制作自己的软件,那么在市场上就会有更多的运气,提供客户需要的新版本,并提供技术支持,并成为他们的合作伙伴。 良好的业务赢。
在我们公司,我们评估了几种不同的混淆技术,但都存在问题。 最大的问题是,我们非常依赖反思,例如根据属性名称dynamic创build网格。
所以所有的混淆器都会重命名,当然可以禁用它,但是这会让混淆失去很多好处。
另外,在我们的代码中,我们有很多NUnittesting依赖于更多的方法和属性被公开,这阻止了一些混淆器能够混淆这些类。
最后,我们决定使用名为.NET Reactor的产品
它工作得很好,我们没有任何与其他产品相关的问题。
“与反混淆器相比,.NET Reactor完全停止了任何通过混合任何纯.NET组件(用C#,VB.NET,Delphi.NET,J#,MSIL编写)与本地机器代码的反编译。在潜在的黑客和你的.NET代码之间build立一个原生的墙,结果是一个标准的基于Windows的,而不是与MSIL兼容的文件,原始的.NET代码保持完好,被本地代码保护,不被窥探。代码不会在任何时候拷贝到硬盘上,没有能够反编译.NET Reactor保护程序集的工具。“
事实上,你实际上可以逆向工程,不会使混淆无用。 它确实显着提高了酒吧。
一个未混淆的.NET程序集将向您显示所有源代码,突出显示,并通过下载.NETreflection器 。 添加混淆,你会非常有意义地减less能够修改代码的人数。
这取决于你是否保护自己。 如果你将它运送出来,你也可以开放源码应用程序,并从营销中受益。 运送模糊处理将只允许人们通过补丁相对容易地生成修改后的二进制文件,而不是能够窃取你的代码并创build一个直接的竞争对手。 从混淆代码获取实际源代码非常困难,当然取决于混淆器。
我认为这取决于你的产品的types。 如果指向被开发者使用 – 混淆会伤害你的客户。 我们一直在使用ArcGIS产品,并且所有的DLL都被混淆了。 这使我们的工作变得更加困难,因为我们不能使用Reflector来破译奇怪的行为。 而我们正在购买支付数千美元的产品的客户。
所以,请不要混淆,除非你真的要。
不,混淆已经被certificate不能阻止某人破解编译好的代码。 这样做更加困难,但并非不可能。
我非常舒适的阅读x86汇编代码,那么20多年来与汇编工作的人们呢?
你总是会find一个人,只需要一分钟,看看你的C#或C代码正在做什么…
只是一个注意到其他人阅读今年以后 – 我刚刚浏览了几个小时前的Dotfuscator社区版(VS2008附带)的许可证,我相信你不能使用这个版本分发商业产品,或混淆代码从一个涉及除你以外的开发者的项目开始。 所以对于商业应用程序开发人员来说,这只是一个试用版。
你应该考虑的事情:
- 混淆不保护您的代码或逻辑。 这使得阅读和理解变得更加困难。
- 混淆并没有阻止逆向工程。 它只是减缓了这个过程。
- 大多数国家的知识产权受法律保护。 所以如果竞争对手使用你的代码或具体实现,你可以起诉他。
唯一的问题混淆可以解决的是,有人创build1:1(或接近1:1)的具体实现的副本。
同样在一个理想的世界里,一个混淆的应用程序的逆向工程是经济上没有吸引力的。
但是回到现实:
- 这个星球上没有任何工具可以阻止某人复制用户界面,行为或任何应用程序提供或产生的结果。 混淆在这种情况下是100%无用的
- 市场上最好的混淆器不能阻止使用某种反汇编程序或hex编辑器 ,对于某些极客来说,这非常适合用来查看应用程序的核心。 这只是一个没有混淆的代码。
所以现实情况是,你可以让自己的应用程序更难以花费更多的时间,但是实际上并没有得到任何可靠的保护。 无论您使用的是免费还是商业产品。
像控制stream混淆或代码虚拟化这样的先进技术可能有助于理解逻辑有时真的很难,但是它们也会引起很多有趣和困难的debugging或解决问题。 所以他们有时更像是一个额外的问题,而不是解决scheme。
从我的angular度来看,混淆是不值得一些公司收取他们的产品的钱。 如果你想唠叨休闲开发者,开源混淆器就足够了。 如果你想尽可能地把握你的应用程序的核心,你需要使用具有虚拟执行环境和虚拟文件系统的encryption容器,但是它们也提供了攻击媒介,也可能是一个充满问题的包的来源。
您的知识产权和您的产品在大多数受法律保护的国家/地区。 所以如果有一个竞争对手分析和复制你的代码,你可以起诉他。 如果一个坏人或黑客或黑客拿你的应用程序,你被恶作剧 – 但一个混淆器没有什么区别。
所以你应该首先考虑你的目标,你的市场和你想用混淆器实现的目标。 正如你可以在这里阅读(和其他地方)混淆并不真正解决逆向工程的问题。 这只会让它更难,更耗时。 但是,如果这是你想要的,你可以看看像sharpObfuscator或obfuscar这样的开源混淆器,这可能足以唠叨休闲编码器(这里可以findList : Wikipedia上的.NET混淆器列表 )。
如果在您的情况下可能,您可能也对SaaS-Concepts感兴趣。 这意味着您可以访问您的软件,而不是软件本身。 所以客户通常不能访问你的程序集。 但是,取决于服务水平,安全性和用户群,实现可靠,自信和高性能的SaaS服务可能是昂贵,复杂和困难的。
…剪断…这些信息可能变得更难解释
是的,但Visual Studio附带的免费社区版本具有地图function。 有了这个,你可以追溯到模糊的方法名称的原始名称。
我已经成功地把一个免费的混淆器输出到一个不同的混淆器 。 在Dotfuscator CE中,只包含了一些混淆技巧,因此使用具有不同技巧的第二个混淆器会使其更加混淆。
使用.netreflection器对一个.net应用程序进行逆向工程是很简单的,因为这个应用程序将直接从MSIL生成VB,VC和C#代码,并且有可能提取出各种有用的gem。
代码混淆器很好地隐藏了大多数逆向工程黑客的代码,并且使用专有和有竞争力的代码来增加应用程序的价值是一个好主意。
这里有一个很好的关于混淆的文章,它在这里工作
这篇文章和周围的问题有一些讨论可能是有价值的。 这不是一个是或否的问题。
是的,你绝对应该。 不是为了保护自己,而是为了获得一些利润和拥有客户。 顺便说一句,如果你在这里达到某个点,有人试图破解你的软件,这意味着你卖一个stream行的软件。
问题是什么工具select的工作。 看看我的经验与商业混淆器: https : //stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575
是的,我们这样做。 我们使用BitHelmet混淆器。 这是新的,但它运作得很好。
但是select,购买和使用这样的工具真的值得吗?
我发现Eazfuscator便宜(免费),易于使用:花了大概一天。 我已经有了广泛的自动化testing(覆盖面很好),所以我认为我可以发现任何由混淆引入的错误。