NDXDeveloper/formation-reverse-engineering-gcc-gpp
GitHub: NDXDeveloper/formation-reverse-engineering-gcc-gpp
一套涵盖36章的逆向工程完整培训课程,从x86-64汇编到恶意软件分析,配套练习二进制与参考答案。
Stars: 1 | Forks: 0
# 逆向工程培训 —— GNU 工具链 (GCC/G++)
关于使用 GNU 工具链 (GCC/G++) 编译的原生二进制文件 **逆向工程** 的完整培训,并包含关于 **.NET/C#**、**Rust** 和 **Go** 二进制文件的额外加餐模块。
**36 个章节** · **9 个部分** · **~120 小时** 内容 · **20+ 个训练用二进制文件** · **带参考答案的检查点**
## 🎯 目标
在本培训结束后,您将能够:
- 理解由 GCC/G++ 生成的 ELF 二进制文件的内部结构
- 进行完整的静态分析(反汇编、反编译、十六进制查看、差异比对)
- 进行动态分析(GDB 调试、Frida hooking、AFL++ 模糊测试、angr/Z3 符号执行)
- 逆向复杂的 C++ 代码(vtables、RTTI、name mangling、STL、模板、智能指针)
- 识别并绕过常见的保护机制(ASLR、PIE、canaries、RELRO、UPX、混淆)
- 在隔离环境中分析恶意代码(勒索软件、下载器、加壳)
- 在 .NET/C# 二进制文件上应用这些技术(dnSpy、ILSpy、Frida-CLR)
- 入门 Rust 和 Go 二进制文件的 RE(name mangling、运行时、特定结构)
- 自动化您的 RE 工作流(Python 脚本、Ghidra headless、YARA 规则、CI/CD 流水线)
## 👥 目标受众
| 配置文件 | 先决条件 |
|:---|:---|
| 希望理解其二进制文件的 C/C++ 开发者 | C/C++ 基础 |
| 对 RE 好奇的 .NET/C# 开发者 | C# 基础 + 编译概念 |
| 面临 RE 需求的 Rust/Go 开发者 | 语言基础 + ELF 概念 |
| 网络安全专业学生 | Linux 基础 + 命令行 |
| 初级/中级 CTF 参与者 | 无 RE 先决条件 |
## 📦 仓库结构
```
formation-reverse-engineering-gcc-gpp/
├── README.md ← Ce fichier
├── SOMMAIRE.md ← Table des matières détaillée (36 chapitres)
├── LICENSE ← MIT + disclaimer éthique
├── check_env.sh ← Script de vérification de l'environnement
│
├── preface.md ← Préface de la formation
├── partie-1-fondamentaux.md ← Introduction Partie I
├── partie-2-analyse-statique.md ← Introduction Partie II
├── ... ← (une page d'intro par partie)
├── partie-9-ressources.md ← Introduction Partie IX
│
├── 01-introduction-re/ ← Chapitre 1 — Introduction au RE
│ ├── README.md
│ ├── 01-definition-re.md
│ ├── ...
│ └── checkpoint.md
├── 02-chaine-compilation-gnu/ ← Chapitre 2 — Chaîne de compilation GNU
├── ... ← Chapitres 3 à 36 (même structure)
├── 36-ressources-progresser/ ← Chapitre 36 — Ressources pour progresser
│
├── annexes/ ← Annexes A à K
│ ├── README.md
│ └── ...
│
├── binaries/ ← Tous les binaires d'entraînement
│ ├── Makefile ← `make all` pour tout recompiler
│ ├── ch05-keygenme/ ← Chapitres 5–6 (triage, ImHex)
│ ├── ch06-fileformat/
│ ├── ch08-oop/
│ ├── ch16-optimisations/ ← Chapitre 16 (optimisations GCC)
│ ├── ch17-oop/ ← Chapitre 17 (C++ RE)
│ ├── ch20-keygenme/ ← Chapitre 20 (décompilation)
│ ├── ch20-network/
│ ├── ch20-oop/
│ ├── ch21-keygenme/ ← Chapitre 21 (cas pratique keygenme)
│ ├── ch22-oop/ ← Chapitre 22 (cas pratique OOP + plugins)
│ ├── ch23-network/ ← Chapitre 23 (cas pratique réseau)
│ ├── ch24-crypto/ ← Chapitre 24 (cas pratique crypto)
│ ├── ch25-fileformat/ ← Chapitre 25 (cas pratique format fichier)
│ ├── ch27-ransomware/ ← ⚠️ Sandbox uniquement
│ ├── ch28-dropper/ ← ⚠️ Sandbox uniquement
│ ├── ch29-packed/ ← Chapitre 29 (packing/unpacking)
│ ├── ch32-dotnet/ ← Chapitre 32 (.NET LicenseChecker)
│ ├── ch33-rust/ ← Chapitre 33 (crackme Rust)
│ └── ch34-go/ ← Chapitre 34 (crackme Go)
│
├── scripts/ ← Scripts Python utilitaires
│ ├── triage.py ← Triage automatique d'un binaire
│ ├── keygen_template.py ← Template keygen pwntools
│ └── batch_analyze.py ← Analyse batch Ghidra headless
│
├── hexpat/ ← Patterns ImHex (.hexpat)
│ ├── elf_header.hexpat ← Header ELF générique
│ ├── ch06_fileformat.hexpat ← Format CDB (chapitre 6)
│ ├── ch23_protocol.hexpat ← Protocole réseau ch23
│ ├── ch24_crypt24.hexpat ← Format CRYPT24 (chapitre 24)
│ └── ch25_fileformat.hexpat ← Format CFR (chapitre 25)
│
├── yara-rules/ ← Règles YARA
│ ├── crypto_constants.yar ← Détection constantes crypto (AES, SHA, MD5…)
│ └── packer_signatures.yar ← Signatures de packers (UPX…)
│
└── solutions/ ← Corrigés des checkpoints (⚠️ spoilers)
├── ch01-checkpoint-solution.md
├── ch02-checkpoint-solution.md
├── ...
├── ch21-checkpoint-keygen.py
├── ch22-checkpoint-plugin.cpp
├── ch23-checkpoint-client.py
├── ch24-checkpoint-decrypt.py
├── ch25-checkpoint-parser.py
├── ch25-checkpoint-solution.hexpat
├── ch27-checkpoint-decryptor.py
├── ch28-checkpoint-fake-c2.py
├── ch34-checkpoint-solution.md
└── ch35-checkpoint-batch.py
```
## 🛠️ 使用的工具
### 静态分析
| 工具 | 作用 | 免费 |
|:---|:---|:---:|
| `readelf`, `objdump`, `nm` | ELF 检查 / Binutils | ✅ |
| `checksec` | 保护机制清单 | ✅ |
| `strace` / `ltrace` | 系统调用和库调用 | ✅ |
| **ImHex** | 高级十六进制编辑器 + `.hexpat` 模式 + YARA | ✅ |
| **Ghidra** | 反汇编器 / 反编译器 (NSA) | ✅ |
| **Radare2 / Cutter** | CLI + GUI 分析(基于 Rizin) | ✅ |
| IDA Free | 参考级反汇编器(免费版) | ✅ |
| Binary Ninja Cloud | 现代反汇编器(免费云端版) | ✅ |
| **BinDiff** / Diaphora | 二进制差异比对 | ✅ |
| **RetDec** | 离线静态反编译器 (CLI) | ✅ |
### 动态分析
| 工具 | 作用 | 免费 |
|:---|:---|:---:|
| **GDB** + GEF / pwndbg / PEDA | 增强型原生调试 | ✅ |
| **Frida** | 动态插桩 + hooking | ✅ |
| `pwntools` | 与二进制文件交互的脚本工具 | ✅ |
| Valgrind / ASan / UBSan / MSan | 内存分析和运行时行为分析 | ✅ |
| **AFL++** / libFuzzer | 覆盖引导的模糊测试 | ✅ |
| **angr** | 符号执行 | ✅ |
| **Z3** | 约束求解器 (SMT) | ✅ |
### .NET / C# 逆向
| 工具 | 作用 | 免费 |
|:---|:---|:---:|
| **dnSpy / dnSpyEx** | 反编译 + 集成 .NET 调试 | ✅ |
| **ILSpy** | 开源 C# 反编译 | ✅ |
| dotPeek | JetBrains 反编译器 | ✅ |
| de4dot | .NET 程序集去混淆 | ✅ |
| Frida-CLR | .NET 方法 hooking | ✅ |
## 🚀 快速开始
### 1. 克隆仓库
```
git clone https://github.com/NDXDeveloper/formation-reverse-engineering-gcc-gpp.git
cd formation-reverse-engineering-gcc-gpp
```
### 2. 安装核心依赖 (Debian/Ubuntu/Kali)
```
sudo apt update && sudo apt install -y \
gcc g++ make gdb ltrace strace binutils \
bsdextrautils checksec valgrind python3-pip binwalk
pip3 install pwntools pyelftools lief frida-tools angr
# AFL++
sudo apt install -y afl++
```
### 3. 验证环境
```
chmod +x check_env.sh
./check_env.sh
```
此脚本检查所有必需的工具是否已安装且功能正常。
### 4. 编译所有训练用二进制文件
```
cd binaries/
make all
```
每个章节的 `Makefile` 会生成多个变体:
```
*_O0 ← sans optimisation, avec symboles (-O0 -g)
*_O2 ← optimisé -O2, avec symboles
*_O3 ← optimisé -O3, avec symboles
*_strip ← strippé (sans symboles, -O0 -s)
*_O2_strip ← optimisé + strippé (cas le plus réaliste)
```
### 5. 开始培训
```
# 打开详细目录
xdg-open SOMMAIRE.md
```
或直接从 **[第 1 章 —— 什么是 RE?](/01-introduction-re/README.md)** 开始
## ⚠️ 警告 —— 第六部分 (恶意软件)
第 27 和 28 章(`ch27-ransomware/`、`ch28-dropper/`)的二进制文件是**特意受限的教学原型**:
- 勒索软件仅使用硬编码的 AES 密钥加密 `/tmp/test/`
- 下载器仅在 `127.0.0.1:4444` 上通信,无持久化
- **切勿在已做快照且网络隔离的虚拟机之外编译或运行它们**
**[第 26 章](/26-lab-securise/README.md)** 详细介绍了安全实验室的搭建 —— 在进行第 27-29 章的学习之前必须完成该章节。
## 📚 目录
| 部分 | 内容 | 章节 |
|:---|:---|:---:|
| **[I](/partie-1-fondamentaux.md)** —— 基础知识 | RE 简介、GNU 工具链、x86-64 汇编、环境 | 1 – 4 |
| **[II](/partie-2-analyse-statique.md)** —— 静态分析 | Binutils、ImHex、objdump、Ghidra、IDA、Radare2、Binary Ninja、diffing | 5 – 10 |
| **[III](/partie-3-analyse-dynamique.md)** —— 动态分析 | GDB、GEF/pwndbg、Frida、Valgrind/Sanitizers、AFL++/libFuzzer | 11 – 15 |
| **[IV](/partie-4-techniques-avancees.md)** —— 高级技术 | GCC 优化、C++ RE、符号执行、反逆向、反编译 | 16 – 20 |
| **[V](/partie-5-cas-pratiques.md)** —— 实战案例 | Keygenme、OOP + 插件、网络、加密、自定义格式 | 21 – 25 |
| **[VI](/partie-6-malware.md)** —— 恶意软件 (沙箱) | 安全实验室、勒索软件、下载器、脱壳 | 26 – 29 |
| **[VII](/partie-7-dotnet.md)** —— .NET/C# 加餐 | RE .NET、ILSpy、dnSpy、Frida-CLR | 30 – 32 |
| **[VIII](/partie-8-rust-go.md)** —— Rust & Go 加餐 | Rust RE 特性、Go RE 特性 | 33 – 34 |
| **[IX](/partie-9-ressources.md)** —— 资源 | 脚本编写、自动化、CTF、阅读材料、认证 | 35 – 36 |
➡️ **[详细目录 (SOMMAIRE.md)](/SOMMAIRE.md)**
## 🧭 推荐学习路径
根据您的背景,您可以按线性或针对性的方式进行学习:
| 目标 | 建议路径 |
|:---|:---|
| **完整培训** | 按顺序学习第一至第九部分 |
| **快速入门 RE** | 第 1–5 章,然后第 11 章,最后第 21 章 (keygenme) |
| **备战 CTF** | 第 3, 5, 8, 11, 13, 18, 21 章 |
| **恶意软件分析** | 第一至第三部分,然后直接进入第六部分 |
| **仅 .NET / C# RE** | 第 1 章,然后第七部分 |
| **Rust / Go RE** | 第 1–5, 8, 11 章,然后第八部分 |
## 🎯 检查点
每个章节(或章节组)结束时都有一个**检查点**:这是一个实际操作练习,用于在进入下一阶段前验证所学知识。参考答案位于 `solutions/` 中。
## 🤝 贡献
欢迎各种贡献:
- 修正技术或排版错误
- 添加训练用二进制文件的变体
- 添加 `.hexpat` 模式或 YARA 规则
- 将章节翻译成英文
在进行大型 pull request 之前,请先开启一个 **issue**。
## 📄 许可证
[MIT](/LICENSE) — © 2025-2026 [Nicolas DEOUX / NDXDeveloper]
本内容仅用于教育和道德目的。请参阅 [完整免责声明](/LICENSE)。
标签:angr, CTF培训, C#逆向, C++逆向, DAST, DNS信息、DNS暴力破解, DNS 反向解析, DNS 解析, Docker支持, ELF文件格式, Frida, G++, GCC编译器, GDB调试器, Ghidra, Go语言, IP 地址批量处理, Rust语言, URL提取, Wayback Machine, x86-64架构, YARA规则, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码混淆, 内存安全, 反汇编, 反编译, 可观察性, 可视化界面, 可配置连接, 客户端加密, 快速连接, 恶意软件分析, 情报收集, 技术教程, 日志审计, 汇编语言, 法国课程, 漏洞研究, 程序分析, 程序破解, 符号执行, 网络安全, 自定义密码套件, 软件破解, 逆向工具, 逆向工程, 隐私保护, 静态分析