Formatos legacy del ShimCache: Windows XP, 2003, Vista, 7 y 8

4 min de lectura

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 propio header y diseño de entradas. Un parser debe ramificar sobre la magic del header. No hay un único formato.

La mayor parte de la documentación de ShimCache cubre el layout de Windows 10/11, porque eso es lo que ven los investigadores en estaciones de trabajo. Luego te pasan un hive SYSTEM de un domain controller Windows 7, una máquina de aplicación Server 2008 R2 o algún appliance XP ocasional que todavía corre código de negocio, y el parser moderno se niega cortésmente. Esta es la referencia para esos casos.

Por qué no hay un único formato

ShimCache es una estructura interna de Windows sin especificación pública. Microsoft la rehizo entre releases conforme evolucionaba la infraestructura de shim. El nombre y la ruta del valor de registro también se movieron. Un parser robusto identifica la versión desde el header antes de leer una sola entrada. El AppCompatCacheParser de Eric Zimmerman maneja todas las versiones. El Mandiant Shim Cache Parser maneja la mayoría. Implementar el tuyo sin un paso de detección de versión es como producir corrupción silenciosa.

Chuleta por versión

WindowsValor de registroMagic del headerForma de la entrada
XP (32 bits)…\AppCompatibility\AppCompatCache0xDEADBEEFRegistros fijos de 552 bytes, máx 96
Server 2003…\AppCompatCache\AppCompatCache0xBADC0FFEEntradas de 24 bytes (x86) / 32 bytes (x64)
Vista / 2008…\AppCompatCache\AppCompatCache0xBADC0FFEComo 2003, flags diferentes
Windows 7 / 2008 R2…\AppCompatCache\AppCompatCache0xBADC0FEEHeader de 32 bytes; las entradas llevan el flag de inserción
Windows 8 / 2012…\AppCompatCache\AppCompatCache0x00000080Firma de entrada 00ts de longitud variable
Windows 8.1 / 2012 R2…\AppCompatCache\AppCompatCache0x00000080Firma de entrada 10ts

El diseño moderno 10ts de Windows 10/11 se detalla por separado.

XP, el bicho raro

Windows XP no se parece a nada después de él. Magic 0xDEADBEEF, registros de ancho fijo de 552 bytes, un tope duro de 96 entradas, rutas UTF-16 rellenadas hasta una longitud fija. También guardaba un timestamp de última actualización y un campo de tamaño de archivo que las versiones posteriores tiraron. Si ves 0xDEADBEEF, estás en territorio XP y nada de la lógica de parsing moderna aplica. La ruta del registro también se movió: XP guarda el valor bajo AppCompatibility, no AppCompatCache.

Windows 7, el que más te vas a encontrar

Windows 7 y Server 2008 R2 siguen siendo comunes en IR. Magic 0xBADC0FEE, header de 32 bytes y registros por entrada que incluyen la ruta, la fecha de última modificación del archivo y (de utilidad única) un flag de ejecución que se eliminó en Windows 8 y posteriores. En Windows 7, un flag de ejecución activado es una corroboración razonable de ejecución, no absoluta. No extrapoles eso a sistemas más nuevos, como se explica en ¿prueba el ShimCache la ejecución?.

Los hives de Windows 7 también van de la mano con RecentFileCache.bcf, el predecesor de AmCache. Si tienes un SYSTEM Win7, probablemente tengas un RecentFileCache.bcf útil al lado.

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. Este es el ancestro estructural del formato de Windows 10/11, así que un parser que maneje 8.1 está casi listo para manejar 10. La magic del header se movió a 0x00000080 (el offset de la primera entrada), que es la convención que mantuvieron los hives modernos.

Server 2003 y Vista

Magic 0xBADC0FFE. Las entradas son más pequeñas (24 bytes en x86, 32 bytes en x64). Vista añadió una palabra de flags que 2003 no tenía. Ambos son poco comunes en respuesta a incidentes moderna pero aparecen en migraciones lift-and-shift de infraestructura legacy.

Parsearlos sin toolchain

El Shimcache Parser detecta automáticamente la magic del header y ramifica al decodificador correcto para XP, 2003, Vista, 7, 8, 8.1 y 10/11. Puedes leer un hive SYSTEM legacy en el navegador sin montar tooling antiguo. Para guía de recolección en estos sistemas más antiguos, mira adquirir un hive SYSTEM. Para triage de registro más amplio en una máquina legacy, el registry parser maneja las particularidades del formato hive más antiguo.

Lectura adicional

Artículos relacionados