MrBadasss/re-course
GitHub: MrBadasss/re-course
一套包含 15 个模块的 CTF 逆向工程实战课程,通过可编译、可验证的渐进式挑战教授二进制逆向分析与解题技巧。
Stars: 0 | Forks: 0
# CTF 逆向工程 — 实战课程
这是一门完全可以从零搭建的课程,带你从“什么是二进制文件”一路进阶,直到能够解决 VM 混淆、反调试、被 strip 的 crackme,并驾驭符号执行引擎。
每个模块都提供**真实且可编译的挑战赛源码**、一个**已构建的二进制文件**,以及一份**通过实际使用工具解决挑战而产出的解答**(绝非纸上谈兵)。所有 15 个挑战均通过 `verify_all.sh` 进行了端到端验证。
## 如何使用本课程
1. **首先阅读 `00-toolbox/`** —— 它是你查阅所有工具和通用工作流的参考手册。
2. 按顺序学习每个模块:阅读其 `README.md`,**尝试在已构建的二进制文件上进行挑战**(假装 `.c` 源码不存在 —— 真实的 CTF 只会给你二进制文件),然后对照 `SOLUTION.md` 检查你的答案。`.c` 源码是供你在尝试后*学习事实真相*的。
3. 构建所有内容:在此目录下运行 `make all`。验证:运行 `./verify_all.sh`。清理:运行 `make clean`。
## 两份你会想要随时打开的额外文档
- **[HACKS.md](HACKS.md)** —— 包含**每一个**挑战的捷径、偷懒技巧和快捷方法,以及通用的 crackme 秘籍和真实的 CTF 工具列表。每个模块的 README 都会链接到其对应的章节。(`SOLUTION.md` 文件教授的是*预期的*解法;而 HACKS 教授的是*快速的*解法。)
- **[GHIDRA.md](GHIDRA.md)** —— 使用 Ghidra 反编译器(已在此处安装):涵盖 GUI 工作流、无头脚本,以及这些挑战的真实反编译输出。这里有一个封装脚本 `tools/ghidra_decompile.sh `,可以将任何二进制文件的函数转储为 C 代码。
## 前置条件(已在此机器上配置完毕)
- 编译器:`gcc`、`clang` • 跟踪工具:`strace`、`ltrace` • 调试器:`gdb`
- 静态分析工具:`objdump`、`readelf`、`nm`、`strings`、`file`、`radare2`/`rabin2`
- `upx`(打包工具) • 位于 `./.venv` 的 Python 虚拟环境,包含 **pwntools** 和 **angr**
- 通过 `./.venv/bin/python` 使用 angr/pwntools。
## 课程大纲
| # | 模块 | 类别 / 技能 | 关键工具 | Flag |
|---|--------|------------------|-----------|------|
| 00 | `00-toolbox` | 工具箱 + 通用工作流 | 全部 | — |
| 01 | `01-strings` | 静态侦察;明文密钥与诱饵 | strings, rabin2, objdump | `flag{r3ading_str1ngs_is_step_zero}` |
| 02 | `02-elf-anatomy` | ELF 节区,C→asm 流水线,小端序 | readelf, objdump -s | `flag{elf_secti0ns_are_a_map}` |
| 03 | `03-asm-reading` | 阅读 x86-64;逆向算术逻辑 | objdump | `322420958` → CORRECT |
| 04 | `04-control-flow` | cmp/jcc 分支逻辑;约束求解 | objdump, gdb | `flag{c0ntr0l_fl0w_4763}` |
| 05 | `05-xor` | XOR 混淆;恢复密钥+密文 | objdump -s, python | `flag{x0r_1s_the_ctf_national_sport}` |
| 06 | `06-loops` | 逐字符转换;逆向 (rol/add/xor) | objdump, python | `flag{l00ps_and_r0t_ftw}` |
| 07 | `07-gdb-patching` | 动态分析:泄露,实时修补,字节修补 | gdb, dd | `flag{gdb_1s_your_x-ray_v1s10n}` |
| 08 | `08-ltrace` | 通过库调用追踪进行行为逆向 | ltrace, strace | `flag{tr4c3_the_c4lls}` |
| 09 | `09-stripped` | 导航被 strip 的二进制文件;寻找 main | radare2 | `flag{n0_symb0ls_n0_problem}` |
| 10 | `10-antidebug` | ptrace 反调试 + 3 种绕过方法 | gdb, LD_PRELOAD, dd | `flag{anti_d3bug_defe4ted!!!}` |
| 11 | `11-packers` | 检测并脱壳 UPX;内存转储理论 | upx, readelf | `flag{upx_1s_pack_not_protect}` |
| 12 | `12-vm` | 自定义字节码 VM:恢复 ISA 并逆向 | objdump, radare2, python | `flag{a_t1ny_vm_ftw}` |
| 13 | `13-angr` | 符号执行;自动求解约束 | angr | `flag{4ngr_ftw!!}` |
| 99 | `99-capstone` | 综合应用 (stripped+antidebug+transform) | 全部 | `flag{full_st4ck_r3verser}` |
每个文件夹包含:`README.md`(理论 + 你的任务 + 提示)、`chal.c`(事实真相)、`SOLUTION.md`(包含真实命令输出的完整实战解答),以及已构建的二进制文件。
angr 模块还包含一个可运行的 `solve.py`;而 capstone 模块则被特意设计为期末测试。
## 心智模型(需要内化的核心概念)
每一个逆向挑战都是:**一个密钥、对其施加的转换操作,以及一次比较。** 你的任务始终是以下之一:
- **读取**密钥(它就在文件中) —— 模块 01、02。
- **观察**程序如何重构它(动态分析) —— 模块 07、08。
- **逆向**转换操作(数学运算、逐字节操作或一整个 VM) —— 模块 03、05、06、12。
- 当情况过于复杂时,**自动化**逆向过程(符号执行) —— 模块 13。
- ……前提是你首先要清除面前的障碍(stripping、反调试、打包) —— 模块 09、10、11。
静态分析寻找*在哪*;动态分析展示*是啥*;你需要不断在两者之间切换。这就是游戏的全部。
## 进阶指南(真实练习)
- **picoCTF**(逆向工程赛道) —— 最佳的初级到中级进阶路径,免费且始终开放。
- **crackmes.one** —— 涵盖各种难度和平台、源源不断的分级 crackme。
- **pwn.college**(逆向工程 / 程序交互模块) —— 结构化且深入。
- **microcorruption** —— 嵌入式 (MSP430) 汇编,基于浏览器,对于培养汇编流畅度极佳。
- 参加周末的 CTF 比赛(见 CTFtime.org)并在赛后阅读 writeup —— 这是最快的提升方式。
- 学习一款反编译器:**Ghidra**(免费,NSA 出品)能将反汇编代码转换为可读的 C 代码,能让你的大型二进制文件分析速度提升 10 倍。你在这里学到的所有汇编阅读技巧,都能让你确信它的输出是可靠的,而非变魔术。
## 已验证
```
$ make all && ./verify_all.sh
RESULT: 15 passed, 0 failed
```
标签:Ghidra, 二进制分析, 云安全运维, 云资产清单, 安全教程, 客户端加密, 逆向工具, 逆向工程