专栏首页Python小屋IDAPython精彩编程(1)

IDAPython精彩编程(1)

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

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python版的百钱买百鸡问题

    今天是圣诞节了,据说老外都会吃火鸡,为了应景,发个程序设计课程中的传统题目吧,顺祝所有朋友圣诞节快乐! 百钱买百鸡问题:假设大鸡5元一只,中鸡3元一只,小鸡1元...

    Python小屋屋主
  • Python使用numpy计算矩阵特征值、特征向量与逆矩阵

    Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵...

    Python小屋屋主
  • Python字典二次开发实现稀疏矩阵表示与简单计算

    问题描述:所谓稀疏矩阵是指,矩阵中大部分元素的值为0,只有少量非0元素。对于稀疏矩阵,如果存储所有元素的话,浪费空间较多,一般采取的方式是只存储非0元素及其位置...

    Python小屋屋主
  • 20个常问的面试问题

    我们都知道,面试前要先预想好主考官会问的问题,并准备谨慎而有条理地回答。事先有准备的人,表情和肢体语言比较笃定从容,且具备较好的回应能力。

    用户1093975
  • 「vue基础」新手入门篇(一)

    自从Facebook2013年推出React框架以来,基于UI组件的前端框架越来越流行,主要得益于组件的重用性,数据状态的管理等特性。

    前端达人
  • 「vue基础」新手快速入门篇(一)

    自从Facebook2013年推出React框架以来,基于UI组件的前端框架越来越流行,主要得益于组件的重用性,数据状态的管理等特性。

    前端达人
  • 面试官这样问怎么办?

    我们都知道,面试前要先预想好主考官会问的问题,并准备谨慎而有条理地回答。事先有准备的人,表情和肢体语言比较笃定从容,且具备较好的回应能力。

    battcn
  • (在模仿中精进数据可视化07)星球研究所大坝分布可视化

      在星球研究所最近的《10万座大坝的诞生!》一文中,作者们利用丰富的数据可视化手段对我国及世界大型水坝工程的发展分布情况进行了分析展示,而我尤其喜爱其中的一幅...

    Feffery
  • 想知道世界大坝分布情况吗?这篇可视化作品告诉你

    在星球研究所最近的《10万座大坝的诞生!》一文中,作者们利用丰富的数据可视化手段对我国及世界大型水坝工程的发展分布情况进行了分析展示,而我尤其喜爱其中的一幅作品...

    DataCharm
  • mysql注入高级篇2--sqli lab

    lonelyvaf

扫码关注云+社区

领取腾讯云代金券