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