mcpField
L
learn-reverse-engineering

learn-reverse-engineering

github.com/rohitg00开发75.3k654 次安装5 天前更新
代码仓库

关于 learn-reverse-engineering

用于学习静态分析的引导式技能,目标限于学习者自行编译或获准分析的程序。课程逐课推进,要求完成实验取证和测验;不涵盖未经授权的目标或保护绕过。

主要功能

  1. 0114 课逆向工程路线
  2. 02分析获准检查的二进制文件
  3. 03带证据检查点的实践实验
  4. 04逐题进行测验
  5. 05记录进度并恢复课程

适用场景

  1. 01学习检查已编译程序格式
  2. 02练习反汇编与控制流分析
  3. 03为静态分析发现记录证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rohitg00/ai-engineering-from-scratch --skill learn-reverse-engineering

安装后在 Claude Code 中输入/learn-reverse-engineering确认已加载。

详细介绍

学习逆向工程

教授专注于逆向工程的学习路线。每次调用只涵盖一节课。 学习者运行实验、解释输出所显示的内容,并留下一个可观察的检查点,然后才能将课程标记为完成。

范围

每个目标都是学习者自己编写并编译的程序,或学习者已获书面授权分析的程序。本路线教授这些程序的静态分析。不涉及绕过保护、许可证检查、DRM、反作弊,也不涉及分析学习者不拥有的软件。拒绝这些请求,并返回本路线。

调用方式由宿主决定

通用技能名称为 learn-reverse-engineering。不要将某一种命令语法教成通用语法。

宿主开始或继续
Codexlearn-reverse-engineering,或从 /skills 中选择
Claude Code/learn-reverse-engineering
其他兼容宿主Use learn-reverse-engineering to start or resume the Reverse Engineering path.

来源

本路线的权威来源是 learning-paths/reverse-engineering.json。如果已克隆此仓库,优先使用本地文件。否则,请从以下位置获取每个文件:

https://raw.githubusercontent.com/rohitg00/ai-engineering-from-scratch/main/<path>

选择课程前先阅读清单。按 order 顺序学习 lessons。必修路线为 Phase 13 的第 32 至 45 课,按清单顺序进行。

对于每节所选课程,阅读其 docs/en.md 和 quiz.json。只有当前实验需要时,才阅读或运行 code/ 下的文件。配套手册位于 manuals/reverse-engineering-101/。如果学习者想了解如何使用真实工具分析同一测试样例,请指向该手册,但不要将其设为必修内容。

实验前检查

在第 32 课的实验开始前,确认以下事项:

  1. python3 --version 显示 3.10 或更高版本。
  2. own-binaries-only 检查状态为 Confirmed:学习者能够说明本路线中的每个目标为何都是自己编写的程序。
  3. 确认 clang 是否位于路径中。它是可选项。如果没有,Lesson 36 将读取已提交的对象文件,并将有关其行为的判断报告为 unknown。

如果无法使用 Python,请提供网站或 docs/en.md 路径,并以概念讲解的方式继续。将实验观察标记为 Pending。绝不要将此回退方式描述为实验通过。

查找或创建进度记录

使用当前工作目录中的 REVERSE-ENGINEERING-LEARNING.md。

如果该文件存在,保留学习者的笔记和证据。继续学习状态为 Next 或 In progress 的第一行。如果所有行都为 Done,请提供手册,或建议使用学习者在另一优化级别下编译的测试样例重新检查。不要重新开始整条路线。

如果该文件不存在,则无需访谈,直接创建:

# My Reverse Engineering Path


## Route
- Started: <YYYY-MM-DD>
- Required time: about 32 hours 25 minutes
- Current: 1 of 14

## Prerequisite check
- Python, hexadecimal, and command line: Confirmed or Pending
- Python 3.10 or later: Confirmed or Pending
- clang: Available or Not available
- `own-binaries-only`: Confirmed or Pending

## Progress
| Order | Lesson | Status | Evidence | Completed |
|---:|---|---|---|---|
| 1 | 13/32 ELF reader from scratch | Next | | |
| 2 | 13/33 Disassembly and control flow | Locked | | |
| 3 | 13/34 Lifting to pseudocode | Locked | | |
| 4 | 13/35 Evidence, confidence, and unknowns | Locked | | |
| 5 | 13/36 Rebuild and prove equal | Locked | | |
| 6 | 13/37 The reverse engineering landscape | Locked | | |
| 7 | 13/38 Calling conventions and stack frames | Locked | | |
| 8 | 13/39 Compiler idioms and optimization | Locked | | |
| 9 | 13/40 Linking, loading, and stripped binaries | Locked | | |
| 10 | 13/41 Recovering data and types | Locked | | |
| 11 | 13/42 Dynamic analysis of your own program | Locked | | |
| 12 | 13/43 Bytecode and managed formats | Locked | | |
| 13 | 13/44 Binary diffing and symbolic execution | Locked | | |
| 14 | 13/45 AI-assisted reverse engineering | Locked | | |

## Notes

检查可以在本地检查的命令。在 own-binaries-only 状态变为 Confirmed 之前,将第 32 课保持为 Locked。绝不要凭假设将先决条件标记为已完成。

教授一节课

  1. 将所选行设为 In progress。
  2. 指明准确的课程路径,并在该课程目录中运行每条命令。
  3. 用两到三句话说明问题,然后提出一个预测问题,例如哪个段保存代码,或分支会跳转到哪里。
  4. 将课程的 Build It 和 Use It 材料拆成小段逐步讲解。
  5. 如果文件和 Python 均可用,则运行实际实验。否则,手动追踪一个小示例,并将实验记录为待完成。
  6. 要求提供清单规定的检查点证据。检查点要求观察输出时,流畅的解释不能替代实际观察结果。记录命令、工作目录,以及能证明结果的行。
  7. 一次只问一个测验问题。在学习者作答前,绝不透露 correct、答案索引或答案键。使用 Reply with one letter: <A|B|C|D>.
  8. 只有在检查点和测验均完成后,才将该行标记为 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、类文件和 Wasm 模块中解析同一函数,将每份反汇编列表与参考工具的结果比对,并列出每种容器保留的信息。
  • **13/44:**使用分阶段匹配器匹配两个优化级别下的函数,展示屏蔽重定位所修复的情况,并为 grade 的每条路径各求出一个输入。
  • **13/45:**按评分卡的六个字段评估候选重建结果,并解释每个未通过候选的失败证据。

收尾

结束时记录检查点证据、测验得分和下一课的准确内容。除非学习者要求离开此路线,否则请让其继续沿着这条路线学习。

评论

支持 Markdown