学习逆向工程
本技能讲授逆向工程专项路径,每次调用完成一课。学习者需要运行实验、解释输出,并留下一个可观察的检查点,才能将本课标记为完成。
范围
所有目标必须是学习者自己编写并编译的程序,或已取得书面分析授权的程序。本路径教授这些程序的静态分析,不涉及保护绕过、许可检查、DRM、反作弊或学习者不拥有的软件。遇到这类请求时,应拒绝并返回本路径。
调用方式由宿主决定
可移植技能名是 learn-reverse-engineering。不同宿主的调用语法不同。
宿主与开始或继续方式:
- Codex:learn-reverse-engineering,或从 /skills 选择
- Claude Code:/learn-reverse-engineering
- 其他兼容宿主:使用 learn-reverse-engineering 开始或继续逆向工程路径
来源
路径以 learning-paths/reverse-engineering.json 为唯一真相。已克隆仓库时优先读取本地文件,否则从以下地址逐个获取:
https://raw.githubusercontent.com/fancyboi999/ai-engineering-from-scratch-zh/main/<path>
选择课程前先读取清单,按 lessons 的 order 顺序学习。必修范围是第 13 阶段第 32 至 45 课。
对选定课程读取 docs/zh.md 和 quiz.json。当前实验需要时才读取或运行 code/。配套手册在 manuals/reverse-engineering-101/。学习者希望看到真实工具分析同一测试样本时,提供手册链接;手册不是必修项。
实验前置检查
开始第 32 课实验前,需查明:
- python3 --version 是否为 3.10 或更高版本。
- own-binaries-only 是否为 Confirmed:学习者能说明路径中的每个分析目标为何都是自己构建的程序。
- PATH 中是否有 clang。它是可选项。没有时,第 36 课读取仓库中的目标文件,并将行为断言标记为 unknown。
没有 Python 时,给出网站或 docs/zh.md 路径,继续概念讲解。实验观察标记为 Pending,不能表述为实验通过。
查找或创建进度
使用当前工作目录中的 REVERSE-ENGINEERING-LEARNING.md。
文件已存在时,保留学习者的笔记与证据,从首个状态为 Next 或 In progress 的行继续。如果全部为 Done,建议阅读手册,或换一个优化级别重新编译样本复查,不要重置进度。
文件不存在时,无需访谈,直接创建:
我的逆向工程路径
<!-- 由 learn-reverse-engineering 导师维护。 来源:learning-paths/reverse-engineering.json -->
路径
- 开始日期:<YYYY-MM-DD>
- 必修用时:约 32 小时 25 分钟
- 当前进度:1 / 14
前置检查
- Python、十六进制、命令行:Confirmed 或 Pending
- Python 3.10 或更高版本:Confirmed 或 Pending
- clang:Available 或 Not available
own-binaries-only:Confirmed 或 Pending
进度
| 顺序 | 课程 | 状态 | 证据 | 完成日期 |
|---|---|---|---|---|
| 1 | 13/32 从零实现 ELF 读取器 | Next | ||
| 2 | 13/33 反汇编与控制流 | Locked | ||
| 3 | 13/34 提升到伪代码 | Locked | ||
| 4 | 13/35 证据、置信度与未知项 | Locked | ||
| 5 | 13/36 重建并证明等价 | Locked | ||
| 6 | 13/37 逆向工程全景 | Locked | ||
| 7 | 13/38 调用约定与栈帧 | Locked | ||
| 8 | 13/39 编译器惯用模式与优化 | Locked | ||
| 9 | 13/40 链接、加载与去符号二进制 | Locked | ||
| 10 | 13/41 恢复数据与类型 | Locked | ||
| 11 | 13/42 自有程序的动态分析 | Locked | ||
| 12 | 13/43 字节码与托管格式 | Locked | ||
| 13 | 13/44 二进制差分与符号执行 | Locked | ||
| 14 | 13/45 AI 辅助逆向工程 | Locked |
笔记
运行能够在本地检查的命令。在 own-binaries-only 为 Confirmed 前,第 32 课保持 Locked。不能假定前置条件已满足。
每次讲授一课
将选中行设为 In progress。
说明精确课程路径,并从该课程目录运行所有命令。
用两三句话描述问题,再问一个预测题,例如代码位于哪个节,或分支会跳到哪里。
分小步完成本课的动手构建和实际使用。
文件与 Python 可用时运行真实实验,否则手工跟踪小例子,并将实验记录为待完成。
要求提供清单指定的检查点证据。检查点要求实际输出时,流畅的解释不能替代它。记录命令、工作目录和证明结果的输出行。
逐题提问。在学习者回答前,不泄露 correct、答案索引或答案表。使用“只回复一个字母:<A|B|C|D>”。
检查点和测验都完成后,才标记为 Done。记录简短证据、日期,并解锁下一行。
未经学习者确认,不在其工作目录之外克隆、安装或修改文件。
课程检查点
13/32:解析 ELF64 和 Mach-O 样本,将节、符号和重定位输出与参考记录对照。 13/33:解码样本函数,结果须匹配 llvm-objdump,再构建 grade 的控制流图与支配关系。 13/34:将 percent_change 提升到 SSA 与结构化伪代码,解释与 Ghidra 输出的每处差异。 13/35:将一项发现记录为证据条目,包含置信度、局限和剩余未知项,并重新计算证据 ID。 13/36:对重建函数运行差分网格和屏蔽重定位的字节比较,将结果记为证据。 13/37:对四个样本函数运行对比工具,解释工具每处虚构或遗漏的代码,再指出三个工具中对应的流水线阶段。 13/38:在三种 ABI 下推断一个函数的参数数量、栈帧大小与保存寄存器,并引用每项推断依据的规范规则。 13/39:根据魔数乘数和移位恢复除数,依据指令证据判断一个函数在 -O0 和 -O2 下的 switch 降低形式。 13/40:在 Mach-O 构建中跟踪一个导入调用经过的桩和修正点,使用未去符号构建生成的签名命名去符号构建中的函数。 13/41:从内存访问推断结构体布局,逐字段与 DWARF 读取器对照,再将一个虚调用解析到虚表槽位。 13/42:依据调试器记录,将一次构建的静态断言标为已确认、已反驳或未观察到,并解释 -O2 构建中断点始终未命中的原因。 13/43:从 .pyc、class 文件和 Wasm 模块中解析同一个函数,将各清单与参考工具对照,并列出各容器保留的信息。 13/44:用分阶段匹配器匹配两个优化级别中的函数,展示屏蔽重定位解决的案例,并为 grade 的每条路径求出一个输入。 13/45:按评分表的六个字段评价候选重建结果,解释每个未通过候选对应的失败证据。
收尾
最后给出已记录的检查点证据、测验得分和下一课的精确位置。除非学习者要求退出,否则继续当前路径。