【问题标题】:Use of optimization in obfuscating C++ code在混淆 C++ 代码中使用优化
【发布时间】:2017-04-14 02:59:41
【问题描述】:

我一直在做一些混淆方面的研究,我想知道优化对于混淆代码的效果如何。

优化代码是否会从程序集中删除有助于对代码进行逆向工程的内容?

更一般地说,代码优化是如何使程序集更难理解的?一般的答案都可以,我只是想了解两者之间的相关性,如果有的话。

编辑:这不是给客户的,这是为了娱乐性的混淆和好奇

【问题讨论】:

  • 不是很有效。任何有能力的汇编程序员和/或逆向工程师在阅读优化代码方面都有经验,考虑到每个人都将编译器设置为为发布构建生成。更一般地说,混淆并不是非常有效。你所能期望的最好的结果就是减慢一个好的逆向工程师的速度,或者可能阻止一个脚本小子。如果你的应用程序值得破解,就会有人破解它。专注于让它值得破解,这也将使它值得有人为此付出代价。

标签: c++ optimization obfuscation


【解决方案1】:

在您向客户交付二进制可执行文件或库时,混淆 C++ 代码没有什么意义。

在解释性语言中通常使用混淆来阻碍逆向工程。然后这是由软件完成的,以便原始代码可读/可维护。

至于影响性能。混淆通常是给变量/函数随机和无意义的名称以及删除空格。这不会影响 C 编译的二进制文件。因此根本不会有任何区别。

【讨论】:

    【解决方案2】:

    代码混淆可能意味着不同的东西。通常,它是指使代码更难阅读或无法阅读的技巧。

    没有与优化特别相关的混淆结果。您可能正在考虑更简洁的代码,这些代码在某些情况下(或至少曾经)会使代码更难阅读和更有效地运行。但现在的编译器通常不是这种情况,而且与混淆确实无关。

    【讨论】:

    • 哎呀,如果你对源代码进行了足够好的混淆,那么在编译器完成优化时,你的代码可能更容易阅读。
    • 所以使用标志并没有什么特别的作用来使组装变得困难?当我查看调试时,它看起来有点奇怪,我很惊讶它并没有比我想象的有太大的不同!
    • @JayM。编译器将把源代码这个疯狂的、混淆的混乱解析成a syntax tree。一旦它有了树,它就会过滤谷壳,移动节点,否则会在树上强制执行一个合理的顺序,以便它可以使输出程序运行得更快。然后,随着树被转换为机器指令,事情会再次变得有点疯狂,但输出中会有不同的模式,熟悉处理器和编译器的人可以识别。
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 2013-03-24
    • 2018-08-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多