阶段二:初级逆向
📅 创建日期:2025-12-03
⏱️ 预计时长:1-2 个月
🎯 学习目标:掌握逆向工具使用,能分析简单程序
📋 前置要求:完成阶段一编程基础
🔗 返回:[[逆向与驱动开发学习路径(详细版)]]
📑 本阶段目录
- [[#2.1 逆向工具的使用]]
- [[#2.1.1 IDA Pro]]
- [[#2.1.2 x64dbg]]
- [[#2.1.3 Cheat Engine]]
- [[#2.1.4 其他实用工具]]
- [[#2.2 C语言逆向]]
- [[#2.2.1 变量识别]]
- [[#2.2.2 控制流识别]]
- [[#2.2.3 函数识别]]
- [[#2.2.4 常用算法识别]]
2.1 逆向工具的使用
🎯 目标:熟练使用 IDA、x64dbg、Cheat Engine
⏱️ 时长:2-3 周
2.1.1 IDA Pro
学习笔记
IDA(Interactive Disassembler)是最强大的静态分析工具,支持多种处理器架构和文件格式。
界面组成
- 反汇编视图:显示反汇编代码
- Text View:文本形式显示
- Graph View:图形化流程显示(空格切换)
- 十六进制视图:显示原始字节
- 字符串窗口:Shift+F12 查看所有字符串
- 导入/导出表:查看程序的API调用
- 交叉引用窗口:查看函数/数据的引用关系
核心操作
-
导航与跳转
- G:跳转到指定地址
- X:查看交叉引用(谁调用了这里)
- Enter:跟随跳转
- Esc:返回上一位置
-
重命名与注释
- N:重命名函数/变量
- ;:添加行注释
- /:在伪代码中添加注释
-
数据类型操作
- D:切换数据类型(db/dw/dd)
- C:将数据转为代码
- U:取消定义(Undefine)
- Y:修改类型
-
反编译器(F5)
- 查看伪C代码
- 可修改变量类型和名称
- 与反汇编视图同步
IDA快捷键速查表
| 快捷键 | 功能 | 说明 |
|---|---|---|
| Space | 切换视图 | Text/Graph视图切换 |
| G | 跳转地址 | 输入地址跳转 |
| N | 重命名 | 重命名当前项目 |
| X | 交叉引用 | 查看谁调用了这里 |
| F5 | 反编译 | 生成伪代码 |
| ; | 添加注释 | 在当前行添加注释 |
| / | 添加注释 | 伪代码中添加注释 |
| Y | 修改类型 | 修改变量/函数类型 |
| D | 转换数据 | db/dw/dd切换 |
| C | 转换代码 | 将数据转为代码 |
| U | 取消定义 | Undefine |
| P | 创建函数 | 在当前位置创建函数 |
| T | 结构体偏移 | 应用结构体 |
| Alt+T | 文本搜索 | 搜索文本 |
| Alt+B | 二进制搜索 | 搜索字节序列 |
| Alt+I | 立即数搜索 | 搜索数值 |
| Ctrl+S | 保存 | 保存数据库 |
| Shift+F12 | 字符串窗口 | 查看所有字符串 |
代码示例
IDA分析实战流程:
1. 打开程序后的初步分析
- 查看入口点(程序从哪里开始执行)
- 检查导入表(程序使用了哪些API)
- 查看字符串(可能包含关键信息)
2. 定位关键代码
- 从字符串定位:找到"Wrong Password"等提示
- 从API定位:找MessageBox、strcmp等调用
- 从交叉引用追踪:X键查看谁调用了它
3. 分析关键函数
- F5生成伪代码,更易理解
- 重命名变量和函数
- 添加注释记录分析结果
4. 常用分析模式
- 密码验证:找strcmp、memcmp调用
- 网络通信:找send、recv调用
- 文件操作:找CreateFile、ReadFile调用
[!tip] 关键要点
- 善用交叉引用(X键)是IDA分析的核心技巧
- 从字符串入手往往能快速定位关键代码
- 反编译器(F5)生成的伪代码比汇编更易理解
- 养成重命名和添加注释的好习惯
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📹视频 | IDA Pro从入门到精通 | B站搜索 | ⭐⭐⭐⭐⭐ |
| 📹视频 | 逆向工程入门(看雪) | 看雪学院 | ⭐⭐⭐⭐⭐ |
| 📖书籍 | 《IDA Pro权威指南》 | 官方教程 | ⭐⭐⭐⭐⭐ |
| 📖书籍 | 《逆向工程核心原理》 | 第一部分 | ⭐⭐⭐⭐⭐ |
| 🌐在线 | IDA官方文档 | hex-rays.com/docs | ⭐⭐⭐⭐ |
| ✏️练习 | CrackMe挑战 | crackmes.one | ⭐⭐⭐⭐⭐ |
| 🔧下载 | IDA Free | hex-rays.com/ida-free | 免费版 |
2.1.2 x64dbg
学习笔记
x64dbg 是一款开源的动态调试器,支持 32 位(x32dbg)和 64 位(x64dbg)程序。
界面组成
- CPU窗口:显示反汇编、寄存器、栈、内存
- 日志窗口:显示调试信息
- 断点窗口:管理所有断点
- 内存映射:显示进程内存布局
- 调用栈:显示函数调用链
- 线程列表:查看所有线程
断点类型
-
软件断点(INT3)
- F2设置/取消
- 修改指令为INT3(0xCC)
- 程序执行到断点时暂停
-
硬件断点
- 使用CPU调试寄存器(DR0-DR3)
- 最多4个硬件断点
- 可设置执行/读/写断点
- 不修改代码,更隐蔽
-
内存断点
- 基于页面保护
- 访问/写入内存时触发
- 适合监控内存访问
-
条件断点
- 满足特定条件时才断下
- 右键断点设置条件
x64dbg快捷键速查表
| 快捷键 | 功能 | 说明 |
|---|---|---|
| F2 | 断点 | 设置/取消断点 |
| F7 | 单步步入 | 进入函数 |
| F8 | 单步步过 | 跳过函数 |
| F9 | 运行 | 继续执行 |
| F4 | 运行到光标 | 执行到选中位置 |
| Ctrl+F9 | 运行到返回 | 执行到RET |
| Ctrl+G | 跳转 | 跳转到地址 |
| Ctrl+F | 搜索 | 搜索指令 |
| Space | 汇编 | 修改当前指令 |
| ; | 注释 | 添加注释 |
| : | 标签 | 添加标签 |
| Ctrl+B | 二进制搜索 | 搜索字节 |
| Ctrl+E | 编辑 | 编辑内存 |
| Ctrl+P | 补丁 | 导出补丁 |
代码示例
x64dbg调试实战流程:
1. 附加/打开程序
- 文件 -> 打开:启动并调试新程序
- 文件 -> 附加:调试已运行的程序
2. 设置断点策略
- 在入口点断下(默认)
- 在关键API下断点(如MessageBoxA)
- 在可疑地址下断点
3. 单步调试技巧
- F7步入:进入每个函数详细分析
- F8步过:跳过已知函数
- F9运行:运行到下一个断点
4. 内存观察
- 右键 -> 在内存窗口跟随
- 观察数据变化
- 设置硬件断点监控写入
5. 修改程序行为
- 修改寄存器值
- 修改内存数据
- 修改指令(NOP填充、改跳转)
[!tip] 关键要点
- 动态调试能看到程序实际运行时的状态
- 硬件断点不修改代码,适合调试有反调试的程序
- 条件断点可以大大减少断下次数
- 善用"在此处暂停"功能追踪变量变化
实战练习
练习1:动态分析程序流程
1. 在main函数入口下断点
2. 单步执行观察流程
3. 观察寄存器和栈变化
4. 找到关键判断点
练习2:修改程序行为
1. 找到跳转指令
2. 使用NOP或修改跳转
3. 观察程序行为变化
4. 保存补丁
练习3:分析加密算法
1. 在输入函数后下断点
2. 观察输入数据如何被处理
3. 使用硬件断点跟踪数据流
4. 还原加密逻辑
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📹视频 | x64dbg调试教程 | B站搜索 | ⭐⭐⭐⭐⭐ |
| 📹视频 | 动态调试入门 | 吾爱破解 | ⭐⭐⭐⭐ |
| 📖文档 | x64dbg官方文档 | help.x64dbg.com | ⭐⭐⭐⭐ |
| 📖书籍 | 《加密与解密》 | 调试章节 | ⭐⭐⭐⭐⭐ |
| 🔧下载 | x64dbg | x64dbg.com | 免费开源 |
| ✏️练习 | 160个CrackMe | 吾爱破解 | ⭐⭐⭐⭐⭐ |
2.1.3 Cheat Engine
学习笔记
Cheat Engine(CE)是游戏内存修改的入门神器,也是学习内存扫描原理的最佳工具。
核心功能
-
数值搜索
- 精确值搜索:知道具体数值时使用
- 未知初始值:不知道具体数值时使用
- 变动值搜索:值增加/减少/未变
- 范围搜索:在某个范围内
-
数据类型
- 4字节整数:最常见
- 浮点数:坐标、速度等
- 双精度:高精度数值
- 字节/2字节:较小的数值
- 字符串:文本数据
-
指针扫描
- 解决动态地址问题
- 找到静态的基址+偏移
- 重启游戏后仍然有效
-
代码注入
- “找出是什么访问了这个地址”
- “找出是什么写入了这个地址”
- 代码注入器编写脚本
操作流程
基本数值搜索流程:
1. 打开CE,附加目标进程
2. 选择正确的数据类型(4字节/浮点等)
3. 输入当前数值,首次扫描
4. 在游戏中改变数值
5. 输入新数值,再次扫描
6. 重复直到找到唯一地址
7. 修改数值或锁定
未知初始值搜索流程:
1. 选择"未知的初始值",首次扫描
2. 在游戏中让数值变化
3. 选择"增加了的数值"或"减少了的数值"
4. 重复扫描直到缩小范围
5. 找到目标地址
指针扫描流程:
1. 找到动态地址
2. 右键 -> 指针扫描
3. 设置扫描参数(通常Max Level 5-7)
4. 重启游戏验证
5. 比较结果,找出稳定指针路径
CE内置教程
[!important] 必做!
CE 自带的 Tutorial 是最好的入门教程,务必完成全部 9 关:
- Step 2:精确值扫描
- Step 3:未知初始值
- Step 4:浮点数
- Step 5:代码查找
- Step 6:指针
- Step 7:代码注入
- Step 8:多级指针
- Step 9:共享代码
代码示例
-- CE Lua脚本示例
-- 读取内存
local value = readInteger("[[game.exe+0x123456]+0x10]+0x20")
print("当前值: " .. value)
-- 写入内存
writeInteger("[[game.exe+0x123456]+0x10]+0x20", 999)
-- 自动汇编脚本示例
[ENABLE]
aobscanmodule(HEALTH_WRITE, game.exe, 89 86 ?? ?? ?? ?? 8B 45)
alloc(newmem, 1024)
newmem:
mov [esi+000001A4], #999 // 写入999
jmp return
HEALTH_WRITE:
jmp newmem
nop
return:
[DISABLE]
HEALTH_WRITE:
mov [esi+000001A4], eax
[!tip] 关键要点
- 完成CE Tutorial是学习CE的最佳方式
- 指针扫描可以解决动态地址问题
- "找出是什么写入"功能是分析游戏逻辑的利器
- 浮点数常用于坐标、速度等数值
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📹视频 | CE从入门到精通 | B站搜索 | ⭐⭐⭐⭐⭐ |
| 📹视频 | Guided Hacking CE教程 | YouTube | ⭐⭐⭐⭐⭐ |
| 🔧内置 | CE Tutorial | CE自带教程 | ⭐⭐⭐⭐⭐ |
| 📖文档 | CE官方Wiki | wiki.cheatengine.org | ⭐⭐⭐⭐ |
| 🔧下载 | Cheat Engine | cheatengine.org | 免费 |
| ✏️练习 | 各种小游戏修改 | ⭐⭐⭐⭐⭐ |
2.1.4 其他实用工具
PE分析工具
| 工具 | 用途 |
|---|---|
| CFF Explorer | PE文件结构分析、修改PE头 |
| PE-bear | PE文件查看器 |
| DIE (Detect It Easy) | 检测加壳、编译器识别 |
| ExeInfo PE | 查壳工具 |
十六进制编辑器
| 工具 | 用途 |
|---|---|
| HxD | 免费十六进制编辑器 |
| 010 Editor | 强大的模板支持 |
| ImHex | 现代化开源编辑器 |
系统监控工具
| 工具 | 用途 |
|---|---|
| Process Monitor | 监控文件/注册表/网络操作 |
| Process Explorer | 进程详细信息 |
| API Monitor | 监控API调用 |
| Wireshark | 网络抓包 |
使用场景
场景1:分析程序打开了哪些文件
-> 使用Process Monitor过滤目标进程,查看文件操作
场景2:检测程序是否加壳
-> 使用DIE识别壳类型和编译器
场景3:分析程序调用了哪些API
-> 使用API Monitor监控API调用和参数
场景4:修改PE文件
-> 使用CFF Explorer编辑PE头
✅ 逆向工具阶段检查清单
- [ ] 能用IDA打开程序并分析函数
- [ ] 会使用IDA的交叉引用功能
- [ ] 能用x64dbg进行动态调试
- [ ] 会设置各种类型的断点
- [ ] 能用CE搜索和修改游戏数值
- [ ] 会用CE进行指针扫描
- [ ] 能识别程序是否加壳
2.2 C语言逆向
🎯 目标:能将反汇编代码还原为 C 代码
⏱️ 时长:2-3 周
2.2.1 变量识别
学习笔记
识别不同类型的变量是逆向分析的基础。
全局变量
; 特征:直接地址访问
MOV EAX, DWORD PTR DS:[0x00404000] ; 读取全局变量
MOV DWORD PTR DS:[0x00404000], 100 ; 写入全局变量
; 对应C代码:
int g_value; // 地址 0x00404000
g_value = 100;
局部变量
; 特征:[EBP-X] 或 [ESP+X] 访问
MOV DWORD PTR SS:[EBP-4], 10 ; 第1个局部变量
MOV DWORD PTR SS:[EBP-8], 20 ; 第2个局部变量
; 对应C代码:
int local1 = 10;
int local2 = 20;
函数参数
; 特征:[EBP+X] 访问,X >= 8
MOV EAX, DWORD PTR SS:[EBP+8] ; 第1个参数
MOV EBX, DWORD PTR SS:[EBP+C] ; 第2个参数
; 对应C代码:
void func(int param1, int param2) {
// param1 = [EBP+8]
// param2 = [EBP+C]
}
数组访问
; 特征:基址 + 索引 * 元素大小
MOV EAX, DWORD PTR DS:[ECX*4+0x00404000] ; arr[i]
MOV EAX, DWORD PTR DS:[ESI+EDI*4] ; arr[i],ESI为基址
; 对应C代码:
int arr[100]; // 基址 0x00404000
x = arr[i]; // ECX = i
结构体访问
; 特征:基址 + 固定偏移
MOV EAX, DWORD PTR DS:[ESI] ; obj->field1 (offset 0)
MOV EBX, DWORD PTR DS:[ESI+4] ; obj->field2 (offset 4)
MOV ECX, DWORD PTR DS:[ESI+10] ; obj->field3 (offset 0x10)
; 对应C代码:
struct MyStruct {
int field1; // +0x00
int field2; // +0x04
// padding
int field3; // +0x10
};
MyStruct* obj;
x = obj->field1;
[!tip] 关键要点
- 全局变量使用直接地址访问
- 局部变量使用
[EBP-X]负偏移- 参数使用
[EBP+X]正偏移(X>=8)- 数组访问包含
索引*元素大小计算- 结构体访问使用
基址+固定偏移
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📖书籍 | 《逆向工程核心原理》 | 第一部分 | ⭐⭐⭐⭐⭐ |
| 📖书籍 | 《加密与解密》 | 基础逆向章节 | ⭐⭐⭐⭐⭐ |
| ✏️练习 | 编写C程序并反编译对照 | ⭐⭐⭐⭐⭐ |
2.2.2 控制流识别
学习笔记
识别程序的控制流结构是理解程序逻辑的关键。
if-else结构
; C代码: if (x > 10) { ... } else { ... }
CMP DWORD PTR SS:[EBP-4], 10 ; 比较x和10
JLE short loc_401020 ; 不满足则跳过if块
; if 块代码
MOV EAX, 1
JMP short loc_401030
loc_401020: ; else 块
MOV EAX, 0
loc_401030:
识别特征:
- CMP + 条件跳转
- 跳过if块的跳转
- else块后面可能有无条件跳转
switch-case结构
; 小范围连续case - 跳转表模式
CMP EAX, 5 ; 检查是否超出范围
JA loc_default ; > 5 则default
JMP DWORD PTR DS:[EAX*4+jump_table] ; 跳转表
jump_table:
DD case_0
DD case_1
DD case_2
DD case_3
DD case_4
DD case_5
识别特征:
- 范围检查 + 跳转表
- 跳转表包含各case地址
- 或者是 if-else 链模式
for循环
; C代码: for (int i = 0; i < 10; i++) { ... }
XOR ECX, ECX ; i = 0
JMP short loc_cond_check
loc_loop_body:
; 循环体
; ...
INC ECX ; i++
loc_cond_check:
CMP ECX, 10 ; i < 10?
JL short loc_loop_body
识别特征:
- 初始化 -> 条件检查(在开头) -> 循环体 -> 递增 -> 跳回条件检查
- 或使用 LOOP 指令
while循环
; C代码: while (x != 0) { x--; }
loc_while_check:
CMP DWORD PTR SS:[EBP-4], 0
JE short loc_while_end ; 条件不满足则退出
; 循环体
DEC DWORD PTR SS:[EBP-4]
JMP short loc_while_check
loc_while_end:
识别特征:
- 条件检查在开头
- 不满足时跳出循环
do-while循环
; C代码: do { x--; } while (x != 0);
loc_do_body:
; 循环体
DEC DWORD PTR SS:[EBP-4]
CMP DWORD PTR SS:[EBP-4], 0
JNE short loc_do_body ; 满足则继续
识别特征:
- 条件检查在结尾
- 满足时跳回循环开头
[!tip] 关键要点
- if-else: CMP + 条件跳转,跳过if块
- switch: 跳转表或if-else链
- for: 初始化->条件(开头)->体->递增->跳回
- while: 条件(开头)->体->跳回
- do-while: 体->条件(结尾)->跳回
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📖书籍 | 《C++反汇编与逆向分析技术揭秘》 | 控制流章节 | ⭐⭐⭐⭐⭐ |
| ✏️练习 | 编写各种控制结构并分析 | ⭐⭐⭐⭐⭐ |
2.2.3 函数识别
学习笔记
识别函数边界、参数和调用约定是逆向分析的重要技能。
函数边界识别
; 典型函数序言
PUSH EBP ; 保存旧栈帧
MOV EBP, ESP ; 建立新栈帧
SUB ESP, 0x20 ; 分配局部变量空间
PUSH EBX ; 保存被调用者保存寄存器
PUSH ESI
PUSH EDI
; 典型函数尾声
POP EDI ; 恢复寄存器
POP ESI
POP EBX
MOV ESP, EBP ; 或 ADD ESP, 0x20
POP EBP ; 恢复调用者栈帧
RET ; __cdecl
; 或
RET 0xC ; __stdcall, 清理12字节参数
调用约定识别
__cdecl(C 语言默认)
; 调用方
PUSH 3 ; 参数c
PUSH 2 ; 参数b
PUSH 1 ; 参数a
CALL func
ADD ESP, 12 ; 调用者清理3个参数 (3*4=12字节)
; 特征:调用后有 ADD ESP, N
__stdcall(Windows API)
; 调用方
PUSH 3
PUSH 2
PUSH 1
CALL func ; 函数内部 RET 12
; 函数内部
RET 12 ; 被调用者清理参数
; 特征:RET N,调用后无ADD ESP
__fastcall
; 调用方
PUSH d ; 第4个参数入栈
PUSH c ; 第3个参数入栈
MOV EDX, b ; 第2个参数用EDX
MOV ECX, a ; 第1个参数用ECX
CALL func
; 特征:前两个参数用ECX, EDX
__thiscall(C++ 成员函数)
; 调用 obj->method(a, b)
PUSH b
PUSH a
MOV ECX, obj ; this指针
CALL method
; 特征:this指针在ECX
参数数量判断
; 方法1:查看栈清理大小
ADD ESP, 0x10 ; 0x10 / 4 = 4个参数
; 方法2:查看RET指令
RET 0x14 ; 0x14 / 4 = 5个参数
; 方法3:查看函数内部参数访问
MOV EAX, [EBP+8] ; 参数1
MOV EBX, [EBP+C] ; 参数2
MOV ECX, [EBP+10] ; 参数3
; 最高偏移 (0x10 - 8) / 4 + 1 = 3个参数
[!tip] 关键要点
- 序言/尾声模式识别函数边界
- 调用后的栈清理识别调用约定
- cdecl: 调用者清理,stdcall: 被调用者清理
- fastcall: ECX/EDX传前两个参数
- thiscall: ECX传this指针
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📖书籍 | 《逆向工程核心原理》 | 函数分析章节 | ⭐⭐⭐⭐⭐ |
| ✏️练习 | 分析各种函数并还原 | ⭐⭐⭐⭐⭐ |
2.2.4 常用算法识别
学习笔记
识别常见算法可以帮助快速理解程序逻辑。
字符串操作
; strlen 特征
XOR ECX, ECX ; len = 0
loc_loop:
CMP BYTE PTR [EAX+ECX], 0 ; str[len] == 0?
JE short loc_end
INC ECX ; len++
JMP short loc_loop
loc_end:
; ECX = 字符串长度
; strcpy/memcpy 特征
; REP MOVSB/MOVSW/MOVSD
MOV ESI, src ; 源
MOV EDI, dst ; 目标
MOV ECX, len ; 长度
REP MOVSB ; 按字节复制
; strcmp 特征
loc_cmp:
MOV AL, [ESI]
MOV BL, [EDI]
CMP AL, BL
JNE short loc_diff
TEST AL, AL ; 检查结束
JE short loc_equal
INC ESI
INC EDI
JMP short loc_cmp
简单加密
; XOR加密 特征
MOV ECX, len
MOV ESI, data
loc_xor:
XOR BYTE PTR [ESI], key ; data[i] ^= key
INC ESI
LOOP loc_xor
; 识别方法:循环中的XOR操作
Base64特征
查找特征字符串:
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
查找特征操作:
SHR x, 2 ; >> 2
AND x, 0x3F ; & 0x3F (63)
CRC32特征
查找多项式常数:
0xEDB88320 ; 反射多项式
0x04C11DB7 ; 正向多项式
查找预计算表(256项)
哈希算法特征
MD5特征常数:
0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476
SHA1特征常数:
0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0
[!tip] 关键要点
- 字符串操作查找 REP MOVS、逐字节比较
- XOR加密查找循环中的XOR操作
- 加密算法查找特征常数
- 使用IDA的findcrypt插件可自动识别
IDA插件推荐
findcrypt-yara:自动识别加密算法
- 识别MD5、SHA、AES、DES等
- 通过特征常数定位
FLARE IDA:FireEye开发的分析工具集
signsrch:签名搜索
📚 学习资料
| 类型 | 资源名称 | 链接/说明 | 推荐度 |
|---|---|---|---|
| 📖书籍 | 《加密与解密》 | 算法识别章节 | ⭐⭐⭐⭐⭐ |
| 🌐在线 | findcrypt IDA插件 | 自动识别加密算法 | ⭐⭐⭐⭐⭐ |
| ✏️练习 | 分析CrackMe中的算法 | ⭐⭐⭐⭐⭐ |
✅ C语言逆向阶段检查清单
- [ ] 能识别各种变量类型
- [ ] 能识别if-else结构
- [ ] 能识别各种循环结构
- [ ] 能识别switch-case
- [ ] 能判断函数参数数量
- [ ] 能识别调用约定
- [ ] 能识别常见字符串操作
- [ ] 能识别简单加密算法
阶段总结
完成本阶段学习后,你应该能够:
-
熟练使用 IDA 进行静态分析
- 导航和交叉引用
- 重命名和注释
- 使用反编译器
-
熟练使用 x64dbg 进行动态调试
- 设置各种断点
- 单步调试和追踪
- 内存观察和修改
-
熟练使用 CE 进行内存修改
- 数值搜索
- 指针扫描
- 代码注入基础
-
能够分析简单 C 程序
- 识别变量和数据结构
- 识别控制流
- 识别函数结构
🔗 下一阶段:[[阶段三:进阶编程]]
🔙 上一阶段:[[阶段一:编程基础]]
📋 返回主目录:[[逆向与驱动开发学习路径(详细版)]]