您当前的位置:首页 > 计算机 > 软件应用 > 反汇编工具

IDAPython精彩编程(1)

时间:09-03来源:作者:点击数:

IDAPython是运行于交互式反汇编器IDA的插件,用于实现IDA的Python编程接口。IDA在逆向工程领域具有广泛的应用,尤其是二进制文件静态分析,其强大的反汇编功能一直处于业内领先水平。IDAPython插件使得Python脚本程序能够在IDA中运行并实现自定义的软件分析功能,通过该插件运行的Python脚本程序可以访问整个IDA数据库,并且可以方便地调用所有IDC函数和使用所有已安装的Python模块中的功能。
  
1、列出当前PE文件中所有函数

for ea in Segments(): #遍历所有段

    for function in Functions(SegStart(ea), SegEnd(ea)): #遍历该段中所有函数

        print hex(function), GetFunctionName(function) #输出函数起势地址和函数名

2、 反汇编当前鼠标所在函数的所有指令

ea = ScreenEA() #获取鼠标当前位置

for inst in FuncItems(ea): #遍历本函数所有地址

    print hex(inst), GetDisasm(inst)  #输出每条指令及其地址
 

3、查看PE文件所有函数及其被调用情况

ea = ScreenEA() #鼠标当前位置

callers = dict()

for function_ea in Functions(SegStart(ea), SegEnd(ea)): #遍历所有函数

    function_name = GetFunctionName(function_ea) #获取函数名

    refs = CodeRefsTo(function_ea,0) #哪些函数调用了本函数

    refs = list(refs)

    if refs: #把结果保存到字典中

        callers[function_name] = set(map(GetFunctionName, refs))

for k, v in callers.items(): #输出结果

    print k, ':', v

 
4、查看当前函数调用了哪些函数

ea = ScreenEA()

for inst in FuncItems(ea):

    refs = list(CodeRefsFrom(inst, 0))

    if refs:

        print hex(inst), 'calling...', GetFunctionName(refs[0])  

5、统计PE文件中指令的出现频率

times = dict()

for seg_startEA in Segments():

    if SegName(seg_startEA)!='.text': #只考虑代码段

        continue

    for instEA in Heads(seg_startEA, SegEnd(seg_startEA)):

        if isCode(GetFlags(instEA)): #只考虑代码

            mnem = GetMnem(instEA)

            times[mnem] = times.get(mnem, 0)+1

times = sorted(times, key=lambda x: x[1], reverse=True) #按出现频率从高到低排序

for k, v in times: #输出结果

    print k, ':', v  

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门