🔧 固件逆向工程
漏洞定位全流程
📚 30章 · 从入门到实战
📁 点击卡片跳转对应章节 (01.html ~ 30.html)
风格
🎨 明快·圆润·暖色
01
固件逆向工程导论
什么是固件逆向 · 应用场景 · 法律与道德边界 · 课程整体框架
02
嵌入式系统基础
MCU与SoC架构 · 存储器映射 · 外设与寄存器 · 启动流程
03
固件获取与提取
从Flash芯片读取 · OTA包提取 · JTAG/SWD接口 · 加密与解密初步
04
固件分析环境搭建
Ubuntu虚拟机 · binutils/GDB/radare2/Ghidra/IDA · Python环境
05
二进制文件格式解析
ELF/PE/HEX/SREC/raw binary 格式详解与转换
06
固件解包与文件系统分析
Binwalk深度使用 · Squashfs/JFFS2/UBIFS/Cramfs提取 · 手动拼接修复
07
字符串分析与信息收集
strings进阶 · 硬编码密码/密钥/API令牌 · 交叉引用分析
08
CPU指令集基础 (ARM Cortex-M)
ARM/Thumb模式切换 · LDR/STR/B/BL · 栈帧与调用约定
09
CPU指令集基础 (MIPS)
MIPS指令格式 · 延迟槽 · ABI约定 · 固件中MIPS代码特点
10
反汇编与反编译入门
静态反汇编原理 · Ghidra反编译引擎 · IDA F5 · 结果解读
11
固件入口点与启动代码分析
Reset Handler · 向量表解析 · 启动流程 · BSS清零/数据段初始化
12
固件加载与重定位
基地址识别 · 加载/虚拟地址映射 · Ghidra/IDA手动重定位
13
函数识别与命名
库函数识别(FirmXRay/FLIRT) · 自定义命名 · 未识别函数启发式分析
14
交叉引用与数据流分析
Xrefs使用 · 数据流追踪 · 污染传播 · 从输出回溯到输入
15
漏洞类型概览 (嵌入式特有)
缓冲区溢出 · 格式化字符串 · 整数溢出 · 命令注入 · 逻辑漏洞 · 后门
16
缓冲区溢出漏洞定位
危险函数识别(strcpy/sprintf/memcpy) · 栈缓冲区分析 · 触发条件
17
格式化字符串漏洞定位
printf/sprintf格式化参数 · %n写操作检测 · 利用原理解析
18
命令注入漏洞定位
system/popen/execl调用分析 · 输入到系统调用路径 · shell元字符过滤
19
整数溢出与逻辑漏洞
整数截断 · 符号错误 · 循环边界 · 条件竞争 · 状态机异常
20
硬编码后门与调试接口
硬编码密码/密钥定位 · UART/JTAG暴露风险 · 未使用测试代码
21
动态调试环境搭建
QEMU用户态/系统态模拟 · GDB远程调试 · 半主机(Semihosting)
22
Fuzzing固件入门
AFL/libFuzzer在固件应用 · 硬件在环Fuzzing · 模拟器内Fuzzing · 崩溃分析
23
符号执行与约束求解
Angr框架入门 · 路径探索 · 约束求解生成PoC · 漏洞验证案例
24
漏洞利用基础
ROP链构造 · 栈迁移 · 堆溢出利用 · ARM/MIPS Gadget查找
25
真实案例1:路由器固件漏洞分析
从漏洞公告到PoC复现
26
真实案例2:IoT摄像头固件漏洞分析
从固件提取到漏洞定位
27
真实案例3:工控设备固件漏洞分析
专有协议逆向与漏洞发现
28
漏洞报告撰写与CVE申请
漏洞描述 · 影响范围 · PoC · 修复建议 · CVE申请流程
29
固件安全加固与防护
安全启动 · 加密存储 · Canary · ASLR/PIE · 控制流完整性(CFI)
30
课程总结与进阶方向
知识体系回顾 · 推荐书籍/工具 · 社区资源 · 职业发展路径