Ida基础用法
1.常用快捷键
| 快捷键 | 功能 |
|---|---|
| Shift + F12 | 打开字符串窗口 |
| Y | 改变函数原型或变量类型 |
| D | 宽度转换以及结构体中新增成员 |
| R | 字符转换 |
| H | 进制转换 |
| / | 伪代码中添加注释 |
| X | 查看交叉引用 |
| TAB | 汇编指令和伪代码之间切换 |
| Shift + E | 得到数组 |
| Alt + T | 搜索硬编码 |
| Alt + I | 搜索立即数 |
| Alt + B | 搜索二进制 |
| Alt + P | 修改函数边界 |
2.伪代码修复
2.1 逆向命名规则
2.1.1 类型命名
| 类型 | 前缀 |
|---|---|
| 数组 | a |
| 布尔 | b |
| 字符byte | c |
| 短整型word | w |
| 整型dowrd | dw |
| 整形qword | qw |
| 指针 | p |
| 类成员 | m_ |
| 字符串 | sz |
2.1.2 符号命名
| 符号类型 | 规则 | 示例 |
|---|---|---|
| 栈变量 | 类型前缀 + 名字 | szWelcome |
| 全局变量 | g_类型前缀 + 名字 | g_dwTime |
| 普通函数 | 大功能 + 具体功能 | memAlloc |
| 成员函数 | 类名字::函数名 | Student::getNum |
2.2 不规则代码
1 | |
2.3 修复函数原型
2.3.1 返回值类型
当分析出某个函数的返回值类型始终(交叉引用)不会被使用后,可以将函数原型的返回值类型改成void,可以优化掉多余代码。
2.3.2 参数个数和类型
在x64下,有些函数没有参数,但由于调用约定,F5后的伪代码中可能出现参数,将多余的参数删除,可以优化代码。而且有些参数是使用寄存器传递,如浮点寄存器,这时伪代码中可能无法正确识别,需要结合汇编分析,并手动添加参数,可以增加可读性。
2.4 修复变量类型
2.4.1 结构体定义
恢复结构体类型可以大大代码可读性,可以根据new的大小和分析成员使用情况来确定结构体边界和成员类型。下面展示类的结构定义模板:

2.4.2 数组定义
对于连续的内存空间的操作,可以酌情还原为数组,增加可读性。
3.符号还原
3.1 基于签名文件的符号还原
3.2 基于Bindff的符号还原
Ida基础用法
http://helloymf.github.io/2022/09/13/ida-basic/