【idapython】逆向分析脚本实践
Preface
这两天尝试复现一些二进制分析的论文工作,发现自己对idapython
的使用知之甚少,在复现的过程中遇到了不少阻力,因此写一篇idapython
使用的实践文章,也算一个小教程,记录一下学习的经历。
Something you need to know
这里需要重点说明几点:
idapython
是ida pro
的一个插件,必须要在ida
中使用或者通过ida
程序的命令行执行方式运行,并不像普通的python
包那样,可以在自己的项目中独立使用,这也意味着它难以用一般的ide(如pycharm
)进行代码调试- 虽然在
ida7.4
之后支持了python3
,但目前主流的项目和教程资料仍在使用python2
,因此建议还是使用python2
做idapython
脚本的编写 idapython
三个主模块位于ida pro
安装目录下的python
目录,因此,若想要更好的调用提示(ide中),可选择将这个python
目录中的模块拷贝到自己的项目中(但在执行脚本的时候依然得用ida
执行),或者直接选择在该目录下编写代码。
之所以强调这几点,是因为看过很多现有的网上教程,大多没有对此说明,而是直接给出样例代码和接口,让人在直接复现的时候经常各种报错,异常。
Three methods to run IDAPython scripts
运行idapython
的脚本有三种方法:
启动ida后,在最下方的命令行窗口直接输入
python
指令,有点类似ipython
的交互模式,但没有提示,多行输入的时候需要手动敲空格,十分难用!!!以脚本文件的形式上传
python
脚本文件,相当于在ida
中直接运行,该脚本文件仅针对ida
打开的二进制文件,适合对单个二进制文件的分析在命令行中通过
ida
程序直接运行跟上python
脚本,需要用到-S
等相关参数,可以参考[1]
IDAPython Usage
idapython
提供了三个主要模块,分别是:
idc
: 提供IDC中所有的函数功能(例如返回段名、起始地址)idautils
: 提供大量实用函数,能够转换成python的相关对象,如列表idaapi
: 通过类的方式,访问更多底层数据
实操是理解的最好途径,关于这方面的使用,网上有许多现成的博客,这里就不重复叙述了,具体可以参考[2],在遇到某个接口函数使用遗忘的时候也可以用于查询。
这里提供一些有用的资料(包括参考部分):
IDAPython Scripts
收集、整理IDAPython
相关脚本(包括自己和他人):
【IDAPython CTree】反编译代码操作练习 - 求索 (gentlecp.com): 练习如何利用
IDAPython
实现对二进制源码的反编译对一批二进制文件执行IDA Python脚本 :
IDAPython
终端脚本执行的一些说明,包括如何接收命令行参数
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!