如何在 IDA Pro 中获取 MakeFunction() 失败的地址

逆向工程 艾达 蟒蛇 去混淆
2021-07-10 19:32:16

我正在分析包含导致虚拟指令的代码路径的混淆代码。这些伪指令会阻止 IDA 创建函数。但是,我需要这些函数来做一个与 Bindiff 匹配的函数。

当我手动修补这些函数时,“Make Function”功能的输出(通过按“p”)包含它遇到问题的地址。此信息对于查明下一条伪指令非常有帮助。

为了加快这个过程,我开始编写一个 Python 脚本。我设法识别包含虚拟指令的函数的起始地址。但是,与 IDA Pro UI 不同,API 函数 MakeFunction() 仅返回 true 或 false 以指示(不)成功创建。

我试图通过“跳转到下一个未探索的”等其他方式获得与输出窗口中报告的地址相同的地址,但没有运气。我发现的唯一另一种方法是使用“跳转到问题”选项,我也只能在 UI 中访问该选项。

有没有办法在 Python 中获取 MakeFunction() 失败的地址,就像在 UI 中一样?

1个回答

解决方案:

find_func_bounds()诀窍(请参阅 SDK 文档)。这就是它的工作原理:

pfn = func_t()
find_func_bounds(ea, pfn, FIND_FUNC_NORMAL)
pfn.endEA

如果返回值find_func_bounds()FIND_FUNC_UNDEF(0),pfn.endEA包含在那里遇到未知字节的地址。