Le reverse engineering d’un binaire protégé commence souvent par une frustration : Ghidra ou IDA Pro affichent une entrée incompréhensible, la décompilation ne retourne que du bruit, et les chaînes de caractères sont illisibles. La plupart du temps, le binaire est packé. Comprendre les packers — leur fonctionnement, leurs astuces et les méthodes pour les contourner — est une compétence fondamentale en analyse binaire.
Qu’est-ce qu’un packer PE ?
Un packer est un outil qui transforme un exécutable Windows (format PE, Portable Executable) en un autre exécutable auto-extractible. L’exécutable original est compressé et/ou chiffré, puis encapsulé dans un stub : un petit programme dont le seul rôle est de restaurer le code original en mémoire au moment de l’exécution, avant de lui céder le contrôle.
OEP (Original Entry Point) : le point d’entrée du programme original, caché derrière le stub.
Les packers courants
| Packer | Utilisation | Détection |
|---|---|---|
| UPX | Compression légitime, open-source | Triviale (section .UPX0) |
| MPRESS | Compression, parfois malware | Facile |
| ASPack | Protection logicielle | Modérée |
| Themida / WinLicense | Protection commerciale forte | Difficile |
| Packers custom | Malware, outils offensifs | Variable |
L’outil Detect-It-Easy (DIE) permet d’identifier rapidement la signature d’un packer connu via ses heuristiques de détection.
Anatomie du stub
Le stub suit généralement la même logique, quelle que soit l’implémentation :
- Allouer de la mémoire :
VirtualAllocpour créer une zone exécutable - Décompresser / déchiffrer : restaurer le PE original (LZMA, aPlib, XOR, AES…)
- Reconstruire les imports : remplir manuellement l’IAT (Import Address Table) en appelant
LoadLibrary/GetProcAddress - Appliquer les relocations si le binaire n’est pas chargé à son adresse préférée
- Transférer le contrôle :
jmp OEPpour démarrer le programme original
Techniques anti-analyse embarquées
Les packers malveillants ou les protecteurs commerciaux ajoutent des couches supplémentaires pour ralentir l’analyse :
Anti-debug
; Détection via IsDebuggerPresent
call IsDebuggerPresent
test eax, eax
jnz exit_process
; Détection via PEB.BeingDebugged directement
mov eax, fs:[30h] ; PEB
movzx eax, byte [eax+2] ; BeingDebugged flag
test eax, eax
jnz exit_process
Timing checks
Mesure du delta entre deux RDTSC : si le délai est trop grand (un débogueur a mis en pause l’exécution), le programme s’arrête ou se corrompt.
Anti-VM
Vérification de la présence de drivers VMware (vmhgfs.sys, vboxsf.sys), de clés de registre ou d’artefacts CPUID propres aux hyperviseurs.
TLS callbacks
Des callbacks TLS (Thread Local Storage) s’exécutent avant le point d’entrée déclaré dans le PE. Beaucoup d’analystes débutants manquent cette exécution de code précoce.
Techniques de dépaquetage
Dépaquetage dynamique (le plus universel)
L’approche consiste à laisser le stub faire son travail — décompresser le code en mémoire — puis à dumper la mémoire au bon moment pour capturer le PE restauré.
Moment optimal pour dumper : juste après le saut vers l’OEP.
Avec x64dbg :
- Poser un breakpoint sur
VirtualAllocpour identifier la zone décompressée - Suivre l’exécution jusqu’au
jmp OEP - Utiliser le plugin Scylla pour dumper la mémoire et reconstruire l’IAT
- Analyser le dump dans PE-bear ou IDA Pro
Dépaquetage statique
Pour les packers connus et simples (UPX), il existe des outils de décompression statique qui restaurent le PE sans exécution :
upx -d binaire_packe.exe
Pour les packers custom avec chiffrement XOR ou AES, il faut extraire la clé depuis le stub et écrire un décrypteur adapté.
Import reconstruction
Après dump, l’IAT est souvent corrompue ou remplie de thunks vers le résolveur du stub. Scylla analyse les appels indirects pour retrouver les imports réels et reconstruire une IAT valide.
Pourquoi c’est important
Comprendre les packers est indispensable pour :
- Analyse de malware : la quasi-totalité des malwares modernes sont packés pour échapper à la détection statique
- Audit de protection : évaluer la robustesse d’un protecteur commercial avant de le recommander
- Développement d’outils offensifs : concevoir ses propres stubs pour livrer des payloads sans signature connue
Conclusion
Les packers PE sont à la fois un outil de protection légitime et un mécanisme d’évasion redoutable. Leur analyse ne se limite pas à cliquer sur “unpack” — les implémentations modernes combinent anti-debug, anti-VM, timing checks et chiffrement pour résister à l’analyse automatique. Maîtriser x64dbg, Scylla et PE-bear, combinés à une solide compréhension du format PE, est le point de départ pour venir à bout de n’importe quel packer.