如何通过 Python API 使用 Hex Rays 进行反编译?

逆向工程 艾达 蟒蛇 Python 六线谱 idapro-sdk
2021-07-07 17:01:38

如果我有大量文件并且我想在它们上运行十六进制射线以产生 C 输出 - 我可以在 python 中这样做吗?

  • 我看到有 IDA Python
  • 我看到 Hex-rays 有一个 C++ SDK

是否有python Hex-rays API?

4个回答

是的。较新版本的 IDA 具有针对 Hex-Rays 反编译器的官方绑定。
最初,Python 绑定是由EiNSTeiN围绕 Hex-Rays Decompiler SDK API编写的后来它被合并到了 IDAPython 中。

您可以IDAPython 文档的ida_hexrays下找到文档
示例可以在 IDAPython存储库中找到检查以“ vds开头的脚本

您可以查看IDA Batch Decompile插件,正如作者所说,该插件旨在批量反编译文件夹中的文件:

IDA Batch Decompile是 Hex-Ray 的 IDA Pro 的一个插件,它增加了批量反编译多个文件及其导入的能力,并在伪代码 .c 文件中添加了附加注释(外部参照、堆栈变量大小)

请注意,这是一个正在进行的项目,因此您可能会遇到一些错误。

这取决于您使用的 IDA 版本。7.0 版(和 AFAIR 6.9 版)具有ida_hexrays python 模块,它具有函数decompiledecompile_many. 如果我没记错的话,旧的 IDA 版本在idaapi模块中有这些功能,这些功能已经在 IDA 6.6 中引入了。

嗯,idapython的github上有一些例子,参见idapyhton/examples/vds1.py,你可以得到一个演示。

import idaapi
f=idaapi.get_func(ea)
cfunc=idaapi.decompile(f)

我已经在 ida pro 6.8 上试过了

感谢所有的答案。最后,由于一些许可限制,我使用了 retdec。我无法分享所使用的确切代码,但这对其他人也可能有用:

Docker-IDA - https://github.com/intezer/docker-ida - 可以很容易地更改为在 HexRays 上工作

那么像下面这样的命令可能会有用:

['/ida/idat','-Ohexrays:outfile:ALL','-A',文件夹 + 'input.bin'])

['mono','/dnSpy/dnSpy.Console.exe',文件名,'-o', outdir]

['/retdec/bin/decompile.sh','-l','py',文件名]