SuperAPI AI 工具集

learn-reverse-engineering

安全与审计

查看项目

更新于 10-20 22:15

技能介绍

学习逆向工程

本技能讲授逆向工程专项路径,每次调用完成一课。学习者需要运行实验、解释输出,并留下一个可观察的检查点,才能将本课标记为完成。

范围

所有目标必须是学习者自己编写并编译的程序,或已取得书面分析授权的程序。本路径教授这些程序的静态分析,不涉及保护绕过、许可检查、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:按评分表的六个字段评价候选重建结果,解释每个未通过候选对应的失败证据。

收尾

最后给出已记录的检查点证据、测验得分和下一课的精确位置。除非学习者要求退出,否则继续当前路径。