我有一个我在IDA中拆解的二进制文件。因为IDA无法找到每个代码路径,所以我需要手动浏览并找到二进制文件中未探索的区域,并通过基本上重复Ctrl + U和C将它们转换为代码。这显然非常耗时。
有没有办法自动查找未探测区域并尝试将它们转换为代码?
答案 0 :(得分:2)
你可以自动找到未探索的区域并将它们转换为代码,但是这样做时应该小心,因为我相信你知道,很多未探索的区域都不是有效的代码。
根据二进制文件,首先打印.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&gt;来运行它。 Python命令......并粘贴上面的代码。它会将结果打印到输出窗口,您可以单击任何打印的地址跳转到反汇编中的相应区域。
如果您发现应该定义为代码的类似未探测地址的大型重复部分,则可以修改上述脚本以将这些地址转换为代码。将地址定义为代码的函数是MakeCode()。
有关上述所有功能的粗略参考,您可以查看here。帮助索引偶尔也很有用。它的引用是IDA,IDA的原始内置脚本语言,但所有IDC函数的IDAPython等价物应该几乎相同。
答案 1 :(得分:2)
最后,我选择将二进制图像转换为ELF文件,并将二进制代码标记为可执行文件。
当我将这个ELF文件加载到IDA中时,ELF文件头告诉IDA它是一个代码部分,IDA开始使用自己的启发式方法尽可能自动地反汇编代码。
Here's the short script我曾经实现这一目标。