调试器如何帮助人们查找有关程序如何执行某事的信息?

逆向工程 调试
2021-06-18 00:57:45

假设我想对解释某种数据类型的可执行文件进行逆向工程。我想看看程序如何干扰文件,以及存储了什么。在反编译不是一种选择的情况下,我还剩下反汇编和调试。如果使用反汇编,我将不得不查看 200,000 行汇编代码,这将相当乏味,尤其是如果我需要手动重新编写代码。

根据我使用gdb进行调试的经验,我所能做的就是查看线程何时被创建,并检查堆栈,这两者对我来说似乎都不是很有用。

我的调试方法不正确吗?如果是这样,那么您可以使用像gdb这样的调试器做什么,避免付费调试器或软件,以找出与我试图找到的信息类似的信息?为了定位,有人可以给我一个指针吗?

2个回答

99% 的 RE 正在弄清楚什么不适合 RE。

假设有 200k 行汇编 - 使用调试器可以快速将其缩小到实际处理您感兴趣的数据的几千行。尝试在系统调用上设置断点,如 open() 或 read() 以查看它何时与您的文件交互,并跟随数据被读入的缓冲区。

一旦找到数据进入程序的位置,静态分析就变得不那么令人生畏了。

了解文件格式的其他一些选项:

  • afl-analyze可以帮助您分析文件格式,假设您可以使用正常的 afl 检测来检测二进制文件。

  • 污点分析通常可以帮助您隔离对文件数据进行操作的指令。这里可以使用各种各样的工具,例如pandatritonangrmoflow中的 pintracer。