IDA官网发布的每周技巧8----以批处理模式在后台运行IDA

hex-rays官方发布了一套《Igor的IDA每周技巧》系列文章,内容不错,故进行跟踪翻译,期望对大家有所帮助。

第8篇原文:Igor’s 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脚本

Analysis.idc脚本可以在IDA安装目录的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有反编译模式的插件,你也可以通过批处理模式进行反编译。

例如,要反编译整个文件:

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

只反编译main函数:

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

这个命令将调用反编译插件的内建功能,其行为与analysis.idc脚本类似(等待IDA完成自动分析,反编译特定函数并输出到outfile.c)。

自定义批处理模式进行反编译的行为

如果默认行为不够用,你可以通过写插件来触发自定义的反编译行为。

但是,使用Python脚本会更方便一些。与IDC类似,可以使用-S在文件加载完成后自动执行一个Python脚本。

在这篇文章后面我们附上了一个简单脚本。可以用如下命令使用它:

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

加速批处理模式运行速度

在之前的样本中,我们都是使用ida.exe,这是IDA的GUI版本程序。尽管在批处理模式下,界面不会真正显示,但仍然会加载所有图形库,这将花费很多时间。所以使用命令行形式的可执行程序idat.exe会更好。然而,就算使用命令行程序,还是会启动一个命令行终端,这还是会浪费一些时间。如果你连命令行终端的浪费都不想有,可以使用下面的方法让ida在后台或守护进程中运行:

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

例如:

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

欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值