使用 IDApython 从文件的函数调用图中获取 networkx 图?

逆向工程 艾达 蟒蛇 idapro-sdk ida插件
2021-07-07 19:43:18

有没有什么简单的方法可以使用 IDApython获取二进制程序函数调用图,然后将其转换为 networkx 图,而不是遍历每个函数并自己构建调用图?

基本上我想要一个调用图,我可以告诉哪些节点是库调用,哪些是本地节点,并且不包括库调用的函数(所以我不会深入研究嵌套库函数相互调用)

我试过 gen_simple_call_chart() 但有两个大问题:

  1. 生成的 DOT 文件中的库节点和本地节点之间没有区别(没有颜色或任何东西)

  2. CHART_IGNORE_LIB_FROM 不起作用,我不想包含由库调用调用的节点:(

例如,无论是 library 还是 local ,所有节点都是黑色的:

"205" [ label = "sub_40AF20", pencolor = black ];
"206" [ label = "ShellExecuteW", pencolor = black ];
1个回答

你可以通过调用生成的DOT格式的图形gen_flow_graph()CHART_GEN_DOT标志。

然后可以使用该from_pydot()函数将 DOT 文件导入到 networkx 中