IDA Pro 使用 Python 而不是 GUI 菜单导出 C 样式数组

逆向工程 艾达 蟒蛇 大批
2021-06-12 12:33:59

IDA 专业版 6.95。从菜单中,我可以使用 Edit... Export data... C unsigned char array (hex)。

我想在 Python 脚本中执行此操作,而无需重写已经有效的内容。

我一直在寻找一种方法来查找我通过 GUI 菜单执行的命令列表,但导出数据不是 IDC 文件中出现的那种东西。

1个回答

因为这是一个相对基本的功能,所以没有从 IDAPython 调用该命令的内置方法。您可以使用一些 Qt 技巧来伪造用户单击的 GUI 菜单,但这似乎太费力了。

对我来说,似乎最简单和最干净的解决方案是简单地调用idaapi.get_many_bytes以获取您在转储中感兴趣的数据缓冲区,然后根据需要对其进行格式化。

例如,以下代码片段将二进制数据输出为十六进制字符串:

buf = idaapi.get_many_bytes(start, end)
buf.encode('hex')

或者获得一个类似 c 的数组:

buf = idaapi.get_many_bytes(start, end)
buf = buf.encode('hex')
two_hex_char_seq = map(operator.add, buf[::2], buf[1::2])
c_array = "{0x" + ", 0x".join(two_hex_char_seq) + "}"

这将给出类似于以下内容的输出:

{0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30}
其它你可能感兴趣的问题