{"id":48540423,"url":"https://github.com/ndxdeveloper/formation-reverse-engineering-gcc-gpp","last_synced_at":"2026-04-08T04:02:40.833Z","repository":{"id":349029182,"uuid":"1200701891","full_name":"NDXDeveloper/formation-reverse-engineering-gcc-gpp","owner":"NDXDeveloper","description":"Formation complète au Reverse Engineering de binaires ELF (GCC/G++) : 36 chapitres, de l'assembleur x86-64 à l'analyse de malware. Bonus .NET, Rust, Go. Cours de Reverse Engineering : binaires ELF, GCC, Ghidra, GDB, Frida, angr, YARA, ImHex. 36 chapitres + exercices corrigés. FR ","archived":false,"fork":false,"pushed_at":"2026-04-03T22:27:51.000Z","size":1175,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T22:29:31.995Z","etag":null,"topics":["angr","assembly","binary-analysis","course","ctf","cybersecurity","elf","french","frida","gcc","gdb","ghidra","imhex","linux","malware-analysis","pwntools","reverse-engineering","tutorial","x86-64","yara"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NDXDeveloper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-03T18:18:23.000Z","updated_at":"2026-04-03T22:27:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NDXDeveloper/formation-reverse-engineering-gcc-gpp","commit_stats":null,"previous_names":["ndxdeveloper/formation-reverse-engineering-gcc-gpp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/NDXDeveloper/formation-reverse-engineering-gcc-gpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NDXDeveloper%2Fformation-reverse-engineering-gcc-gpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NDXDeveloper%2Fformation-reverse-engineering-gcc-gpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NDXDeveloper%2Fformation-reverse-engineering-gcc-gpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NDXDeveloper%2Fformation-reverse-engineering-gcc-gpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NDXDeveloper","download_url":"https://codeload.github.com/NDXDeveloper/formation-reverse-engineering-gcc-gpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NDXDeveloper%2Fformation-reverse-engineering-gcc-gpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31539230,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angr","assembly","binary-analysis","course","ctf","cybersecurity","elf","french","frida","gcc","gdb","ghidra","imhex","linux","malware-analysis","pwntools","reverse-engineering","tutorial","x86-64","yara"],"created_at":"2026-04-08T04:02:33.408Z","updated_at":"2026-04-08T04:02:40.826Z","avatar_url":"https://github.com/NDXDeveloper.png","language":"Shell","readme":"# Formation Reverse Engineering — Chaîne GNU (GCC/G++)\n\n\u003e **Ce contenu est strictement éducatif et éthique.**  \n\u003e Voir [LICENSE](/LICENSE) pour les conditions d'utilisation complètes.\n\nFormation complète au **Reverse Engineering** de binaires natifs compilés avec la chaîne GNU (GCC/G++), enrichie de modules bonus sur les binaires **.NET/C#**, **Rust** et **Go**.\n\n**36 chapitres** · **9 parties** · **~120 heures** de contenu · **20+ binaires d'entraînement** · **Checkpoints avec corrigés**\n\n---\n\n## 🎯 Objectifs\n\nÀ l'issue de cette formation, vous serez capable de :\n\n- Comprendre la structure interne d'un binaire ELF produit par GCC/G++  \n- Mener une analyse statique complète (désassemblage, décompilation, inspection hexadécimale, diffing)  \n- Mener une analyse dynamique (débogage GDB, hooking Frida, fuzzing AFL++, exécution symbolique angr/Z3)  \n- Reverser du C++ complexe (vtables, RTTI, name mangling, STL, templates, smart pointers)  \n- Identifier et contourner les protections courantes (ASLR, PIE, canaries, RELRO, UPX, obfuscation)  \n- Analyser du code malveillant en environnement isolé (ransomware, dropper, packing)  \n- Appliquer ces techniques sur des binaires .NET/C# (dnSpy, ILSpy, Frida-CLR)  \n- Aborder le RE de binaires Rust et Go (name mangling, runtime, structures spécifiques)  \n- Automatiser vos workflows RE (scripts Python, Ghidra headless, règles YARA, pipelines CI/CD)\n\n---\n\n## 👥 Public visé\n\n| Profil | Prérequis |  \n|:---|:---|  \n| Développeur C/C++ souhaitant comprendre ses binaires | Bases du C/C++ |  \n| Développeur .NET/C# curieux du RE | Bases du C# + notions de compilation |  \n| Développeur Rust/Go confronté à du RE | Bases du langage + notions ELF |  \n| Étudiant en cybersécurité | Bases Linux + ligne de commande |  \n| Participant CTF débutant/intermédiaire | Aucun prérequis RE |\n\n---\n\n## 📦 Structure du dépôt\n\n```\nformation-reverse-engineering-gcc-gpp/\n├── README.md                        ← Ce fichier\n├── SOMMAIRE.md                      ← Table des matières détaillée (36 chapitres)\n├── LICENSE                          ← MIT + disclaimer éthique\n├── check_env.sh                     ← Script de vérification de l'environnement\n│\n├── preface.md                       ← Préface de la formation\n├── partie-1-fondamentaux.md         ← Introduction Partie I\n├── partie-2-analyse-statique.md     ← Introduction Partie II\n├── ...                              ← (une page d'intro par partie)\n├── partie-9-ressources.md           ← Introduction Partie IX\n│\n├── 01-introduction-re/              ← Chapitre 1 — Introduction au RE\n│   ├── README.md\n│   ├── 01-definition-re.md\n│   ├── ...\n│   └── checkpoint.md\n├── 02-chaine-compilation-gnu/       ← Chapitre 2 — Chaîne de compilation GNU\n├── ...                              ← Chapitres 3 à 36 (même structure)\n├── 36-ressources-progresser/        ← Chapitre 36 — Ressources pour progresser\n│\n├── annexes/                         ← Annexes A à K\n│   ├── README.md\n│   └── ...\n│\n├── binaries/                        ← Tous les binaires d'entraînement\n│   ├── Makefile                     ← `make all` pour tout recompiler\n│   ├── ch05-keygenme/               ← Chapitres 5–6 (triage, ImHex)\n│   ├── ch06-fileformat/\n│   ├── ch08-oop/\n│   ├── ch16-optimisations/          ← Chapitre 16 (optimisations GCC)\n│   ├── ch17-oop/                    ← Chapitre 17 (C++ RE)\n│   ├── ch20-keygenme/               ← Chapitre 20 (décompilation)\n│   ├── ch20-network/\n│   ├── ch20-oop/\n│   ├── ch21-keygenme/               ← Chapitre 21 (cas pratique keygenme)\n│   ├── ch22-oop/                    ← Chapitre 22 (cas pratique OOP + plugins)\n│   ├── ch23-network/                ← Chapitre 23 (cas pratique réseau)\n│   ├── ch24-crypto/                 ← Chapitre 24 (cas pratique crypto)\n│   ├── ch25-fileformat/             ← Chapitre 25 (cas pratique format fichier)\n│   ├── ch27-ransomware/             ← ⚠️ Sandbox uniquement\n│   ├── ch28-dropper/                ← ⚠️ Sandbox uniquement\n│   ├── ch29-packed/                 ← Chapitre 29 (packing/unpacking)\n│   ├── ch32-dotnet/                 ← Chapitre 32 (.NET LicenseChecker)\n│   ├── ch33-rust/                   ← Chapitre 33 (crackme Rust)\n│   └── ch34-go/                     ← Chapitre 34 (crackme Go)\n│\n├── scripts/                         ← Scripts Python utilitaires\n│   ├── triage.py                    ← Triage automatique d'un binaire\n│   ├── keygen_template.py           ← Template keygen pwntools\n│   └── batch_analyze.py             ← Analyse batch Ghidra headless\n│\n├── hexpat/                          ← Patterns ImHex (.hexpat)\n│   ├── elf_header.hexpat            ← Header ELF générique\n│   ├── ch06_fileformat.hexpat       ← Format CDB (chapitre 6)\n│   ├── ch23_protocol.hexpat         ← Protocole réseau ch23\n│   ├── ch24_crypt24.hexpat          ← Format CRYPT24 (chapitre 24)\n│   └── ch25_fileformat.hexpat       ← Format CFR (chapitre 25)\n│\n├── yara-rules/                      ← Règles YARA\n│   ├── crypto_constants.yar         ← Détection constantes crypto (AES, SHA, MD5…)\n│   └── packer_signatures.yar        ← Signatures de packers (UPX…)\n│\n└── solutions/                       ← Corrigés des checkpoints (⚠️ spoilers)\n    ├── ch01-checkpoint-solution.md\n    ├── ch02-checkpoint-solution.md\n    ├── ...\n    ├── ch21-checkpoint-keygen.py\n    ├── ch22-checkpoint-plugin.cpp\n    ├── ch23-checkpoint-client.py\n    ├── ch24-checkpoint-decrypt.py\n    ├── ch25-checkpoint-parser.py\n    ├── ch25-checkpoint-solution.hexpat\n    ├── ch27-checkpoint-decryptor.py\n    ├── ch28-checkpoint-fake-c2.py\n    ├── ch34-checkpoint-solution.md\n    └── ch35-checkpoint-batch.py\n```\n\n---\n\n## 🛠️ Outils utilisés\n\n### Analyse statique\n\n| Outil | Rôle | Gratuit |  \n|:---|:---|:---:|  \n| `readelf`, `objdump`, `nm` | Inspection ELF / Binutils | ✅ |  \n| `checksec` | Inventaire des protections | ✅ |  \n| `strace` / `ltrace` | Appels système et bibliothèques | ✅ |  \n| **ImHex** | Hex editor avancé + patterns `.hexpat` + YARA | ✅ |  \n| **Ghidra** | Désassembleur / décompilateur (NSA) | ✅ |  \n| **Radare2 / Cutter** | Analyse CLI + GUI (basé sur Rizin) | ✅ |  \n| IDA Free | Désassembleur de référence (version gratuite) | ✅ |  \n| Binary Ninja Cloud | Désassembleur moderne (version cloud gratuite) | ✅ |  \n| **BinDiff** / Diaphora | Diffing de binaires | ✅ |  \n| **RetDec** | Décompilateur statique offline (CLI) | ✅ |\n\n### Analyse dynamique\n\n| Outil | Rôle | Gratuit |  \n|:---|:---|:---:|  \n| **GDB** + GEF / pwndbg / PEDA | Débogage natif amélioré | ✅ |  \n| **Frida** | Instrumentation dynamique + hooking | ✅ |  \n| `pwntools` | Scripting d'interactions avec un binaire | ✅ |  \n| Valgrind / ASan / UBSan / MSan | Analyse mémoire et comportement runtime | ✅ |  \n| **AFL++** / libFuzzer | Fuzzing coverage-guided | ✅ |  \n| **angr** | Exécution symbolique | ✅ |  \n| **Z3** | Solveur de contraintes (SMT) | ✅ |\n\n### Reverse .NET / C#\n\n| Outil | Rôle | Gratuit |  \n|:---|:---|:---:|  \n| **dnSpy / dnSpyEx** | Décompilation + débogage .NET intégré | ✅ |  \n| **ILSpy** | Décompilation C# open source | ✅ |  \n| dotPeek | Décompilation JetBrains | ✅ |  \n| de4dot | Désobfuscation d'assemblies .NET | ✅ |  \n| Frida-CLR | Hooking de méthodes .NET | ✅ |\n\n---\n\n## 🚀 Démarrage rapide\n\n### 1. Cloner le dépôt\n\n```bash\ngit clone https://github.com/NDXDeveloper/formation-reverse-engineering-gcc-gpp.git  \ncd formation-reverse-engineering-gcc-gpp  \n```\n\n### 2. Installer les dépendances essentielles (Debian/Ubuntu/Kali)\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y \\\n    gcc g++ make gdb ltrace strace binutils \\\n    bsdextrautils checksec valgrind python3-pip binwalk\n\npip3 install pwntools pyelftools lief frida-tools angr\n\n# AFL++\nsudo apt install -y afl++\n```\n\n\u003e 💡 Pour Ghidra, ImHex et les outils GUI, consultez le **[Chapitre 4](/04-environnement-travail/README.md)** qui détaille l'installation pas à pas.\n\n### 3. Vérifier l'environnement\n\n```bash\nchmod +x check_env.sh\n./check_env.sh\n```\n\nCe script vérifie que tous les outils requis sont installés et fonctionnels.\n\n### 4. Compiler tous les binaires d'entraînement\n\n```bash\ncd binaries/  \nmake all  \n```\n\nChaque `Makefile` de chapitre produit plusieurs variantes :\n\n```\n*_O0          ← sans optimisation, avec symboles (-O0 -g)\n*_O2          ← optimisé -O2, avec symboles\n*_O3          ← optimisé -O3, avec symboles\n*_strip       ← strippé (sans symboles, -O0 -s)\n*_O2_strip    ← optimisé + strippé (cas le plus réaliste)\n```\n\n### 5. Commencer la formation\n\n```bash\n# Ouvrir le sommaire détaillé\nxdg-open SOMMAIRE.md\n```\n\nOu commencez directement par le **[Chapitre 1 — Qu'est-ce que le RE ?](/01-introduction-re/README.md)**\n\n---\n\n## ⚠️ Avertissement — Partie VI (Malware)\n\nLes binaires des chapitres 27 et 28 (`ch27-ransomware/`, `ch28-dropper/`) sont des **prototypes pédagogiques volontairement limités** :\n\n- Le ransomware chiffre uniquement `/tmp/test/` avec une clé AES hardcodée  \n- Le dropper communique uniquement sur `127.0.0.1:4444`, sans persistance  \n- **Ne jamais les compiler ou exécuter en dehors d'une VM snapshottée et isolée du réseau**\n\nLe **[Chapitre 26](/26-lab-securise/README.md)** détaille la mise en place du lab sécurisé — il doit être complété avant tout travail sur les chapitres 27-29.\n\n---\n\n## 📚 Table des matières\n\n| Partie | Contenu | Chapitres |  \n|:---|:---|:---:|  \n| **[I](/partie-1-fondamentaux.md)** — Fondamentaux | Intro RE, chaîne GNU, assembleur x86-64, environnement | 1 – 4 |  \n| **[II](/partie-2-analyse-statique.md)** — Analyse Statique | Binutils, ImHex, objdump, Ghidra, IDA, Radare2, Binary Ninja, diffing | 5 – 10 |  \n| **[III](/partie-3-analyse-dynamique.md)** — Analyse Dynamique | GDB, GEF/pwndbg, Frida, Valgrind/Sanitizers, AFL++/libFuzzer | 11 – 15 |  \n| **[IV](/partie-4-techniques-avancees.md)** — Techniques Avancées | Optimisations GCC, C++ RE, exécution symbolique, anti-reversing, décompilation | 16 – 20 |  \n| **[V](/partie-5-cas-pratiques.md)** — Cas Pratiques | Keygenme, OOP + plugins, réseau, crypto, format custom | 21 – 25 |  \n| **[VI](/partie-6-malware.md)** — Malware (sandbox) | Lab sécurisé, ransomware, dropper, unpacking | 26 – 29 |  \n| **[VII](/partie-7-dotnet.md)** — Bonus .NET/C# | RE .NET, ILSpy, dnSpy, Frida-CLR | 30 – 32 |  \n| **[VIII](/partie-8-rust-go.md)** — Bonus Rust \u0026 Go | Spécificités RE Rust, spécificités RE Go | 33 – 34 |  \n| **[IX](/partie-9-ressources.md)** — Ressources | Scripting, automatisation, CTF, lectures, certifications | 35 – 36 |\n\n➡️ **[Table des matières détaillée (SOMMAIRE.md)](/SOMMAIRE.md)**\n\n---\n\n## 🧭 Parcours recommandés\n\nSelon votre profil, vous pouvez suivre la formation de manière linéaire ou ciblée :\n\n| Objectif | Parcours conseillé |  \n|:---|:---|  \n| **Formation complète** | Parties I → IX dans l'ordre |  \n| **Débuter le RE rapidement** | Chapitres 1–5, puis 11, puis 21 (keygenme) |  \n| **Se préparer aux CTF** | Chapitres 3, 5, 8, 11, 13, 18, 21 |  \n| **Analyse de malware** | Parties I–III, puis Partie VI directement |  \n| **RE .NET / C# uniquement** | Chapitre 1, puis Partie VII |  \n| **RE Rust / Go** | Chapitres 1–5, 8, 11, puis Partie VIII |\n\n---\n\n## 🎯 Checkpoints\n\nChaque chapitre (ou groupe de chapitres) se termine par un **checkpoint** : un exercice pratique qui valide les acquis avant de passer à la suite. Les corrigés sont dans `solutions/`.\n\n\u003e ⚠️ Essayez toujours de résoudre le checkpoint par vous-même avant de consulter la solution.\n\n---\n\n## 🤝 Contribuer\n\nLes contributions sont les bienvenues :\n\n- Correction d'erreurs techniques ou typographiques  \n- Ajout de variantes de binaires d'entraînement  \n- Ajout de patterns `.hexpat` ou de règles YARA  \n- Traduction en anglais de chapitres\n\nMerci d'ouvrir une **issue** avant toute pull request majeure.\n\n---\n\n## 📄 Licence\n\n[MIT](/LICENSE) — © 2025-2026 [Nicolas DEOUX / NDXDeveloper]  \nCe contenu est strictement éducatif et éthique. Voir le [disclaimer complet](/LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndxdeveloper%2Fformation-reverse-engineering-gcc-gpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fndxdeveloper%2Fformation-reverse-engineering-gcc-gpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndxdeveloper%2Fformation-reverse-engineering-gcc-gpp/lists"}