加固脱壳加固iadpython系列教程.pdfVIP

  • 7
  • 0
  • 约3.02万字
  • 约 56页
  • 2021-02-15 发布于北京
  • 举报
idapython 主要依赖的的包由以下三部分组成: idc idautils idaapi 一些基础的函数 位置相关函数(用于获取光标,或特殊数据的地址) idc.ScreenEA() or here()返回当前光标位置 MinEA() 返回idb 的起始地址 MaxEA() 返回idb 的结束地址 hex(MinEA()) 将起始地址以 16 进制输出,如下所示: idc.SegName(ea) 获取ea 地址的段,比如text idc.GetDisasm(ea) 获取ea 地址的反汇编指令 ida.GetMnem(ea) 获取ea 地址的反汇编指令操作码 ida.GetOpnd(ea,n) 获取ea 地址的反汇编指令的第n 个操作数,由0 开始, 实例如下: 有时需要用于判断一个地址是否无效,可通过idaapi.BADADDR 实现,该函数返 回一个内置的无效地址,具体使用如下: if idaapi.BADADDR != here(): print vaild addr 节 idapython 的强大之处在于对idb 数据库的循环迭代,其中包括指令,交叉 等,这些会在下文中提到,反编译文件的数据节迭代会是一个不错的开始, 代码如下所示: import idautils for seg in idautils.Segments(): print idc.SegName(seg),idc.SegStart(seg),idc.SegEnd(seg) idautils.Segments()函数返回该反编译文件中所有的节 ,托python 的福,这里我们可以非常方便的直接对这些节 进行循环迭代,每一次迭代会 对一个节进行处理。 每层迭代中使用到以下函数 idc.SegName(seg) 获取节名 idc.SegStart(seg)获取该节的开始 idc.SegEnd(seg)获取该节的结束 通过函数idc.NextSeg(ea)可以获取下一个节,参数为当前节地址范围内任 意地址皆可。 函数 继数据节之后我们下一个目标是函数。 import idautils for func in idautils.Functions(): print hex(func),idc.GetFunctionName(func) idautils.Functions()会返回一个所有函数的起始地址列表,该函数也支持 区域查找,通过给函数传入起始和终止地址,可以控制搜寻的范围。 如idautils.Functions(start_addr,end_addr),idc.GetFunctionName(ea) 返回一个函数名,ea 可以为该函数中的任意二进制地址。 通过函数idaapi.get_func(ea),获取一个idaapi.func_t 的类,该类定义 了函数的一些属性,如下脚本所示,通过该返回的数据结构获取该函数的边界值。 import idautils ea = idc.ScreenEA() print ea func = idaapi.get_func(ea) print type(func) print Start:0x%x,End:0x%x %(func.startEA,func.endEA) idaapi.get_func(ea)会返回一个函数类对象,通过命令dir (class)可以 查看该类的导出函数和属性。 通过idc.NextFunciton(ea)和idc.PrevFunction(ea)分别可以获取当前地 址前后的两个函数的地址,传入的ea 参数为当前函数区间的所有合法地址。 import idautils ea = idc.ScreenEA() print ea next = idc.NextFunction(ea) pre = idc.PrevFunction(ea) print the next is 0x%x,the pre is 0x%x %(next,pre) idapython 提过了多种获取数据 的方式,另一种获取函数边界值的方式 可以通过以下两个函数。 通过函数idc.GetFunctionAttr(ea,FUNCATTR_START), idc.GetFunctionAttr(ea,FUNCATTR_END)。获取地址ea 所在函数的开始和结尾。 通过函数idc.GetDisasm(ea)获取当前地

文档评论(0)

1亿VIP精品文档

相关文档