翻译:梦幻的彼岸
上次我们简单介绍了批量处理模式,但基本功能并不总是足够的,所以我们来讨论一下如何自定义它。 基本用法概括地说,可以使用此命令行调用批量处理模式: 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()[0:-4] + ".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>指定不同的脚本
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)通常更好,因为它使用轻量级文本模式用户界面。不过,即使在批处理模式下,它仍然需要终端。如果需要在没有终端的情况下运行(例如在后台运行或从守护进程运行),可以使用以下方法: 例如 1
| TVHEADLESS=1 idat -A -Smyscript.idc file.bin >/dev/null &
|
下载
|