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
4
5
6
def LOBYTE(x):     return x & 0xff
def HIBYTE(x): return (x >> 8) & 0xff
def LOWORD(x): return x & 0xffff
def HIWORD(x): return (x >> 16) & 0xffff
def LODWORD(x): return x & 0xffffffff
def HIDWORD(x): return (x >> 32) & 0xffffffff

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/
作者
JNZ
许可协议