IDAPython常用api使用
- 1. 函数
-
- 1.1 获取函数的名称
- 1.2 获取函数起始地址
- 1.3 获取函数的反汇编代码
- 1.4 判断函数是否为库函数
-
-
- 九种返回值类型
-
- IDAPython批量处理脚本
ida pro 6.6版本 idapython 2.7.2
1. 函数
idautils.Functions列举出已知的函数,返回一个list对象,每个item是一个函数的首地址,
idc.GetFunctionName(func) 获取函数名称
1.1 获取函数的名称
import idautils
for func in idautils.Functions():
print hex(func),idc.GetFunctionName(func)
1.2 获取函数起始地址
import idautils
for func in idautils.Functions():
#print hex(func),idc.GetFunctionName(func)
func=idaapi.get_func(func)
start = func.startEA
end =func.endEA
print('start: 0x%x end:0x%x' %(start,end))
1.3 获取函数的反汇编代码
import idautils
for func in idautils.Functions():
print hex(func),idc.GetFunctionName(func)
func=idaapi.get_func(func)
start = func.startEA
end =func.endEA
#print('start: 0x%x end:0x%x' %(start,end))
cur_addr = start
while cur_addr <= end:
print hex(cur_addr), idc.GetDisasm(cur_addr) #获取反汇编指令
cur_addr = idc.NextHead(cur_addr, end) #读取下一条指令
1.4 判断函数是否为库函数
判断函数是否为库函数时,可以在静态分析时省略
idc.GetFunctionFlags(func)
返回函数类型, 有:FUNC_NORET、FUNC_FAR、FUNC_LIB、FUNC_STATIC、FUNC_FRAME、FUNC_USERFAR、FUNC_HIDDEN、FUNC_THUNK、FUNC_BOTTOMBP等
九种返回值类型
- FUNC_NORET ~~~~ 表示没有返回值的函数,值为0x1
- FUNC_FAR ~~~~ 很少见到,值为0x2
- FUNC_LIB ~~~~ 链接库函数,在做分析的时候经常可以忽略,值为0x4
- FUNC_STATIC ~~~~ 静态函数,值为0x8
- FUNC_FRAME ~~~~ 表示函数使用了结构指针ebp,值为0x10
- FUNC_USERFAR ~~~~ 很少见到,值为0x20
- FUNC_HIDDEN ~~~~ 隐藏函数,需要展开才能看见(不太懂),值为0x40
- FUNC_THUNK ~~~~ 跳转到其他函数的函数,一般只有一个jmp指令,值为0x80
- FUNC_BOTTOMBP ~~~~ 与FUNC_FRAME类似,该标志用于跟踪帧指针。它将识别帧指针等于堆栈指针的函数,值为0x100
#查找某种共操作数类型的指令
for func in idautils.Functions():
flags=idc.GetFunctionFlags(func)
#if flags & FUNC_LIB or flags & FUNC_THUNK:
#continue
dism_addr=list(idautils.FuncItems(func))
for line in dism_addr:
if idc.GetOpType(line,0) == o_phrase://o_reg o_mem
print("0x%x %s"%(line,idc.GetDisasm(line)))
IDAPython批量处理脚本
https://blog.csdn.net/qq_35056292/article/details/89421793