(TAOMF) Fonctionnement d'un packer

L'ensemble des articles tagués TAOMF ont été écrit à partir d'un ensemble de notes prises suite à la lecture du livre "The Art Of Memory Forensic" écrit par Michael Hale Ligh, Andrew Case, Jamie Levy et Aaron Walters.

Tout les crédits de ces articles leur reviennent donc de droits. Par ailleurs je vous invite vraiment à lire ce livre qui est une mine colossale d'informations.


Les packers sont des utilitaires dont le but est à la fois de compresser un exécutable mais aussi de le chiffrer. Cette double fonction est utilisée à la fois du coté des éditeurs et des attaquants dans le but de ralentir le processus de reverse engineering.

Donc, classiquement un exécutable, avant d'être packé a cette structure:

L'exécutable, une fois mappée en mémoire sera lancé via l'appel de la fonction main ou DllMain (suivant si l'exécutable est un PE ou une DLL):

Un exécutable packé verra l'ensemble de ses sections compressées puis chiffrées à l'exception des Headers PE qui, eux, ne peuvent pas être packés. A ces sections chiffrées sera ajoutée une routine d'unpacking qui permettra de déchiffrer/décompresser les sections packées:

Ainsi lorsque l'exécutable packé est chargé en mémoire, la fonction d'unpacking est appelée en première et va déchiffrer/décompresser le binaire authentique puis jumper directement sur la fonction main ou DllMain.

L'analyse d'un binaire packé n'est pas possible puisque son contenu est chiffré. Pour accéder à son contenu on pourra lancer le binaire dans une VM cloisonnée puis faire un dump de sa RAM.