IDA 分析技巧记录
0x10 恢复结构体
恢复结构体对我们的分析很有帮助
下面用一道例题介绍IDA如何恢复结构体来帮助分析
题目是pwnable.tw上的一道堆题,hacknote
通过对程序的简单分析后我们得出程序的结构体大概是这个样子:
typedef struct node{
char * print_ptr;
char * content;
}hacknote;
而ida只能按偏移来识别,对我们的分析不是很有利
我们在结构体窗口新建一个结构体:
insert
: i
新建结构体
创建好以后是这个样子
我们可以看到这里是没有结构体成员的,按D
新加入成员(注意:要在ends后面按)
加入成员后我们对成员设置名字,以及类型
找到变量引用位置alt+q
,选择我们的结构体
修改变量类型
修改为note类型,并将变量重命名之后
可以看到结构体已经被恢复成功
0x20 取出数组值
有时候逆向的时候我们需要取出数组里面的值,但一个个复杂又太麻烦
我们可以直接shift + E
来提取
0x30 还原静态库的符号信息
还原静态库的信息一般用的是 IDA 提供的 FLIRT,这是一种函数识别技术,即库文件快速识别与鉴定技术(Fast Library Identification and Recognition Technology)。可以通过 sig 文件来让 IDA 在无符号的二进制文件中识别函数特征,并且恢复函数名称等信息,大大增加了代码的可读性,加快分析速度。
而标准库的 sig 文件也有现成制作好的,在 https://github.com/push0ebp/sig-database 中下载,并且把文件导入到 IDA/sig/pc 中就能够使用
这里我们使用pwnhub内部赛的一道题来做案例:babyboa
ida打开题目我们可以发现,题目函数名被去除了
导入后再在 IDA 中按 Shift + F5,打开“List of applied library modules”页面
选择要导入的sig,可以看到识别出来了大部分函数
从官网上下载boa的源码,导入globals.h,并根据报错修改部分结构体
即可导入成功,手动重命名部分函数即可
0x40 findcrypt 插件
https://github.com.cnpmjs.org/polymorf/findcrypt-yara.git
0x50 IDA python
https://hex-rays.com/products/ida/support/idapython_docs/
0x60 diaphora
https://github.com.cnpmjs.org/HongThatCong/diaphora_py2.git
https://github.com.cnpmjs.org/joxeankoret/diaphora.git