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/