调试构建如何简化逆向工程?

dan*_*nny 8 c++ debugging reverse-engineering

这里的一些答案表明,调试信息可以更容易地对软件进行逆向工程.当我使用Visual C++并使用调试信息分发可执行文件但没有其他文件(.pdb)时,它是否包含任何有趣的东西?

我用十六进制编辑器查看了可执行文件,发现没有像符号名称那样,现在我假设.exe文件只链接到.pdb文件中的信息,对吧?

你知道它是否包含

  • 变量名?
  • 功能/会员名称?
  • 行号?
  • 什么有趣的?

Mar*_*tos 9

调试版本倾向于生成可以轻松与高级语言结构相关联的输出.您可以通过查看机器代码来识别变量,测试,循环等.您不会获得变量的名称,但这通常是逆向工程中最不重要的考虑因素.

优化代码,OTOH,重新排列指令,展开循环,重用多个变量的槽,在函数之间共享代码块,内联小函数等等,使得识别原始意图变得更加困难.即使您拥有代码,它也会使调试变得更加困难,因为当前行标记通常非常误导,并且变量往往会消失或显示随机废话.

但这些都不会使逆向工程变得不可能.梳理意义只是更多的工作.


Aby*_*byx 5

使用调试信息构建不是"调试构建".

当定义_DEBUG符号时,"Debug build"就是这样的构建.如果是这样,有很多字符串可用于逆向工程(断言等).

因此,您可以使用.pbd中的调试信息进行Release构建,并且反编译程序将像没有调试信息一样困难.