我有一个要在 IDA 中反汇编的二进制文件。因为 IDA 无法找到每一个单独的代码路径,所以我需要手动遍历并找到二进制文件中未探索的区域,然后通过基本重复 Ctrl+U 和 C 将它们转换为代码。这显然非常耗时。
有没有办法自动找到未探索的区域并尝试将它们转换为代码?
我有一个要在 IDA 中反汇编的二进制文件。因为 IDA 无法找到每一个单独的代码路径,所以我需要手动遍历并找到二进制文件中未探索的区域,然后通过基本重复 Ctrl+U 和 C 将它们转换为代码。这显然非常耗时。
有没有办法自动找到未探索的区域并尝试将它们转换为代码?
最后,我选择将二进制映像转换为 ELF 文件,并将二进制代码标记为可执行。
当我将这个 ELF 文件加载到 IDA 中时,ELF 文件头告诉 IDA 这是一个代码段,IDA 开始使用自己的启发式方法尽可能多地自动反汇编代码。
这是我用来实现这一目标的简短脚本。
您可以自动找到未开发的区域并将它们转换为代码,但这样做时您应该小心,因为我相信您知道,许多未开发的区域将不是有效的代码。
根据二进制文件,首先打印 .text 部分中所有未探索区域的列表可能很有用。IDAPython 可以做到这一点,例如:
addr = SegByName(".text")
end = SegEnd(addr)
while addr < end and addr != BADADDR:
if isUnknown(GetFlags(addr)):
print "0x%08x" % addr
addr = NextHead(addr, BADADDR)
else:
addr = NextAddr(addr)
print "Done."
如果你安装了 IDAPython,你可以通过选择 File > Python command... 并粘贴上面的代码来运行它。它将结果打印到输出窗口,您可以单击任何打印的地址跳转到反汇编中的相应区域。
如果您发现应该定义为代码的类似未探索地址的大量重复部分,您可以修改上述脚本以将这些地址转换为代码。将地址定义为代码的函数是 MakeCode()。
有关上述所有功能的粗略参考,您可以查看此处。帮助索引有时也很有用。它的参考适用于 IDA 的原始内置脚本语言 IDC,但所有 IDC 函数的 IDAPython 等效项实际上应该是相同的。