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学习(二)的更多相关文章

  1. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  2. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  3. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  4. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  5. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  6. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  7. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  8. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  9. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer

      DjangoRestFramework学习二之序列化组件.视图组件   本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...

  10. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

随机推荐

  1. LOJ#6283. 数列分块入门 7

    对于每个区间先乘在加,如果我修改的是部分的块,我就需要把现这个块的add和mul标记全部放下去,然后再更新. #include<map> #include<set> #incl ...

  2. 从Java的角度修复文件下载漏洞

    从Java的角度谈下文件下载漏洞的产生,然后到他的修复方案.这里我的修复方案是白名单,而没有采用黑名单的方式. 首先先看一段存在文件下载漏洞的代码code: HTML视图页面  download.ht ...

  3. A1121. Damn Single

    "Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are suppo ...

  4. 【CF242E】Xor Segment

    题目大意:给定一个长度为 N 的序列,支持两种询问,即:区间异或,区间求和. 题解:加深了对线段树的理解. 对于线段树维护的变量一定是易于 modify 的,对于查询的答案只需用维护的东西进行组合而成 ...

  5. Java String与Stringbuffer

    String 与其它类型的转换,e.g. BigInteger Stringbuffer 诸多函数,replace…… String 不能修改,Stringbuffer 可以修改, 应避免以下的操作: ...

  6. 斯坦福大学公开课机器学习:machine learning system design | error metrics for skewed classes(偏斜类问题的定义以及针对偏斜类问题的评估度量值:查准率(precision)和召回率(recall))

    上篇文章提到了误差分析以及设定误差度量值的重要性.那就是设定某个实数来评估学习算法并衡量它的表现.有了算法的评估和误差度量值,有一件重要的事情要注意,就是使用一个合适的误差度量值,有时会对学习算法造成 ...

  7. Day5--Python--字典

    字典1.什么是字典 dict. 以{}表示,每一项用逗号隔开,内部元素用key:value的形式来保存数据 {'jj':'林俊杰','jay':'周杰伦'} 查询效率非常高,通过key来查找元素 内部 ...

  8. HTML学习笔记Day1

    一.网站建设流程 1.注册域名(网址) 2.租用空间(服务器) 3.网站建设 (1)确定网站主题(项目) (2)搜集材料(项目) (3)规划网站(UI) (4)制作页面(前端--后端) 4.网络推广 ...

  9. C/S,B/S的应用的区别

    C/S和B/S都是软件架构方式: C/S(Client/Server) :客户端/服务器结构,其中客户端和服务器端都是独立的计算机,客户端是面向用户的应用程序或者是接口,服务器端通常采用高性能的PC. ...

  10. Advertising.csv

    TV,radio,newspaper,sales1,230.1,37.8,69.2,22.12,44.5,39.3,45.1,10.43,17.2,45.9,69.3,9.34,151.5,41.3, ...