首页
社区
课程
招聘
[IDA使用技巧]#008: 引擎下的批量处理模式
2024-3-14 11:25 1325

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

2024-3-14 11:25
1325

翻译:梦幻的彼岸

原文地址:https://hex-rays.com/blog/igor-tip-of-the-week-08-batch-mode-under-the-hood/

上次我们简单介绍了批量处理模式,但基本功能并不总是足够的,所以我们来讨论一下如何自定义它。

基本用法

概括地说,可以使用此命令行调用批量处理模式:

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 中,它看起来如下:


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>指定不同的脚本

例如,要输出 LST 文件(其中包括地址前缀),请更改gen_file调用:


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

批量反编译


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

例如,反编译整个文件:

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

只反编译函数main

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

这使用了反编译器插件的内置功能,其工作原理与analysis.idc脚本类似(等待自动分析结束,然后将指定函数反编译到outfile.c)。

自定义批量反编译

如果默认功能不够,可以编写一个插件,通过C++ API 驱动反编译器。不过,要编写脚本,使用 Python 可能更方便。与 IDC 类似,Python 脚本也可以使用-S选项,在加载文件后自动运行。

本帖附有一个示例脚本。使用方法如下:

ida -A -Sdecompile_entry_points.py -Llogfile.txt <filename>

加快批量处理速度

在迄今为止的示例中,我们一直在使用 IDA 的完整图形用户界面版本ida可执行文件。尽管在批处理模式下用户界面实际上并不显示,但它仍需要加载和初始化所有依赖的用户界面库,这可能会花费不可忽略的时间。因此,使用文本模式可执行文件(idat)通常更好,因为它使用轻量级文本模式用户界面。不过,即使在批处理模式下,它仍然需要终端。如果需要在没有终端的情况下运行(例如在后台运行或从守护进程运行),可以使用以下方法:

  1. 设置环境变量TVHEADLESS=1
  2. 重定向输出

例如

TVHEADLESS=1 idat -A -Smyscript.idc file.bin >/dev/null &

下载

decompile_entry_points.py




[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回