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, 二进制分析, 云安全监控, 云安全运维, 云资产可视化, 云资产清单, 反汇编, 反编译, 客户端加密, 恶意软件分析, 教学课程, 数据擦除, 漏洞分析, 程序破解, 符号执行, 网络安全, 网络流量审计, 网络调试, 自动化, 自定义密码套件, 路径探测, 软件安全, 逆向工具, 逆向工程, 隐私保护, 静态分析