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.