是否有某种方法可以混淆基于 C 的可执行文件或库以防止反编译?

有帮助吗?

解决方案

没有。你可以把它更多的困难的反编译,但你不能的阻止的它。我的建议是停止浪费你的时间,而是集中精力与不断改进的功能,提供一个很棒的产品。

那么,人们会愿意为它付出。

您的主要问题是,只有这样,才能使你的代码未破解的是让未运行的。可以加载到PC任何东西都可以被破解。是做反向的乐趣,利润或名声工程的人一般的非常的擅长,并会真的不能被任何你做尝试,并阻止他们分阶段毫厘。

他们可以访问工具,使破译你的代码远比你会混淆它:-)远好于大说服世界,你的软件是值得购买的工作更容易,看到盗版为契机的工作以可能地转换“窃贼”到真正的用户。

例如,发现的为什么的他们不支付你的软件,并尝试解决这个问题。你永远不会皈依的人的100%,有些人会盗版你的代码只是为了好玩。

查看上 Techdirt的关于CWF + RTB运行在系列文章(连接与风扇和原因买)。我发现很多在那里长大点的可以适用于软件行业。

其他提示

<强>简单的方法:卖一个封隔器/ cryptor /混淆产物。一些价格昂贵,而且在游戏中使用,有些则不是。谷歌为他们通过像“拷贝保护”,等等。

流行语

<强>快速的方法:用 UPX 包,然后曼格莱某处头所以它仍然会在内存中加载并运行良好,但UPX工具将失败,错误(试行版本字段)。如果UPX实用程序失败95%将放弃。

难的方法:编写您自己的包装

哦,我忘:

真正的简单方法:就出货,因为它是。没有真正的 - 不管你做什么的人仍然可以反向工程的代码。努力你把它在短短的金额限制多少能扭转它。

具有完全优化编译。

“混淆可执行”是没有意义的。硬件必须能够在能够执行它“理解”的代码,它的硬件能理解它,逆向工程的人能理解它。你可以做最会做的多是比较繁琐理解,但可能不会,并且有代价的。

要使它更难?当然。请不要那样做。

要防止它? ?任何那将运行的二进制系统将需要的软件来解密你拿出任何方案。他们就可以反编译那个,然后看看你模糊的可执行文件已经解释。

我想,如果你谈论编译的二进制没有什么可以做,(也许仅适用 UPX 或相关工具),其不会使大量SENCE的,因为它可以颠倒。

如果您谈谈编写新的代码,尝试的自Modyfing C代码这将可能是重新工程应用程序最难方式

编译的C代码与一个优化编译器使得它不可能恢复原来的源代码或任何甚至远程类似于它。这是比任何Java或.NET模糊处理是受追捧的更加安全。要确保,如果你想让它更小,发行前隐藏任何符号名剥离可执行文件。然而,请注意,这也使得调试(应用程序崩溃)几乎是不可能的。

但即便如此,如果有人真的想破解你的软件,他会做这样的装配水平,可能与加载软件或其他诡计 - 无论你尝试做阻止他。许多公司都尝试过,但没有成功。使用黑客这样才挫败最终用户,因为它们可能应用程序崩溃或甚至崩溃视窗的内置调试器。

退出浪费你的时间思考混淆,而你应该改进计划来代替。

反编译(不再有 Gotos)以及混淆实践(流表)和理论(不可区分性混淆)是活跃的研究领域,因此没有解决方案 - 只有工具、技术和专业知识。如果您确实希望您的代码不受反编译影响,请创建一个 Web 应用程序,并将敏感代码放在服务器端。但是,如果您坚持向某人提供二进制文件的模式,那么您必须明智地判断您想要在安全性和性能之间做出的权衡。混淆是有代价的,而且永远不会是完美的。一些选项

  • 使用 UPX 以外的加壳程序(UPX 已安装在许多 Linux 发行版中)。性能成本较低,大多数人不具备手动解压二进制文件进行静态分析的技能。但对于经验丰富的逆向者来说,拆箱的成本并不重要
  • 查看 Tigress,这是一个多样化的虚拟器/混淆器,具有丰富的 C 源到源混淆功能。为了获得更好的性能,请依赖支持的转换、控制流扁平化、函数合并/拆分、文字编码
  • 如果您想要更好的保护,请查看Tigress的主要转变:虚拟化、JITing 等,但我相当确定这些更昂贵,并且如果您使用这些转换,您的用户可能会注意到速度变慢。

不要因为 Barak 等人关于黑盒混淆的不可能性的开创性工作而气馁。他只是证明了黑盒混淆器的不可能性,而不是许多实用且有价值的混淆器的不可能性。(黑盒混淆是程序的内部运作完全难以理解)也不要被盗版者气馁。如果你的产品好的话,总会有人愿意购买。

为什么混淆代码,如果有与它有商业利益?说实话,假设商业代码进行了优化不够,混淆和作品,然后的所有尴尬的事,母亲发生了 - 一个毛刺....你卡住恕我直言,作为生产二进制代码进行模糊处理,使其更难调试在故障发生的事情和难以复制的,它会被卡住的bug列表上永远...

例如,试图找到堆栈跟踪,你会失去更多的头发,然后不断尝试找出DIS-汇编代码摸出WTF是发生在那里,意大利面条循环无尽的里姆斯结束。总之,不要!

您最终会在尝试调试毛刺赔钱......要么你必须是一个辉煌的汇编专家阅读了内存转储和混淆代码工作了...不要把它离开,只是让你美丽的产品加工和销售它......当然,还有很多有时间在他们的手被打破它的人逆向工程的代码...

在秘密殴打是跟随原则 - 发布频繁,常发布后,做出改进你释放的时候,以这种方式最新,最大的特点是更先进的日期,那么它需要为一个黑客的时间来拆解和工作了!看看Linux源代码,补丁进来,那么它得到释放......如果你记住这一点原则,通过在一个更为更快的速度与更多的功能发布新版本,那么你赢了!

,使事情变得困难的一种方法是将其打包。 UPX 会收拾你的二进制文件,这使得它更难反编译开箱。从技术上讲这是可能的解包和再编译,但它会提高标准了一下。假设你是一个香草用户操作系统上运行没有一个整体很多你可以做,以防止反编译,而不使用肮脏的把戏。

如果你真的想要把它打乱了,你需要一个单独的程序去做。作为一名开发人员,你写在最干净,最可读的形式你的代码。编译后运行单独的应用程序做了模糊处理。你可以购买这些应用中约100K $。

如果你的目的是阻止被逆转工程的代码,可能会工作。如果你的意图是从破解安全阻止别人便独自模糊不会阻止攻击者。在某些时候,有一个是/否的决定,他们并不需要了解的代码,发现也没有规避它。

微小C编译器修改,以产生混淆代码: http://blogs.conus.info/node/58

要为这里的答案一定的理论支持:2001年巴拉克等。人证明程序混淆是不可能在一般

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top