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规则, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码混淆, 内存安全, 反汇编, 反编译, 可观察性, 可视化界面, 可配置连接, 客户端加密, 快速连接, 恶意软件分析, 情报收集, 技术教程, 日志审计, 汇编语言, 法国课程, 漏洞研究, 程序分析, 程序破解, 符号执行, 网络安全, 自定义密码套件, 软件破解, 逆向工具, 逆向工程, 隐私保护, 静态分析