【idapython】逆向分析脚本实践

Preface

这两天尝试复现一些二进制分析的论文工作,发现自己对idapython的使用知之甚少,在复现的过程中遇到了不少阻力,因此写一篇idapython使用的实践文章,也算一个小教程,记录一下学习的经历。

Something you need to know

这里需要重点说明几点:

  1. idapythonida pro的一个插件,必须要在ida中使用或者通过ida程序的命令行执行方式运行,并不像普通的python包那样,可以在自己的项目中独立使用,这也意味着它难以用一般的ide(如pycharm)进行代码调试
  2. 虽然在ida7.4之后支持了python3,但目前主流的项目和教程资料仍在使用python2,因此建议还是使用python2idapython脚本的编写
  3. idapython三个主模块位于ida pro安装目录下的python目录,因此,若想要更好的调用提示(ide中),可选择将这个python目录中的模块拷贝到自己的项目中(但在执行脚本的时候依然得用ida执行),或者直接选择在该目录下编写代码。

之所以强调这几点,是因为看过很多现有的网上教程,大多没有对此说明,而是直接给出样例代码和接口,让人在直接复现的时候经常各种报错,异常。

Three methods to run IDAPython scripts

运行idapython的脚本有三种方法:

  1. 启动ida后,在最下方的命令行窗口直接输入python指令,有点类似ipython的交互模式,但没有提示,多行输入的时候需要手动敲空格,十分难用!!!

  2. 以脚本文件的形式上传python脚本文件,相当于在ida中直接运行,该脚本文件仅针对ida打开的二进制文件,适合对单个二进制文件的分析

  3. 在命令行中通过ida程序直接运行跟上python脚本,需要用到-S等相关参数,可以参考[1]

IDAPython Usage

idapython提供了三个主要模块,分别是:

  • idc: 提供IDC中所有的函数功能(例如返回段名、起始地址)
  • idautils: 提供大量实用函数,能够转换成python的相关对象,如列表
  • idaapi: 通过类的方式,访问更多底层数据

实操是理解的最好途径,关于这方面的使用,网上有许多现成的博客,这里就不重复叙述了,具体可以参考[2],在遇到某个接口函数使用遗忘的时候也可以用于查询。

这里提供一些有用的资料(包括参考部分):


IDAPython Scripts

收集、整理IDAPython 相关脚本(包括自己和他人):

参考