几个ida python脚本的实战例子
在使用ida工具进行逆向分析时,有时需要用到ida python脚本来帮助我们分析程序,接下来分享几个实战例子供大家学习。例子1:遍历程序中所有的函数并输出程序的起始地址和函数名
ea = ScreenEA()
for function_ea in Functions(SegStart(ea), SegEnd(ea)):
print hex(function_ea), GetFunctionName(function_ea)
例子2:循环遍历所有段并逐字节获取它们的数据
segments = dict()
for seg_ea in Segments():
data = []
for ea in range(seg_ea, SegEnd(seg_ea)): #遍历段内每个地址
data.append(chr(Byte(ea))) #获取字节及字节对应的字符
segments = ''.join(data) #赋值段中的数据
for seg_name, seg_data in segments.items(): #输出段名及段中数据大小
print seg_name, len(seg_data)
例子3:输出代码段中的指令,并统计指令数量
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=memories.get(flag,0)+1 #统计指令个数
all=map(lambda x:(x,x),memories.items())
all.sort() #排序
for pri,sed in all:
print pri,sed
例子4:该例子遍历所有函数,并查找所有对每个函数执行的调用,引用将存储在两个字典中。
from sets import Set
ea=ScreenEA()
Par=dict()
son=dict()
for fun in Functions(SegStart(ea),SegEnd(ea)):#遍历函数
f_name=GetFunctionName(fun)
Par=Set(map(GetFunctionName,CodeRefsTo(fun,0))) #创建一个集合,其中包含调用(引用)的所有函数的名称
for fun_son in CodeRefsTo(fun,0): #遍历所有的引用
fname_son=GetFunctionName(fun_son) #获取引用函数的名称
son=son.get(fname_son,Set())
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,[])))
感谢大佬了 很有用,谢谢 对我很有用,谢谢 python脚本这么厉害吗?看来学习python还是很有用的 谢谢大侠分享。 多谢楼主分享
页:
[1]