我认为这可能与我尝试分析文件时遇到的错误有关,而我收到有关 PDB 文件的错误
我假设错误消息是“无法找到具有匹配 GUID [...] 的 PDB 文件“[...]”。如果是这样,这是因为您没有当前正在逆向工程的程序的 PDB 文件(包含调试信息的文件)。这是正常的,以防万一我会说。
TL;DR 我如何做到这一点,以便下面的图像不包含 thunk 函数,并且实际上以某种方式可读,因为它们看起来像 printf 函数。
这就是你作为逆向工程师需要做的实际工作:开始了解这些函数的作用并设置名称(和数据类型)。
除了在 MSIL 或 Java 等情况下,编译后的二进制文件中存在大量元数据,Ghidra 无法自动确定函数名称。对于变量来说,更糟糕的说法是:在许多体系结构中,机器代码中甚至没有变量的概念。
Ghidra 有一些启发式方法可以帮助您进行手动过程:当它作为前缀时thunk_
,例如,这意味着有问题的函数被评估为简单地将控制权传递给另一个目标函数。或者对 API 函数的调用system
已经正确命名。
好消息是您已经开始了一些工作:基于函数参数或基于您的动态分析,您已经猜到thunk_FUN_00d83950
可能是printf
. 因此,右键单击要重命名的函数,然后单击“重命名函数”。还要确保注意菜单中列出的热键 - 你会非常需要它。
其他功能将需要额外的分析工作:双击它们并尝试弄清楚它们的作用。或者 - 正如您之前所做的那样,这是一种非常强大的技术 - 将您的静态逆向工程工作与动态分析相结合。
更正一些函数名称后,您可能还想更改它们的类型。再次右键单击它,选择“编辑函数签名”,然后在出现的窗口中进行调整。如果printf
具有可变参数,则可能需要选择右侧的“可变参数”。