整理了最近用到的IDA Python的API,刚刚才发现在IDA Python在IDA7.4及以后做了改动,官网上有API的说明,所以我都使用的是新的API,它们在IDA 6.x-7.3以及7.4、7.5上都适用。
参数
在脚本中使用时,不会显式的报告错误信息,因此可以输出到log中,方便调试。1
2
3
4command = "{0} -L{1} -A -S{2} {3}".format(ida_path, log_path, script_path, bin_path)
print(command)
p = subprocess.Popen(command)
p.wait()
参数说明:1
2
3
4-L:日志路径
-A:让ida自动运行,不需要人工干预,在处理的过程中不会弹出交互窗口
-c:参数会删除所有与参数中指定的文件相关的数据库,并且生成一个新的数据库。
-S:参数用于指定ida在分析完数据之后执行的idc脚本,该选项和参数之间没有空格,并且默认搜索目录为ida目录下的idc文件夹。
指令
1 | #对ea所在地址进行反汇编,得到汇编指令,flags:combination of the GENDSM_ flags, or 0 |
基本块
1 | f_blocks = idaapi.FlowChart(idaapi.get_func(ea), flags=idaapi.FC_PREDS) #获取start_ea所在函数的所有基本块,可以通过遍历f_blocks中的基本块得到每个基本快的信息 |
函数
1 | #获取函数起始地址 |
段
1 | #获取一个段的起始地址 |
其他
获取ea所在地址的1、2、4、8字节机器码:
1
2
3
4idc.get_wide_byte(ea)
idc.get_wide_word(ea)
idc.get_wide_dword(ea)
idc.get_qword(ea)获取processor name:
1
ida_ida.inf_get_procname()
设置processor type:
1
2
3
4
5
6
7
8
9
10
11
12'''
@param level: the power of request:
- SETPROC_COMPAT - search for the processor type in the current module
- SETPROC_ALL - search for the processor type in all modules
only if there were not calls with SETPROC_USER
- SETPROC_USER - search for the processor type in all modules
and prohibit level SETPROC_USER
- SETPROC_FATAL - can be combined with previous bits.
means that if the processor type can't be
set, IDA should display an error message and exit.
'''
idaapi.set_processor_type(processor, level)获取指定数量的bytes
1
idc.get_bytes(ea,size)
参考
https://www.hex-rays.com/products/ida/support/ida74_idapython_no_bc695_porting_guide.shtml
https://www.hex-rays.com/products/ida/support/idapython_docs/idc-module.html
https://d1nn3r.github.io/2019/06/10/IDAPython/