zoukankan      html  css  js  c++  java
  • 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) ---->  设定寄存器的值。

  • 相关阅读:
    这个我过滤概述UIPickerView键盘处理
    父子控制器
    源码0501-10-掌握-单粒模式
    源码0501-07-GCD的基本使用
    源码0501-04-了解-线程的状态
    源码-0501-01-处理耗时操作
    源码03-02-10-导航控制器简单使用
    spring在ssh框架中到底起到什么作用
    ssh整合
    spring整合hibernate
  • 原文地址:https://www.cnblogs.com/blacksunny/p/7215382.html
Copyright © 2011-2022 走看看