hex-rays官方发布了一套《Igor的IDA每周技巧》系列文章,内容不错,故进行跟踪翻译,期望对大家有所帮助。
第七篇原文:Igor’s tip of the week #07: IDA command-line options cheatsheet
大多数用户通常都是单独使用IDA,并且都是使用用户界面来配置各种选项。其实可以通过命令行来给IDA传递一些参数,这会使一些配置过程自动完成,不再需要与用户交互。
Tips:下面例子中的ida可以被替换,要使用64位程序替换为ida64,要使用控制台UI替换为idat(idat64)。
IDA打开文件的简单方式
ida <filename>
<filename>可以是你想分析的一个新文件,也可以是一个现有的数据库(idb/i64)。这个用法和在界面中使用File->Open打开一个文件,或者将一个文件拖到IDA图标上的效果是一样的,你还是需要人工配置文件加载对话框等IDA弹出的对话框里的选项,但能跳过最初的启动画面。
Tips:如果你还使用了其它命令行选项,要放在filename之前,不然会被忽略。
打开文件并自动选择加载器
ida -T<prefix> <filename>
<prefix>是描述加载信息的前缀,和文件加载对话框中的描述方式一致,IDA根据这些描述信息选择合适的加载器。例如,要加载一个.NET可执行文件,IDA使用如下选项:
- Microsoft.Net assembly
- Portable executable for AMD64 (PE)
- MS-DOS executable (EXE)
- Binary file
这几个选项对应的-T命令行参数为:
- -TMicrosoft
- -TPortable
- -TMS
- -TBinary
如果前缀选项的内容中包含空格,需要使用双引号括起来。例如,要加载Mach-O文件的第一个切片:
ida "-TFat Mach-O File, 1" file.macho
如果要加载的是一个压缩格式的文件,如ZIP,可以在冒号后面指定加载压缩文件中的哪个被压缩成员。例如,要加载apk里的主dex文件:
ida -TZIP:classes.dex:Android file.apk
但加载apk最好还是使用apk加载器(特别对于多dex的apk文件):
ida -TAPK file.apk
如果在命令行中包含了-T选项,最开始弹出的加载对话框就会被跳过,IDA直接使用特定加载器加载目标文件。加载对话框以外的其它对话框还是会弹出。
自动接受所有提示信息、消息、警告
有时,你想接受所有默认设置,直接加载目标文件。这时你可以使用-A选项:
ida -A <filename>
使用这个命令,IDA不会弹出任何对话框,直接接受所有选项的默认选择。
Tips:使用这个方式时,IDA加载目标文件后,仍然不会显示任何交互式对话框,甚至是重命名和增加注释对话框。要恢复交互模式,在底部的IDC或Python控制台输入batch(0)语句并执行。
自动反汇编
这个命令行选项是上一个的扩展,使用-B开关:
ida -B <filename>
这个命令会使用所有默认选项加载目标文件,自动分析,输出反汇编结果到<filename>.asm文件,然后保存数据库并退出IDA。
二进制文件选项
当加载纯二进制文件(raw binary)时,IDA无法根据文件格式(ELF/PE)识别任何元数据(metadata)。特别是无法从文件格式中提取出处理器类型和加载地址信息,这就必须要用户提供。要加速工作过程,可以在命令行选择中指定这两个信息:
ida -p<processor> -B<base> <filename>
<processor>是IDA支持的一种处理器类型,某些处理器还支持在冒号后面增加额外选项。
<base>是16进制的加载基址。这里的地址有点特殊,需要删除末尾的一个0。
例如:
从线性地址0xBFC00000加载一个大端序的MIPS固件:
ida -pmipsb -bBFC0000 firmware.bin
加载一个映射在0x4000的Cortex-M3固件:
ida -parm:ARMv7-M -b400 firmware.bin
记录日志
当单独(autonomously)使用IDA时,你将丢失通常会打印到输出窗口的很多信息,这些信息可能包含重要的消息、错误、警告。如果想保留这些消息到一个日志文件中,可以使用-L选项:
ida -B -Lida_batch.log <filename>
欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。