前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IDAPython精彩编程(1)

IDAPython精彩编程(1)

作者头像
Python小屋屋主
发布2018-04-16 13:56:46
1.9K0
发布2018-04-16 13:56:46
举报
文章被收录于专栏:Python小屋Python小屋

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档