梦幻的彼岸 发表于 2024-3-14 11:35:04

[IDA使用技巧]#008: 引擎下的批量处理模式

翻译:梦幻的彼岸
原文地址:https://hex-rays.com/blog/igor-t ... ode-under-the-hood/上次我们简单介绍了批量处理模式,但基本功能并不总是足够的,所以我们来讨论一下如何自定义它。基本用法概括地说,可以使用此命令行调用批量处理模式:
1
ida -B -Lida.log <other switches> <filename>


IDA 将加载文件,等待分析结束,并将完整反汇编写入<filename>.asm工作原理事实上,-B是-A -Sanalysis.idc的简写:

[*]-A:启用自动模式(使用默认选项回答所有查询)。
[*]-Sanalysis.idc:加载文件后运行脚本analysis.idc。

您可以在 IDA install 的idc子目录中找到analysis.idc。在 IDA 7.5 中,它看起来如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static main()
{
    // turn on coagulation of data in the final pass of analysis
    set_inf_attr(INF_AF, get_inf_attr(INF_AF) | AF_DODATA | AF_FINAL);
    // .. and plan the entire address space for the final pass
    auto_mark_range(0, BADADDR, AU_FINAL);
    msg("Waiting for the end of the auto analysis...\n");
    auto_wait();
    msg("\n\n------ Creating the output file.... --------\n");
    auto file = get_idb_path() + ".asm";
    auto fhandle = fopen(file, "w");
    gen_file(OFILE_ASM, fhandle, 0, BADADDR, 0); // create the assembler
    file
    msg("All done, exiting...\n");
    qexit(0); // exit to OS, error code 0 - success
}



因此,要修改批量处理模式的行为,您可以
[*]要么修改标准analysis.idc
[*]或使用-S<myscript.idc>指定不同的脚本
例如,要输出 LST 文件(其中包括地址前缀),请更改gen_file调用:

1
gen_file(OFILE_LST, fhandle, 0, BADADDR, 0);


批量反编译
如果你有目标文件架构的反编译器,也可以在批处理模式下运行。
例如,反编译整个文件:

1
ida -Ohexrays:outfile.c:ALL -A <filename>


只反编译函数main:

1
ida -Ohexrays:outfile.c:main -A <filename>


这使用了反编译器插件的内置功能,其工作原理与analysis.idc脚本类似(等待自动分析结束,然后将指定函数反编译到outfile.c)。自定义批量反编译如果默认功能不够,可以编写一个插件,通过C++ API 驱动反编译器。不过,要编写脚本,使用 Python 可能更方便。与 IDC 类似,Python 脚本也可以使用-S选项,在加载文件后自动运行。
本帖附有一个示例脚本。使用方法如下:
1
ida -A -Sdecompile_entry_points.py -Llogfile.txt <filename>


加快批量处理速度在迄今为止的示例中,我们一直在使用 IDA 的完整图形用户界面版本ida可执行文件。尽管在批处理模式下用户界面实际上并不显示,但它仍需要加载和初始化所有依赖的用户界面库,这可能会花费不可忽略的时间。因此,使用文本模式可执行文件(idat)通常更好,因为它使用轻量级文本模式用户界面。不过,即使在批处理模式下,它仍然需要终端。如果需要在没有终端的情况下运行(例如在后台运行或从守护进程运行),可以使用以下方法:
[*]设置环境变量TVHEADLESS=1
[*]重定向输出
例如
1
TVHEADLESS=1 idat -A -Smyscript.idc file.bin >/dev/null &


下载decompile_entry_points.py

kml 发表于 2024-3-18 11:25:49

页: [1]
查看完整版本: [IDA使用技巧]#008: 引擎下的批量处理模式