【问题标题】:ghidra full of thunk functionsghidra 充满了 thunk 功能
【发布时间】:2020-11-26 00:42:12
【问题描述】:

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

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

TL;DR 我该如何做到这一点,以使下面的图像不包含 thunk 函数,并且实际上可以以某种方式读取,因为它们看起来像 printf 函数。

【问题讨论】:

    标签: reverse-engineering ghidra


    【解决方案1】:

    我认为这可能与我在尝试分析文件时遇到的错误有关,但我收到有关 PDB 文件的错误

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

    TL;DR 我该如何做到这一点,以使下面的图像不包含 thunk 函数,并且实际上可以以某种方式读取,因为它们看起来像 printf 函数。

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

    除了在 MSIL 或 Java 等情况下,编译后的二进制文件中存在大量元数据,Ghidra 无法自动确定函数名称。对于变量来说,更糟糕的说法是:在许多架构中,机器代码中甚至没有变量的概念。

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

    好消息是您已经开始了一些工作:基于函数参数或基于您的动态分析,您已经猜到thunk_FUN_00d83950 可能是printf。因此,右键单击要重命名的函数,然后单击“重命名函数”。还要确保注意菜单中列出的热键 - 您将需要它很多

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

    更正一些函数名称后,您可能还想更改它们的类型。再次右键单击它,选择“编辑函数签名”,然后在出现的窗口中进行调整。对于printf,其中有variadic arguments,可能需要选择右侧的“可变参数”。

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 2019-01-22
      • 2019-08-08
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多