Loading...

文章背景图

阶段二:初级逆向

这篇文章详细介绍了逆向工程的第二阶段学习内容,主要聚焦于初级逆向技术的学习路径与方法。以下是文章摘要(约200字): --- ### 初级逆向学习摘要 **阶段目标**:掌握逆向工具使用并能分析简单程序,预计耗时1-2个月,需具备编程基础。 **【核心工具】** 1. **IDA Pro**: - 静态分析利器,支持图形化流程(Graph View)与伪代码生成(F5)。 - 关键操作:交叉引用(X键)、重命名(N键)、数据类型转换(D/C/Y键)。 2. **x64dbg**: - 动态调试工具,支持软件/硬件/内存断点,快捷键(F7步入、F8步过)。 3. **Cheat Engine**: - 内存修改工具,擅长数值扫描、指针追踪及代码注入。 **【C语言逆向技术】** - **变量识别**:全局变量(直接地址)、局部变量(EBP-X)、参数(EBP+X)。 - **控制流分析**:if-else(CMP+JLE)、switch(跳转表)、循环(初始化-条件-递增)。 - **函数解析**:通过序言/尾声识别边界,调用约定(cdecl/stdcall/fastcall)。 - **算法识别**:字符串操作(REP MOVS)、加密(XOR循环)、哈希(特征常数)。 **学习建议**: - 结合IDA与x64dbg实战分析CrackMe挑战。 - 推荐书籍《IDA Pro权威指南》《加密与解密》,辅以CE内置教程。 **成果验证**:完成工具使用和代码分析的检查清单,如断点设置、变量还原等。 --- 摘要涵盖工具操作要点、逆向分析核心技能及实践资源,适合初学者系统性入门。

a0yark a0yark
|
2025-12-03
|
1
|
-
|
- min
|

阶段二:初级逆向

📅 创建日期: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调用
  • 交叉引用窗口:查看函数/数据的引用关系

核心操作

  1. 导航与跳转

    • G:跳转到指定地址
    • X:查看交叉引用(谁调用了这里)
    • Enter:跟随跳转
    • Esc:返回上一位置
  2. 重命名与注释

    • N:重命名函数/变量
    • ;:添加行注释
    • /:在伪代码中添加注释
  3. 数据类型操作

    • D:切换数据类型(db/dw/dd)
    • C:将数据转为代码
    • U:取消定义(Undefine)
    • Y:修改类型
  4. 反编译器(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窗口:显示反汇编、寄存器、栈、内存
  • 日志窗口:显示调试信息
  • 断点窗口:管理所有断点
  • 内存映射:显示进程内存布局
  • 调用栈:显示函数调用链
  • 线程列表:查看所有线程

断点类型

  1. 软件断点(INT3)

    • F2设置/取消
    • 修改指令为INT3(0xCC)
    • 程序执行到断点时暂停
  2. 硬件断点

    • 使用CPU调试寄存器(DR0-DR3)
    • 最多4个硬件断点
    • 可设置执行/读/写断点
    • 不修改代码,更隐蔽
  3. 内存断点

    • 基于页面保护
    • 访问/写入内存时触发
    • 适合监控内存访问
  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)是游戏内存修改的入门神器,也是学习内存扫描原理的最佳工具。

核心功能

  1. 数值搜索

    • 精确值搜索:知道具体数值时使用
    • 未知初始值:不知道具体数值时使用
    • 变动值搜索:值增加/减少/未变
    • 范围搜索:在某个范围内
  2. 数据类型

    • 4字节整数:最常见
    • 浮点数:坐标、速度等
    • 双精度:高精度数值
    • 字节/2字节:较小的数值
    • 字符串:文本数据
  3. 指针扫描

    • 解决动态地址问题
    • 找到静态的基址+偏移
    • 重启游戏后仍然有效
  4. 代码注入

    • “找出是什么访问了这个地址”
    • “找出是什么写入了这个地址”
    • 代码注入器编写脚本

操作流程

基本数值搜索流程:
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
  • [ ] 能判断函数参数数量
  • [ ] 能识别调用约定
  • [ ] 能识别常见字符串操作
  • [ ] 能识别简单加密算法

阶段总结

完成本阶段学习后,你应该能够:

  1. 熟练使用 IDA 进行静态分析

    • 导航和交叉引用
    • 重命名和注释
    • 使用反编译器
  2. 熟练使用 x64dbg 进行动态调试

    • 设置各种断点
    • 单步调试和追踪
    • 内存观察和修改
  3. 熟练使用 CE 进行内存修改

    • 数值搜索
    • 指针扫描
    • 代码注入基础
  4. 能够分析简单 C 程序

    • 识别变量和数据结构
    • 识别控制流
    • 识别函数结构

🔗 下一阶段:[[阶段三:进阶编程]]
🔙 上一阶段:[[阶段一:编程基础]]
📋 返回主目录:[[逆向与驱动开发学习路径(详细版)]]

分享文章

未配置分享平台

请在主题设置中启用分享平台

评论