IDAPython学习(二)
1、常用函数
ScreenEA()
获取IDA调试窗口中,光标指向代码的地址。通过这个函数,我们就能够从一个已知的点运行我们的脚本。
GetInputFileMD5()
返回IDA加载的二进制文件的MD5值,通过这个值能够判断一个文件的不同版本是否有改变。
2、段
在IDA中二进制文件被分为了不同的段,这些段根据功能分成了不同的类型(CODE、DATA、STACK、CONST、XTRN)。
一下的函数用于分析获得各种段信息。
FirstSeg()
访问程序中的第一个段。
NextSeg()
访问下一个段,如果没有就返回BADADDR。
SegByName(string SegmentName)
通过段名字返回段基址,举个例子,如果调用.text作为参数,就会返回程序中代码段的开始位置。
SegEnd(long Address)
通过段内的某个地址,获得段尾的地址。
SegStart(long Address)
通过段内的某个地址,获得段头的地址。
SegName(long Address)
通过段内的某个地址,获得段名。
Segments()
返回目标程序中的所有段的开始地址。
3、函数
循环访问程序中的所有函数,确定函数的范围,是脚本编程中会经常碰到的问题。下面函数对于处理函数非常有用。
Functions(long StartAddress, long EndAddress)
返回一个列表,包含了从StartAddress到EndAddress之间的所有函数。
Chunks(long FunctionAddress)
返回一个列表,包含了函数片段。每个列表项都是一个元组(chunk start, chunk end).
LocByName(string FunctionName)
通过函数名返回函数的地址。
GetFuncOffset(long Address)
通过任意一个地址,然后得到这个地址所属的函数名,以及给定地址和函数的相对位移。然后把这些信息组成字符串以
“名字+位移”的形式返回。
GetFunctionName(long Address)
通过一个地址,返回这个地址所属的函数。
4、交叉引用
找出代码和数据的交叉引用,在分析文件的执行流程时很重要,尤其是当我们分析感兴趣的代码块的时候,盲目的查找无意义字符
会让你有有一种想死的冲动。IDAPython提供了一大堆函数用于各种交叉引用,最常用的就是下面几种:
CodeRefsTo(long Address, bool Flow)
返回一个列表,告诉我们Address处代码被什么地方引用了,Flow告诉IDAPython是否要跟踪这些代码。
CodeRefsFrom(long Address)
返回一个列表,告诉我们Address地址上的代码引用何处的代码。
DataRefsTo(long Address)
返回一个列表,告诉我们Address处数据被什么地方引用了。常用于跟踪全局变量。
DataRefsFrom(long Address)
返回一个列表,告诉我们Address地址上的代码引用何处的数据。
5、Debugger Hooks
Debugger Hook是IDAPython提供的另一个非常酷的功能,用于Hook住IDA内部的调试器,同时处理各种调试事件。
虽然IDA一般不用于调试任务,但是当需要动态调试的时候,调用IDA内部调试器还是比外部的会方便很多。使用debugger hook
之前,先要看一个一个hook类,然后在类里头定义各种不同的处理函数。
class DbgHook(DBG_Hooks):
#Event handler for when the process starts
def dbg_process_start(self, pid, tid, ea, name, base, size):
return
#Event handler for process exit
def dbg_process_exit(self, pid, tid, ea, code):
return
#Event handler for when a shared library gets loaded def
def dbg_library_load(self, pid, tid, ea, name, base, size):
return
#Breakpoint handler
def dbg_bpt(self, tid, ea):
return
这个类包含了我们在创建调试脚本时,会经常用到的几个调试事件处理函数。安装Hook的方式如下:
debugger = DbgHook()
debugger.hook()
现在运行调试器,hook会捕获所有的调试事件,这样就能非常精确的控制IDA调试器。下面的函数在调试时候非常有用:
AddBpt(long Address) -----> 在指定的地点设置软件断点。
GetBptQty() --------------> 返回当前设置的断点数量。
GetRegVale(string Register) ----> 通过寄存器名获得寄存器值。
SetRegValue(long Value, string Register) ----> 设定寄存器的值。
IDAPython学习(二)的更多相关文章
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
- SpringMVC入门学习(二)
SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...
随机推荐
- Baker Vai LightOJ - 1071 (MCMF)
在个给出的矩阵从,从左上角走到右下角,然后再从右下角走到左上角,两次不能经过想同的点,每个点都有一个价值,问最大的价值是多少. 可以把原来的问题化简成从左上角走两条路到右下角,然后把价值加起来,然是这 ...
- [POI2008]KLO-Building blocks
题目描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次数的动作完成任 ...
- [NOI2010]超级钢琴(RMQ+堆)
小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负 ...
- QBXT Day2主要是数据结构(没写完先占坑)
简单数据结构 本节课可能用到的一些复杂度: O(log n). 1/1+1/1/.....1/N+O(n log n) 在我们初学OI的时候,总会遇到这么一道题. 给出N次操作,每次加入一个数,或者询 ...
- Ubuntu18.04 下 VirtualBox or VMWare 虚拟化问题
This host supports Intel VT-x, but Intel VT-x is disabled.Intel VT-x might be disabled if it has bee ...
- Java collection 容器
http://www.codeceo.com/article/java-container-brief-introduction.html Java实用类库提供了一套相当完整的容器来帮助我们解决很多具 ...
- JSF action actionListner 详解
https://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener actionLi ...
- 【洛谷P1903】数颜色
题目大意:给定一个长度为 N 的序列,每个点有一个颜色.现给出 M 个操作,支持单点修改颜色和询问区间颜色数两个操作. 题解:学会了序列带修改的莫队. 莫队本身是不支持修改的.带修该莫队的本质也是对询 ...
- 【CF131D】Subway
题目大意:给定一棵 N 个节点的基环树,求各个点到环的最小距离. 题解:除了找环的必须参数之外,对每个点维护一个 fa 即可. 代码如下 #include <bits/stdc++.h> ...
- 第五篇:数据备份、pymysql模块
http://www.cnblogs.com/linhaifeng/articles/7525619.html#_label3 一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们 ...