充满 thunk 功能的 ghidra

ghidra full of thunk functions

我正在尝试在 ghidra 中做一个 crackme。我已经能够找到答案,但我想知道如何在使用调试器并查看字符串时“正确地”完成此操作。在下图中,您可以明显看到有很多 thunk 函数,但老实说,它们看起来就像 printf 函数。我不知道如何修复它,以便我可以获得实际可读的函数名称,或者如果没有办法。

我认为这可能与我在尝试分析文件时遇到的错误有关,我收到有关 PDB 文件的错误。我尝试重新编译 msdia140.dll,因为我使用的是 visual studio 2019,但我在尝试时遇到了构建错误。

TL;DR 我该怎么做才能使下面的图像不充满 thunk 函数,并且实际上可以以某种方式阅读,因为它们看起来像 printf 函数。

I assumed it may have had something to do with an error I get when I try to analyse the file which I get an error about the PDB file

我假设错误消息是“无法找到具有匹配 GUID [...]”的 PDB 文件“[...]”。如果是这样,这是因为您没有当前正在逆向工程的程序的 PDB 文件(包含调试信息的文件)。如果我说的是 crackme,这是正常的。

TL;DR how do I make it so that the image below isn't full of thunk functions and is actually readable in a way as those look like printf functions.

好吧,这就是您作为逆向工程师需要做的实际工作:开始了解这些函数的作用并设置名称(和数据类型)。

除了像 MSIL 或 Java 这样的情况,编译的二进制文件中存在大量元数据,Ghidra 无法自动确定函数名称。对于变量来说,情况稍差一些:在许多体系结构中,机器代码中甚至没有变量的概念。

Ghidra 有一些启发式方法可以帮助您完成手动过程:当它以 thunk_ for example 为前缀时,这意味着所评估的函数只是将控制权传递给另一个目标函数。或者对 API 函数 system 的调用已正确命名。

好消息是您已经开始了一些工作:根据函数参数或根据您的动态分析,您已经猜到 thunk_FUN_00d83950 可能是 printf。因此 right-click 在您要重命名的函数上单击“重命名函数”。还要确保注意菜单中列出的 hot-key - 您将需要它很多

其他功能将需要额外的分析工作:双击这些功能并尝试弄清楚它们的作用。或者 - 正如您之前所做的那样,这是一项非常强大的技术 - 将您的静态逆向工程工作与动态分析相结合。

更正某些函数 names 后,您可能还想更改它们的 types。 Right-Click 再说一遍,select“编辑函数签名”,然后在出现的 window 中进行调整。如果 printfvariadic arguments,可能需要 select 右边的“Varargs”。