Retour à tous les articles

Au cœur de la compression MAM

Un fichier .pf Windows XP est simple à lire : on l'ouvre, on lit l'en-tête SCCA à l'offset zéro et on descend dans le fichier. Confiez en revanche un fichier .pf Windows 10 à ce même parseur et vous obtiendrez du charabia. La raison tient en trois lettres : MAM.

Le framing MAM

À partir de Windows 8, le système d'exploitation compresse chaque fichier Prefetch avant de l'écrire sur le disque. Le fichier compressé débute par un en-tête de framing de huit octets :

offset  taille  champ
0       3       signature ASCII "MAM"
3       1       algorithme de compression (0x04 = Xpress Huffman)
4       4       taille de la charge non compressée (u32 little-endian)
8       …       charge utile compressée

L'octet de signature qui suit MAM identifie l'algorithme de compression utilisé pour le reste du fichier. Microsoft définit cinq algorithmes dans la famille COMPRESSION_FORMAT_* ; Prefetch utilise exclusivement Xpress Huffman (0x04). Le champ de taille non compressée indique au décompresseur la taille que doit faire le buffer de sortie.

Xpress Huffman en un paragraphe

Xpress Huffman est une variante de LZ77 orientée blocs. Chaque bloc débute par une table d'alphabet Huffman de 256 entrées — un nibble par symbole — qui définit les codes des octets littéraux pour 0..255 ainsi que les codes de longueur de correspondance. Le flux encodé se lit comme une suite de codes Huffman ; chaque symbole produit soit un octet littéral, soit une référence arrière vers la sortie déjà décompressée. Le format est documenté sous la référence [MS-XCA] dans le corpus des spécifications ouvertes de Microsoft.

Le parseur utilisé sur ce site (frnsc-prefetch) embarque une implémentation pure-Rust du décodage Xpress Huffman, ce qui permet d'exécuter l'ensemble de la chaîne dans un module WebAssembly — sans appel à un binaire natif, sans dépendre d'une API spécifique à Windows.

Pourquoi cela compte

Les outils qui ne connaissent que le format SCCA de l'ère XP vont lire les trois premiers octets d'un fichier Prefetch issu de Windows 8+ (MAM) et soit planter, soit produire silencieusement une analyse erronée. Le nombre de retours d'expérience forensiques qui affichent encore la mention « testé sur Windows 7 » n'est pas négligeable. Si vous collectez des artefacts Prefetch sur un poste moderne et que votre chaîne d'outils cesse de fonctionner, la première chose à vérifier est si elle intègre bien un décodeur Xpress Huffman.

La bonne nouvelle, c'est que le format n'a pas évolué depuis Windows 8. Dès que votre outillage décompresse correctement, le même chemin de code fonctionne jusqu'à Windows 11 — ce sont les charges utiles SCCA internes qui diffèrent d'une version à l'autre, pas l'enveloppe MAM extérieure.