NDXDeveloper/reverse-engineering-gcc-gpp-training
GitHub: NDXDeveloper/reverse-engineering-gcc-gpp-training
这是一套针对 GCC/G++ 编译的 ELF 二进制文件进行逆向工程的综合培训资料,涵盖从基础汇编到恶意软件分析的 36 个实战章节。
Stars: 1 | Forks: 0
# 逆向工程培训 — GNU 工具链 (GCC/G++)
关于使用 GNU 工具链 (GCC/G++) 编译的原生二进制文件的**逆向工程**综合培训,并附带了关于 **.NET/C#**、**Rust** 和 **Go** 二进制文件的附加模块。
**36 个章节** · **9 个部分** · **约 120 小时**的内容 · **20+ 培训二进制文件** · **带解答的检查点**
## 🎯 目标
完成本培训后,您将能够:
- 理解由 GCC/G++ 生成的 ELF 二进制文件的内部结构
- 进行完整的静态分析(反汇编、反编译、十六进制检查、差异比对)
- 进行动态分析(GDB 调试、Frida Hook、AFL++ 模糊测试、angr/Z3 符号执行)
- 逆向复杂的 C++ 代码(vtables、RTTI、名称修饰、STL、模板、智能指针)
- 识别并绕过常见保护机制(ASLR、PIE、canaries、RELRO、UPX、混淆)
- 在隔离环境中分析恶意代码(勒索软件、Dropper、加壳)
- 将这些技术应用于 .NET/C# 二进制文件(dnSpy、ILSpy、Frida-CLR)
- 处理 Rust 和 Go 二进制文件的逆向工程(名称修饰、运行时、特定结构)
- 自动化您的逆向工程工作流(Python 脚本、Ghidra 无头模式、YARA 规则、CI/CD 流水线)
## 👥 目标受众
| 人群 | 先决条件 |
|:---|:---|
| 希望了解其二进制文件的 C/C++ 开发人员 | C/C++ 基础 |
| 对逆向工程好奇的 .NET/C# 开发人员 | C# 基础 + 编译概念 |
| 面临逆向工程的 Rust/Go 开发人员 | 语言基础 + ELF 概念 |
| 网络安全学生 | Linux 基础 + 命令行 |
| 初级/中级 CTF 参与者 | 无逆向工程先决要求 |
## 📦 仓库结构
```
reverse-engineering-gcc-gpp-training/
├── README.md ← This file
├── TABLE-OF-CONTENTS.md ← Detailed table of contents (36 chapters)
├── LICENSE ← MIT + ethical disclaimer
├── check_env.sh ← Environment verification script
│
├── preface.md ← Tutorial preface
├── part-1-fundamentals.md ← Part I introduction
├── part-2-static-analysis.md ← Part II introduction
├── ... ← (one intro page per part)
├── part-9-resources.md ← Part IX introduction
│
├── 01-introduction-re/ ← Chapter 1 — Introduction to RE
│ ├── README.md
│ ├── 01-definition-objectives.md
│ ├── ...
│ └── checkpoint.md
├── 02-gnu-compilation-chain/ ← Chapter 2 — GNU Compilation Chain
├── ... ← Chapters 3 through 36 (same structure)
├── 36-resources-further-learning/ ← Chapter 36 — Resources for further learning
│
├── appendices/ ← Appendices A through K
│ ├── README.md
│ └── ...
│
├── binaries/ ← All training binaries
│ ├── Makefile ← `make all` to recompile everything
│ ├── ch05-keygenme/ ← Chapters 5–6 (triage, ImHex)
│ ├── ch06-fileformat/
│ ├── ch08-oop/
│ ├── ch16-optimisations/ ← Chapter 16 (GCC optimizations)
│ ├── ch17-oop/ ← Chapter 17 (C++ RE)
│ ├── ch20-keygenme/ ← Chapter 20 (decompilation)
│ ├── ch20-network/
│ ├── ch20-oop/
│ ├── ch21-keygenme/ ← Chapter 21 (keygenme practical case)
│ ├── ch22-oop/ ← Chapter 22 (OOP + plugins practical case)
│ ├── ch23-network/ ← Chapter 23 (network practical case)
│ ├── ch24-crypto/ ← Chapter 24 (crypto practical case)
│ ├── ch25-fileformat/ ← Chapter 25 (file format practical case)
│ ├── ch27-ransomware/ ← ⚠️ Sandbox only
│ ├── ch28-dropper/ ← ⚠️ Sandbox only
│ ├── ch29-packed/ ← Chapter 29 (packing/unpacking)
│ ├── ch32-dotnet/ ← Chapter 32 (.NET LicenseChecker)
│ ├── ch33-rust/ ← Chapter 33 (Rust crackme)
│ └── ch34-go/ ← Chapter 34 (Go crackme)
│
├── scripts/ ← Python utility scripts
│ ├── triage.py ← Automatic binary triage
│ ├── keygen_template.py ← pwntools keygen template
│ └── batch_analyze.py ← Ghidra headless batch analysis
│
├── hexpat/ ← ImHex patterns (.hexpat)
│ ├── elf_header.hexpat ← Generic ELF header
│ ├── ch06_fileformat.hexpat ← CDB format (chapter 6)
│ ├── ch23_protocol.hexpat ← ch23 network protocol
│ ├── ch24_crypt24.hexpat ← CRYPT24 format (chapter 24)
│ └── ch25_fileformat.hexpat ← CFR format (chapter 25)
│
├── yara-rules/ ← YARA rules
│ ├── crypto_constants.yar ← Crypto constants detection (AES, SHA, MD5…)
│ └── packer_signatures.yar ← Packer signatures (UPX…)
│
└── solutions/ ← Checkpoint solutions (⚠️ 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** | 动态插桩 + Hook | ✅ |
| `pwntools` | 与二进制文件交互的脚本编写 | ✅ |
| Valgrind / ASan / UBSan / MSan | 内存和运行时行为分析 | ✅ |
| **AFL++** / libFuzzer | 覆盖率引导的模糊测试 | ✅ |
| **angr** | 符号执行 | ✅ |
| **Z3** | 约束求解器 (SMT) | ✅ |
### .NET / C# 逆向
| 工具 | 作用 | 免费 |
|:---|:---|:---:|
| **dnSpy / dnSpyEx** | 集成 .NET 反编译 + 调试 | ✅ |
| **ILSpy** | 开源 C# 反编译 | ✅ |
| dotPeek | JetBrains 反编译 | ✅ |
| de4dot | .NET 程序集去混淆 | ✅ |
| Frida-CLR | .NET 方法 Hook | ✅ |
## 🚀 快速开始
### 1. 克隆仓库
```
git clone https://github.com/NDXDeveloper/reverse-engineering-gcc-gpp-training.git
cd reverse-engineering-gcc-gpp-training
```
### 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 ← no optimization, with symbols (-O0 -g)
*_O2 ← -O2 optimized, with symbols
*_O3 ← -O3 optimized, with symbols
*_strip ← stripped (no symbols, -O0 -s)
*_O2_strip ← optimized + stripped (most realistic case)
```
### 5. 开始培训
```
# 打开详细目录
xdg-open TABLE-OF-CONTENTS.md
```
或者直接从 **[第 1 章 — 什么是逆向工程?](/01-introduction-re/README.md)** 开始
## ⚠️ 警告 — 第六部分(恶意软件)
第 27 章和第 28 章的二进制文件(`ch27-ransomware/`, `ch28-dropper/`)是**故意限制功能的用于教育目的的原型**:
- 勒索软件仅使用硬编码的 AES 密钥加密 `/tmp/test/`
- Dropper 仅与 `127.0.0.1:4444` 通信,不包含持久化机制
- **切勿在与网络隔离的快照虚拟机之外编译或运行它们**
**[第 26 章](/26-secure-lab/README.md)** 详细介绍了安全实验室的设置 —— 必须在开始第 27-29 章的工作之前完成该设置。
## 📚 目录
| 部分 | 内容 | 章节 |
|:---|:---|:---:|
| **[I](/part-1-fundamentals.md)** — 基础 | 逆向工程简介、GNU 工具链、x86-64 汇编、环境 | 1 – 4 |
| **[II](/part-2-static-analysis.md)** — 静态分析 | Binutils、ImHex、objdump、Ghidra、IDA、Radare2、Binary Ninja、差异比对 | 5 – 10 |
| **[III](/part-3-dynamic-analysis.md)** — 动态分析 | GDB、GEF/pwndbg、Frida、Valgrind/Sanitizers、AFL++/libFuzzer | 11 – 15 |
| **[IV](/part-4-advanced-techniques.md)** — 高级技术 | GCC 优化、C++ 逆向工程、符号执行、反逆向、反编译 | 16 – 20 |
| **[V](/part-5-practical-cases.md)** — 实战案例 | Keygenme、OOP + 插件、网络、加密、自定义格式 | 21 – 25 |
| **[VI](/part-6-malware.md)** — 恶意软件(沙箱) | 安全实验室、勒索软件、Dropper、脱壳 | 26 – 29 |
| **[VII](/part-7-dotnet.md)** — 附加 .NET/C# | .NET 逆向工程、ILSpy、dnSpy、Frida-CLR | 30 – 32 |
| **[VIII](/part-8-rust-go.md)** — 附加 Rust & Go | Rust 逆向工程特性、Go 逆向工程特性 | 33 – 34 |
| **[IX](/part-9-resources.md)** — 资源 | 脚本编写、自动化、CTF、阅读材料、认证 | 35 – 36 |
➡️ **[详细目录 (TABLE-OF-CONTENTS.md)](/TABLE-OF-CONTENTS.md)**
## 🧭 推荐路径
根据您的背景,您可以按线性顺序或以有针对性的方式进行培训:
| 目标 | 建议路径 |
|:---|:---|
| **完整培训** | 按顺序完成第 I → IX 部分 |
| **快速入门逆向工程** | 第 1-5 章,然后第 11 章,接着第 21 章 (keygenme) |
| **为 CTF 做准备** | 第 3、5、8、11、13、18、21 章 |
| **恶意软件分析** | 第 I-III 部分,然后直接进行第 VI 部分 |
| **仅限 .NET / C# 逆向工程** | 第 1 章,然后第 VII 部分 |
| **Rust / Go 逆向工程** | 第 1-5、8、11 章,然后第 VIII 部分 |
## 🎯 检查点
每个章节(或章节组)都以一个**检查点**结束:这是一个实践练习,用于验证您在继续之前所学的内容。解答位于 `solutions/` 目录中。
## 📄 许可证
[MIT](/LICENSE) — © 2025-2026 [Nicolas DEOUX / NDXDeveloper]
本内容严格用于教育和道德目的。请参阅 [完整免责声明](/LICENSE)。
标签:AFL, angr, C++, DAST, DNS 反向解析, Docker支持, ELF, Frida, G++, GCC, GDB, Ghidra, Go语言, Rust, TLS抓取, UML, URL提取, Wayback Machine, YARA, 二进制分析, 云安全监控, 云安全运维, 云资产可视化, 云资产清单, 反汇编, 反编译, 客户端加密, 恶意软件分析, 教学课程, 数据擦除, 漏洞分析, 程序破解, 符号执行, 网络安全, 网络流量审计, 网络调试, 自动化, 自定义密码套件, 路径探测, 软件安全, 逆向工具, 逆向工程, 隐私保护, 静态分析