Volver a todos los artículos

Por dentro de la compresión MAM

Un archivo .pf de Windows XP es sencillo: lo abres, lees la cabecera SCCA en el offset cero y parseas hacia abajo. Un archivo .pf de Windows 10 procesado con ese mismo parser produce basura. La razón es MAM.

El framing MAM

A partir de Windows 8, el sistema operativo comprime cada archivo prefetch antes de escribirlo en disco. El archivo comprimido comienza con una cabecera de framing de ocho bytes:

offset  size  field
0       3     ASCII signature "MAM"
3       1     compression algorithm (0x04 = Xpress Huffman)
4       4     uncompressed payload size (u32 little-endian)
8       …     compressed payload

El byte de firma que sigue a MAM identifica el algoritmo de compresión usado en el resto del archivo. Microsoft define cinco algoritmos dentro de la familia COMPRESSION_FORMAT_*; prefetch utiliza Xpress Huffman (0x04) de forma exclusiva. El campo de tamaño sin comprimir indica al descompresor cuán grande debe ser el búfer de salida.

Xpress Huffman en un párrafo

Xpress Huffman es una variante de LZ77 orientada a bloques. Cada bloque empieza con una tabla de alfabeto Huffman de 256 entradas —un nibble por símbolo— que define códigos de bytes literales para 0..255 más códigos de longitud de coincidencia. El flujo codificado se lee como códigos Huffman; cada símbolo o bien emite un byte literal o bien señala una retro-referencia hacia la salida ya descomprimida. El formato está documentado como [MS-XCA] en el corpus de especificaciones abiertas de Microsoft.

El parser que utiliza este sitio (frnsc-prefetch) incorpora una implementación en Rust puro de la decodificación de Xpress Huffman, de modo que todo el pipeline puede ejecutarse dentro de un módulo de WebAssembly: sin saltos a binarios nativos y sin necesidad de ninguna API exclusiva de Windows.

Por qué importa

Las herramientas que solo conocen el formato SCCA de la época de XP leerán los tres primeros bytes de un archivo prefetch de Win 8+ (MAM) y o bien fallarán o bien parsearán mal en silencio. El número de informes forenses que aún incluyen la advertencia "probado en Windows 7" no es precisamente cero. Si recolectas artefactos prefetch de un endpoint moderno y tu cadena de herramientas deja de funcionar, lo primero que conviene comprobar es si dispone siquiera de un decodificador de Xpress Huffman.

La buena noticia es que el formato no ha cambiado desde Windows 8. Una vez que tu cadena de herramientas descomprime correctamente, el mismo recorrido de código funciona hasta Windows 11: lo que varía entre versiones es el payload SCCA que hay dentro, no el envoltorio MAM exterior.