我需要为两个 DLL 生成调用图并使用 IDApython 进行比较,它必须在命令行中自动执行。
如何生成并保存调用图并立即打开下一个DLL并生成并保存调用图然后进行比较?
我需要为两个 DLL 生成调用图并使用 IDApython 进行比较,它必须在命令行中自动执行。
如何生成并保存调用图并立即打开下一个DLL并生成并保存调用图然后进行比较?
正如@tmr232 所说,您可以使用Diphora,它会自动为您执行此操作。否则,如果您更喜欢命令行工具(顺便说一句,它不需要 IDA),您可以使用Pyew和gcluster.py脚本。
如果您更喜欢自己编写一些东西,请记住比较 2 个二进制文件不是一项微不足道的任务。也就是说,我将解释 gcluster.py 和 Diaphora 中 2 个二进制文件的调用图的比较是如何工作的:
比较调用图的另一种方法是遍历两个图并计算两个图之间的差异(考虑到您有某种方法可以确定二进制 A 中的函数 F 等于二进制 B 中的函数 F',这不是不重要的)。我不建议你这样做,除非解决如何这样做是你的问题/你想做什么。
我的 2 美分。
这是一个非常广泛的问题,由一些简单的问题组成。
如何从命令行操作 IDA?
根据此链接,您可以-S在自动分析完成后使用switch从命令行调用 IDA以运行特定脚本。您可以创建 shell 脚本以从命令行运行多个 ida 实例。
如何生成函数图并保存?
#not tested, beware of errors, use on your own risk
# if you find GDL format problematic you can use ODT format
# by replacing idaapi.CHART_GEN_GDL to idaapi.CHART_GEN_ODT
import idaapi
import idc
import idautils
for ea in idautils.Functions():
idc.GenFuncGdl("%s.gdl" % idc.GetFunctionName(ea), idc.GetFunctionName(ea), ea , idc.BADADDR, idaapi.CHART_GEN_GDL)
如何生成整个调用图?
很简单:
idc.GenCallGdl("z:\\callgdl.gdl", "TheTitle", CHART_GEN_GDL)
请注意使用 CHART_WINGRAPH 和 CHART_NOLIBFUNCS 作为标志的可能性。
如果你想使用的功能idaapi模块来代替,看idaapi.gen_simple_call_chart和idaapi.gen_complex_call_chart文档在这里。
如何比较调用图?
这取决于您究竟想从比较中得到什么。
希望能帮助到你。