本文来源吾爱破解论坛
在使用IDA工具进行逆向分析时,有时需要用到ida python脚本来帮助我们分析程序,接下来分享几个实战例子供大家学习。
例子1:遍历程序中所有的函数并输出程序的起始地址和函数名
[Python] 纯文本查看 复制代码
ea = ScreenEA() for function_ea in Functions(SegStart(ea), SegEnd(ea)): print hex(function_ea), GetFunctionName(function_ea)
例子2:循环遍历所有段并逐字节获取它们的数据
[Python] 纯文本查看 复制代码
segments = dict() for seg_ea in Segments(): data = [] for ea in range(seg_ea, SegEnd(seg_ea)): #遍历段内每个地址 data.append(chr(Byte(ea))) #获取字节及字节对应的字符 segments[SegName(seg_ea)] = ''.join(data) #赋值段中的数据 for seg_name, seg_data in segments.items(): #输出段名及段中数据大小 print seg_name, len(seg_data)例子3:输出代码段中的指令,并统计指令数量
[Python] 纯文本查看 复制代码
memories=dict() for seg in Segments(): #遍历所有的段 if SegName(seg)=='.text': for head in Heads(seg,SegEnd(seg)): #遍历所有指令,head为地址 if isCode(GetFlags(head)): #判断是否为指令 flag=GetMnem(head) #获取汇编指令 print "flag ",flag memories[flag]=memories.get(flag,0)+1 #统计指令个数 all=map(lambda x:(x[1],x[0]),memories.items()) all.sort() #排序 for pri,sed in all: print pri,sed
例子4:该例子遍历所有函数,并查找所有对每个函数执行的调用,引用将存储在两个字典中。
[Python] 纯文本查看 复制代码
from sets import Set ea=ScreenEA() Par=dict() son=dict() for fun in Functions(SegStart(ea),SegEnd(ea)): #遍历函数 f_name=GetFunctionName(fun) Par[f_name]=Set(map(GetFunctionName,CodeRefsTo(fun,0))) #创建一个集合,其中包含调用(引用)的所有函数的名称 for fun_son in CodeRefsTo(fun,0): #遍历所有的引用 fname_son=GetFunctionName(fun_son) #获取引用函数的名称 son[fname_son]=son.get(fname_son,Set()) son[fname_son].add(f_name); #将当前函数添加到函数列表中 functions=Set(Par.keys()+son.keys()) #获取所有函数的列表 for per in functions: print "%d %s %d" % (len(Par.get(per,[])),per,len(son.get(per,[])))
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: python利器--迭代器
- 下一篇: 【笔记】python语句十大优雅写法