在 IDA Pro 中自动生成调用图

逆向工程 艾达 蟒蛇 idapro插件
2021-07-09 09:59:23

我想从 Ida pro 生成调用图,但我想自动生成。我写了这两个脚本,但它们不起作用。你能帮我解决什么问题吗?

1:

#include ida.idc;
#include idc.idc;
static main()
{
cur = MinEA()
end = MaxEA()
auto str_gdlpath;
str_gdlpath = GetIdbPath();
str_gdlpath = substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".gdl";
GenCallGdl(str_gdlpath, "Call Gdl",cur, end, CHART_WINGRAPH);
Message("Gdl file have been saved to %s",str_gdlpath);
}

2:

#include ida.idc;
#include idc.idc;
static main ()
 {
 auto str_gdlpath;
 str_gdlpath = GetIdbPath ();
 str_gdlpath = substr (str_gdlpath, 0, strlen (str_gdlpath) - 4) + ".gdl";
 GenCallGdl (str_gdlpath, "Call Gdl", CHART_WINGRAPH);
 Message ("Gdl file have been saved to% s", str_gdlpath);
 } 

我用来运行的命令是:

./idal -c -A -Sgdlscript.idc test.exe

是否也可以在 IDAPython 中执行此操作?

2个回答

IDC 的大部分功能都是由 IDA 的idc.py模块提供的您可以在此处阅读文档

以下代码的工作方式应与您的 IDC 相同:

import idc

cur = idc.MinEA()
end = idc.MaxEA()
path = idc.GetIdbPath().rsplit('.')[0] + '.gdl'
idc.GenCallGdl(path, 'Call Gdl', idc.CHART_GEN_GDL)
idc.Message('Gdl file has been saved to {}\n'.format(path))

以下对我有用:

#include "ida.idc";
#include "idc.idc";   
static main()
{
    auto retval;
    auto cur;
    auto end;
    auto str_gdlpath;
    cur = MinEA();
    end = MaxEA();
    //str_gdlpath = GetIdbPath();
    //str_gdlpath = substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".gdl";
    str_gdlpath = "D:\\temp\\callgraph";
    retval = GenFuncGdl(str_gdlpath, "Call Gdl",cur, end, CHART_NOLIBFUNCS);

    //necessary for ida to exit in batch mode
    exit(0);
}

和命令行:

D:\temp>"C:\Program Files (x86)\IDA\idaw" -c -A -SD:\temp\autogengraph2.idc D:\temp\testdll.dll > NUL

要在不显示 ida 的情况下运行批处理,尾随 NUL 是必需的。请注意,在 idc 脚本中 ida 必须由 exit() 终止,以便脚本返回到命令提示符。

GenCallGdl 函数也可能工作,但文档是错误的,因为该函数使用的参数少于 Ida 帮助指示的参数。

在输出文件中,会自动附加 .gdl 扩展名。由于我没有独立的 .gdl 阅读器,如果输出文件显示正确的图形,我就无法控制它。

作为调试此类事情的一般规则,首先让 Ida 在运行 cmdline 批处理时出现(即没有 -c -A 参数),以便能够看到其错误。当一切正常时,静默运行它。