Skip to content

Décrivez comment vous décompressez un échantillon packé pour atteindre le code original.

Réponse courte

La décompression récupère le code original que le packer a caché. Pour les packers connus, vous utilisez le décompresseur correspondant ou un émulateur. Pour les packers personnalisés, vous décompressez manuellement : exécutez l'échantillon dans un débogueur, laissez le stub décompresser la charge utile en mémoire, trouvez le moment où il saute vers le point d'entrée original (souvent en posant un point d'arrêt sur de la mémoire qui devient exécutable, ou sur le saut de queue), puis dumpez l'image du processus depuis la mémoire et reconstruisez la table d'adresses d'imports avec un outil comme Scylla ou PE-sieve. Le résultat est un PE exécutable ou analysable contenant la véritable charge utile.

La décompression est la porte que vous devez franchir avant l'analyse statique en profondeur de la plupart des malwares : le désassembleur ne voit que le stub jusqu'à ce que vous récupériez la véritable charge utile. Les recruteurs s'en servent pour tester si vous comprenez ce qu'un packer fait à la mémoire à l'exécution, et pas seulement que le packing existe.

Packers connus — prendre le raccourci

Si un détecteur comme Detect It Easy nomme un packer courant (UPX, ASPack, anciennes versions de Themida), commencez par l'outil correspondant : upx -d pour UPX, des décompresseurs dédiés, ou un décompresseur par émulation qui exécute le stub dans un CPU sandboxé et dumpe le résultat. C'est rapide et cela vaut la peine d'être essayé avant tout travail manuel.

Packers personnalisés — décompression manuelle

Lorsqu'il n'existe pas de décompresseur prêt à l'emploi, vous décompressez à la main :

  1. Exécutez le stub sous un débogueur (x64dbg). Le stub va allouer de la mémoire et y décompresser ou déchiffrer la charge utile.
  2. Trouvez le point d'entrée original (OEP). Techniques courantes : posez un point d'arrêt matériel sur exécution sur la mémoire fraîchement allouée/écrite pour attraper la première instruction du vrai code ; guettez le saut de queue (un jmp/ret vers une autre section) ; ou posez un point d'arrêt sur une API révélatrice que la charge utile appelle tôt. Des outils comme PE-sieve peuvent aussi détecter automatiquement la région décompressée.
  3. Dumpez l'image du processus depuis la mémoire une fois que l'exécution atteint l'OEP.

Reconstruire les imports

Un dump mémoire brut a généralement une table d'adresses d'imports cassée, parce que le packer a résolu les API à l'exécution et que l'IAT sur disque est vide ou obsolète. Utilisez Scylla (souvent intégré à x64dbg) ou PE-sieve/pe_unmapper pour reconstruire l'IAT et réparer le point d'entrée, produisant un PE propre et analysable.

Une réponse de niveau senior nomme la stratégie de recherche de l'OEP, le dump mémoire et la reconstruction de l'IAT comme les trois véritables obstacles — et note que pour le triage, vous pouvez simplement lire la charge utile décompressée depuis un dump mémoire de sandbox au lieu de la réparer entièrement.

Questions de suivi probables

  • Comment trouvez-vous le point d'entrée original (OEP) pour un packer personnalisé ?
  • Pourquoi un dump mémoire a-t-il généralement une table d'imports cassée, et comment la réparer ?
  • Quand PE-sieve ou un décompresseur dynamique l'emporterait-il sur la décompression manuelle ?

Sources

Certifications

Recevez 100 questions d'entretien en cybersécurité + réponses

Laissez votre e-mail et nous vous enverrons le pack PDF gratuit et le jeu de flashcards.

Pas de spam. Désabonnez-vous à tout moment.