TL;DR. Usa el AppCompatCacheParser de Eric Zimmerman para casework. Cobertura de OS más amplia, salida CSV, bien probado. Usa Velociraptor para triage en vivo a escala de flota. Usa el Mandiant Shim Cache Parser cuando ayude una referencia simple en Python. Usa esta herramienta cuando quieras cero instalación y cero subida. Cross-valida cuando haya discrepancias. El formato es lo bastante quisquilloso como para que dos parsers vean ocasionalmente las cosas de forma diferente.
Hay cuatro herramientas abiertas que importan para el parseo de ShimCache. Cada una tiene su nicho. El error que veo cometer a los analistas junior es elegir una y tratarla como la respuesta para cada caso. La respuesta correcta depende de si estás escalando, scripteando o mirando un solo hive a las 2 de la mañana.
Los cuatro parsers que importan
| Herramienta | Lenguaje | Distribución | Mejor para |
|---|---|---|---|
| Mandiant Shim Cache Parser | Python | Código en GitHub | Leer el formato, scriptear análisis a medida |
| Eric Zimmerman AppCompatCacheParser | C# / .NET | Binario único | Casework. Lo más fiable para informes en producción. |
Velociraptor Windows.Registry.AppCompatCache | VQL | Servidor Velociraptor | Recolección en vivo a escala de flota |
| Shimcache Parser (esta herramienta) | Rust → WebAssembly | Solo navegador, sin instalación | Triage rápida sin setup, los datos no salen de la máquina |
Cuándo tirar de cuál
AppCompatCacheParser de Eric Zimmerman
El estándar de facto para análisis offline. Cubre cada variante de Windows desde XP hasta Windows 11, reproduce los registros de transacciones de SYSTEM automáticamente, y produce CSV que entra limpio en Timeline Explorer. Si tu salida va a un informe final, esto es lo que los revisores esperan que hayas usado.
AppCompatCacheParser.exe -f SYSTEM --csv .
Pegas: solo binario para Windows, necesita .NET Framework o Core, no está pensado para triage ad hoc desde navegador.
Velociraptor
Cuando necesitas sacar ShimCache de docenas o miles de hosts, Velociraptor gana. El artefacto lee el cache en memoria directamente de endpoints en ejecución, que es la misma vista que el SO habría volcado al apagar pero sin esperar al apagado. Mira extraer el ShimCache de un volcado de memoria para el razonamiento.
Pegas: requiere infraestructura Velociraptor. Excesivo para análisis puntual.
Mandiant Shim Cache Parser
El proof-of-concept Python original. Menos pulido que la herramienta de EZ pero útil cuando quieres leer el código para entender exactamente cómo se decodifica el formato, o para scriptear análisis a medida. La salida es texto plano; intégralo con otras pipelines Python.
python ShimCacheParser.py -t -h /path/to/SYSTEM
Pegas: requiere Python 2.x o un fork de compatibilidad. La salida CSV / JSON está menos pulida que la de EZ.
Este Shimcache Parser
Existe para dos casos que los demás no cubren bien:
- Triage sin instalación. Abre la página, suelta un hive, ve entradas. Útil cuando estás en un host sin tooling DFIR instalado, o analizando en un portátil o equipo prestado.
- Análisis sensible en confianza. El hive se parsea por completo en tu navegador via WebAssembly. El archivo nunca sale de la página, nunca toca un servidor, nunca aparece en ningún log. Eso importa cuando el hive pertenece a un cliente o un caso en que la subida no es aceptable.
Compromisos: sin interfaz de línea de comandos, sin hooks de automatización. Úsalo para triage dirigida por humanos, no para pipelines. Para pipelines, la herramienta de EZ es la respuesta correcta.
Cross-validación cuando los parsers discrepan
El formato binario no perdona. La referencia del layout Windows 10/11 muestra por qué un solo error de conteo de offset puede cascadear por el resto del blob. En la práctica los parsers suelen coincidir, pero los hives del mundo real a veces traen datos ligeramente fuera de spec, y los parsers discrepan en:
- Detección de bitness en hives Win7. El header no dice de forma inequívoca x86 vs x64, así que los parsers eligen heurísticamente. Un par de herramientas produciendo rutas diferentes en el mismo hive es la señal.
- Normalización de rutas. Escape de backslash, mayúsculas/minúsculas en la letra de unidad, marcadores
\??\iniciales. Diferentes parsers normalizan de formas diferentes. - Entradas vacías o placeholder. Algunas herramientas emiten filas en blanco para slots sin usar; otras las saltan.
Cuando importa, ejecuta dos parsers y haz diff. Las combinaciones a las que tiro:
- EZ + esta herramienta para cross-check rápido.
- EZ + Mandiant para un sanity check "Python vs C#".
- EZ + Velociraptor para una comparativa "en memoria en vivo vs hive en disco".
Trampas comunes
- No olvides los registros de transacciones.
SYSTEM.LOG1ySYSTEM.LOG2llevan escrituras pendientes; sin ellos lees un hive obsoleto. La herramienta de EZ los reproduce automáticamente. Algunas otras no. Mira adquirir un hive SYSTEM. - No compares ShimCache en disco y en memoria directamente. Son fuentes de verdad distintas. El de disco solo tiene el estado del último apagado limpio. El de memoria tiene la sesión actual. Trátalos como complementarios.
- No asumas ejecución. Ningún parser puede arreglar esto. El cache registra examen, no ejecución.
Lectura adicional
- AppCompatCacheParser de Eric Zimmerman. parser de referencia.
- Shim Cache Parser de Mandiant. implementación Python original.
- Velociraptor
Windows.Registry.AppCompatCache. artefacto VQL. - Windows 10/11 AppCompatCache deep dive en Ø Security. explica por qué los parsers a veces discrepan.