TL;DR. Cada generación de Windows reescribió la estructura del AppCompatCache. XP usa un magic 0xDEADBEEF y un registro fijo de 552 bytes; Server 2003, Vista/2008, Windows 7/2008 R2 y Windows 8/8.1 tienen cada uno su propia cabecera y disposición de entrada. Un parser debe ramificar según el magic de cabecera — no hay un formato único.
La mayoría de la documentación de ShimCache cubre la disposición de Windows 10/11. Pero quienes responden a incidentes aún se topan con controladores de dominio Windows 7, máquinas Server 2008 R2 y el ocasional equipo XP. La estructura en disco en esos hosts es materialmente distinta. Esta es la referencia por versión.
Por qué no hay un formato único
ShimCache es una estructura interna de Windows sin especificación pública. Microsoft la remodeló a lo largo de las versiones según evolucionaba la infraestructura de shims. El nombre y la ruta del valor de registro también cambiaron. Un parser robusto identifica la versión desde la cabecera antes de leer una sola entrada.
Chuleta por versión
| Windows | Valor de registro | Magic de cabecera | Forma de entrada |
|---|---|---|---|
| XP (32 bits) | …\AppCompatibility\AppCompatCache | 0xDEADBEEF | Registros fijos de 552 bytes, máx. 96 |
| Server 2003 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Entradas de 24 bytes (x86) / 32 bytes (x64) |
| Vista / 2008 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Como 2003, distintos flags |
| Windows 7 / 2008 R2 | …\AppCompatCache\AppCompatCache | 0xBADC0FEE | Cabecera de 32 bytes; las entradas llevan el flag de inserción |
| Windows 8 / 2012 | …\AppCompatCache\AppCompatCache | 0x00000080 | Firma de entrada 00ts de longitud variable |
| Windows 8.1 / 2012 R2 | …\AppCompatCache\AppCompatCache | 0x00000080 | Firma de entrada 10ts |
(La disposición moderna 10ts/00ts de Windows 10/11 se detalla por separado.)
XP — el caso atípico
Windows XP no se parece a nada de lo que vino después: un magic 0xDEADBEEF, registros de ancho fijo de 552 bytes, un tope estricto de 96 entradas y rutas UTF-16 rellenadas a una longitud fija. También almacenaba una marca de última actualización y un campo de tamaño de archivo que las versiones posteriores abandonaron. Si ves 0xDEADBEEF, estás en territorio XP y ninguna lógica de análisis moderna aplica.
Windows 7 — el que más te encontrarás
Windows 7 / Server 2008 R2 sigue siendo común en respuesta a incidentes. Magic 0xBADC0FEE, cabecera de 32 bytes y registros por entrada que incluyen la ruta, la fecha de última modificación del archivo y — singularmente útil — un flag de ejecución que se eliminó a partir de Windows 8. En Windows 7 un flag activado es una corroboración razonable (no absoluta) de ejecución; no lo extrapoles a sistemas más nuevos, como se explica en ¿demuestra el ShimCache la ejecución?.
La transición 8 / 8.1
Windows 8 introdujo la entrada de longitud variable con una firma por entrada (00ts), y 8.1 la subió a 10ts. Es el ancestro estructural del formato de Windows 10/11, así que un parser que maneje 8.1 está casi listo para manejar 10.
Analizarlos sin una cadena de herramientas
El Shimcache Parser detecta automáticamente el magic de cabecera y ramifica al decodificador correcto para XP, 2003, Vista, 7, 8, 8.1 y 10/11 — así puedes leer una colmena SYSTEM heredada en el navegador sin desplegar herramientas antiguas. Para la recolección en estos sistemas antiguos, ver adquirir una colmena SYSTEM.
Lectura adicional
- Mandiant: leveraging the ShimCache — la ingeniería inversa original por versión.
- AppCompatCacheParser de Eric Zimmerman — maneja todas las versiones; una buena verdad de referencia.