Post

Reverse Engineering Malware 101 — le workshop de MalwareUnicorn

Compte-rendu du workshop RE101 de MalwareUnicorn : analyse statique et dynamique de malwares, assembleur x86, fichiers PE, outils et progression.

Reverse Engineering Malware 101 — le workshop de MalwareUnicorn

Le RE101 (Reverse Engineering Malware 101) de MalwareUnicorn (Amanda Rousseau) est LE workshop gratuit de référence pour apprendre l’analyse de malware. Après Bandit et Leviathan, c’est le chaînon suivant dans ma progression : on passe des binaires setuid d’OverTheWire à de vrais programmes malveillants. Voici mon compte-rendu + ma feuille de route.


🎯 En bref

Le RE101 est un atelier pratique auto-rythmé : pas de vidéo, pas de cours magistral — une page web qui vous guide pas à pas dans l’analyse d’un malware factice (Unknown.exe), de la mise en place de l’environnement jusqu’au debugging manuel.

Prérequis matériel : 8 Go de RAM minimum, 40 Go de stockage, une connexion internet. C’est tout — le reste (VirtualBox, VM Victime, VM Sniffer) est téléchargé pendant l’atelier.

Ce qu’on y apprend :

  1. Monter un environnement d’analyse sûr (VM isolées)
  2. Les concepts OS et assembleur (architecture Windows, PE, pile, registres)
  3. Le flux d’attaque typique, les classes de malware et leurs techniques
  4. Les désassembleurs, debuggers et la collecte d’informations
  5. L’analyse statique, puis dynamique, puis le debugging manuel

🗺️ Le Game Plan — l’état d’esprit

Avant tout outil, l’atelier pose sa philosophie. Un reverse engineer doit :

PrincipeTraduction
Determine what are the goalsSavoir ce qu’on cherche avant de chercher
Get to just what you needOu en savoir assez pour recréer le comportement
Use reconnaissance & triageRecon et triage pour choisir le point de départ
Work step by stepAvancer étape par étape
Record your findingsTracer ses découvertes tout au long de l’analyse

🔄 L’Analysis Flow — la méthode en 5 étapes

C’est LA partie la plus précieuse du workshop, une méthode réutilisable sur n’importe quel binaire :

1
2
3
4
5
1. Setup d'un environnement de référence (baseline)
2. Triage → déterminer un point de départ
3. Analyse statique → avoir une idée d'où tout se trouve avant de débugger
4. Analyse dynamique → observer les comportements invisibles en statique
5. Debugging manuel → avancer pas à pas vers ses objectifs

🖥️ L’environnement : Victime + Sniffer

Point crucial : on n’analyse jamais du malware sur sa machine de tous les jours.

  • Victim VM : la machine infectée. Aucun accès internet ni partage réseau avec l’hôte
  • Sniffer VM : le rôle passif — elle sert et surveille le trafic de la Victime
  • Les deux tournent dans un réseau fermé VirtualBox (re101net), connectées entre elles mais coupées du monde extérieur

La Victime « croit » avoir internet (le Sniffer lui répond), mais rien ne sort de la boîte. Idéal pour observer des command-and-control factices sans risque.


🪟 Les fondamentaux : Windows & l’assembleur

Avant de toucher au malware, le RE101 pose les bases théoriques — denses mais limpides :

PE Header & mémoire

Un exécutable Windows (PE) commence par une en-tête décrivant sa structure (sections, point d’entrée, imports…). Comprendre le memory layout (comment le chargeur place les sections en mémoire) est indispensable pour lire un dump mémoire ou suivre un loader.

La pile (stack)

NotionRôle
StackZone mémoire LIFO pour les appels de fonction et variables locales
Push/PopEmpiler / dépiler des valeurs
Call/RetAppeler une fonction / y revenir
Variables localesRéservées sur la pile, adressées relativement au pointeur de base

Opcodes, instructions & registres

Un programme machine = une suite d’opcodes (octets) que le processeur décode en instructions (mov, push, call, jmp…). Les calculs passent par les registres :

Registre x86Rôle classique
EAXAccumulateur (résultats, retours de fonctions)
EBX/ECX/EDXUsage général / compteur de boucle
ESPStack Pointer (sommet de la pile)
EBPBase Pointer (base du frame courant)
EIPInstruction Pointer (prochaine instruction)
EFLAGSDrapeaux (zéro, signe, carry…)

Le clavier d’IDA Free et de x64dbg est fourni — c’est un vrai bonus, ces raccourcis deviennent nos réflexes.


🦠 Classes de malware & techniques

Le RE101 catalogue ce qu’on va trouver sur le terrain :

CatégorieTechniques typiques
Compression / packersUPX et autres packers — le binaire « s’auto-décompresse » à l’exécution
ObfuscationBrouiller les chaînes, le flux, les constantes
PersistenceSe relancer au boot / à la connexion
Privilege EscalationMonter en droits (UAC bypass, exploits…)
Defense EvasionDétecter les sandboxes, désactiver les AV
Credential TheftVoler mots de passe, cookies, tokens
ReconnaissanceCartographier la machine / le réseau
Lateral MovementSe propager sur le réseau

🧪 L’exercice : Unknown.exe pas à pas

La partie pratique suit exactement l’Analysis Flow :

  1. Lancer la Victim VM, vérifier l’en-tête du fichier et les infos du PE
  2. Collecter le hash MD5 (identité unique du binaire → VirusTotal)
  3. Exécuter Unknown.exe, observer le réseau dans Wireshark
  4. Arrêter le monitoring procmon.exe et résumer tous les détails
  5. Ouvrir Unknown.exe dans IDA, repérer les chaînes (anti-analyse : fausses chaînes → vrai point d’entrée)
  6. Tracer jusqu’à la fonction de départ, analyser sub_401000 (version C + version assembleur)
  7. Récupérer stage2.exe, chercher les chaînes intéressantes, tracer la fonction
  8. Reconnaître les buffers, tester le résultat de la requête HTTP, buffer check
  9. Atteindre l’EntryPoint, poser des breakpoints, manipuler le contrôle de flux (contourner les vérifications), exécuter

C’est un exercice complet : triage, statique, dynamique et debug — exactement le workflow d’un analyste malware en entreprise.


🔬 Pour aller plus loin : statique vs dynamique vs debug

La distinction qui structure tout le workshop :

ApprocheCe qu’on faitCe qu’on y gagneLimite
StatiqueLire le binaire sans l’exécuter (strings, imports, IDA)Vue d’ensemble rapide, pas de risqueLe code packé/obfusqué est illisible
DynamiqueL’exécuter dans un environnement contrôlé (procmon, Wireshark)Voir les comportements réels (fichiers, réseau)Le malware peut détecter la sandbox
DebuggingPas à pas avec breakpoints (x64dbg)Comprendre la logique exacte, modifier le fluxLe plus long, le plus exigeant

Le réflexe RE101 : commencer par le triage (hash + VirusTotal + PE header), puis statique, puis dynamique, et ne sortir le debugger que pour les fonctions qui résistent.


🧭 Mes conseils de progression

Le RE101 suppose qu’on sait déjà lire un peu de code et manipuler un système. Mon ordre recommandé (et ce que je fais) :

1
2
3
4
5
1. Bandit (OverTheWire)        ✅ — les fondamentaux Linux, le shell
2. Leviathan (OverTheWire)     ✅ — premiers binaires setuid, ltrace, registres
3. RE101 de MalwareUnicorn     ⬅️ — on est là : assembleur x86 + analyse Windows
4. RE102 de MalwareUnicorn     ⬜ — approfondir (désassemblage avancé)
5. Ghidra / IDA en pratique    ⬜ — un vrai binaire de CTF (Narnia, Behemoth...)

Concrètement, ce post fait suite à mes deux wargames : Bandit pour les fondamentaux du shell, puis Leviathan pour la première approche du reverse (setuid, ltrace, registres, little-endian) — le RE101 prolonge exactement cette courbe en passant à l’architecture Windows et à l’analyse de vrais échantillons.

Mes 5 conseils concrets :

  1. Ne sautez pas les bases : le chapitre assembleur du RE101 (registres, pile, opcodes) est le socle de tout le reste — c’est là que Leviathan m’a le mieux préparé
  2. Suivez l’Analysis Flow à la lettre : triage → statique → dynamique → debug. C’est la méthode, pas un détail
  3. Prenez des notes structurées : le workshop insiste sur le recording — c’est ce qui fait la différence entre « j’ai suivi » et « je sais faire »
  4. Refaites l’exercice sans le guide : une fois Unknown.exe terminé, refaites-le avec stage2.exe en autonomie
  5. Complétez avec les ressources du workshop : Art of Assembly Language (la référence assembleur), les posts de MalwareTech et le blog d’Hexacorn (How to become the best Malware Analyst E-V-E-R)

📚 Ressources liées

Prochaine étape : RE102, puis un premier vrai binaire de CTF au désassembleur. Stay tuned ! 🚀

Cet article est sous licence CC BY 4.0 par l'auteur.