Amcache: la referencia forense completa de la hive Windows .hve
TL;DR. Amcache es la hive del Registro de Windows (
Amcache.hve) que escribe el Microsoft Compatibility Appraiser. Registra cada PE que el appraiser vio en disco, con SHA-1, ruta completa, publisher, fecha de link del PE y el tiempo de escritura del appraiser. Los analistas la usan para demostrar que un binario estuvo presente (no necesariamente ejecutado), pivotar por hash entre hosts y recuperar evidencia de herramientas de atacante borradas.
Amcache.hve es la hive que responde a una pregunta que ningún otro artefacto de Windows responde limpiamente: "¿ha estado este ejecutable alguna vez en este host, con qué SHA-1, en qué ruta, más o menos cuándo?"
Esta página es la referencia del artefacto: qué es, dónde vive, cómo lo produce Windows, qué guarda cada clave de primer nivel, cómo usarla en una investigación y cómo se relaciona con artefactos vecinos. Para la cobertura de las herramientas de parsing, ve la guía completa de AmcacheParser. Para la versión corta, ve Entender Amcache.
De un vistazo frente a los vecinos#
| Artefacto | Qué prueba | Hash | Ruta | Capacidad | Origen |
|---|---|---|---|---|---|
| Amcache.hve | Binario presente en host | SHA-1 (primeros 31 MiB) | Completa | Miles | Compatibility Appraiser |
| Shimcache | Visto por el loader | Ninguno | Completa | ~1024 (LRU) | Loader de Application Compatibility |
| Prefetch | Ejecutado | Ninguno | Completa | ~1024 archivos .pf |
Windows Prefetcher |
| SRUM | Recursos consumidos, 30-60 días | Ninguno | Completa | Agregados por app | System Resource Usage Monitor |
| Security 4688 (EVTX) | Proceso creado (tiempo real) | Ninguno | Completa | Limitado por rotación de log | Subsistema de auditoría |
Regla de oro: Amcache para presencia y hash. Shimcache para la atención reciente del loader. Prefetch para ejecución. SRUM para uso a lo largo del tiempo. 4688 para el evento en tiempo real. Detalle por pareja: Amcache vs Shimcache, Amcache vs Prefetch, Amcache vs SRUM, Amcache vs AppCompatCache.
Qué es Amcache en realidad#
Una hive del Registro. Mismo formato binario que SYSTEM, SOFTWARE, SAM, SECURITY y NTUSER.DAT. No es un log, ni una base de datos, ni una lista plana. Un árbol de claves/valores con valores tipados. Esa estructura es lo que la hace a la vez rica y un poco molesta de leer a mano.
La hive la rellena el Microsoft Compatibility Appraiser, una tarea programada en \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser. El appraiser escanea el sistema en busca de software instalado y presente, recoge metadatos del cabecero PE y escribe registros de inventario estructurados en la hive. Aproximadamente a diario en workstations Windows 10 / 11, cada varios días en Server, semanal o más en Server Core.
El appraiser era originalmente parte del Customer Experience Improvement Program (CEIP). El valor forense de Amcache es, en cierto sentido, un accidente: el appraiser necesitaba un inventario local para saber qué enviarle a Microsoft, y ese inventario local es sobre lo que pivotan los analistas.
Por qué les importa a los analistas#
Tres propiedades hacen a Amcache extraordinaria:
- Sobrevive al borrado. Un wiper saca el archivo del disco; el snapshot de inventario queda en la hive. A menudo durante meses. Los logs de transacción suelen preservar entradas que la hive viva perdió.
- Pre-hashea el binario. SHA-1 de los primeros 31 MiB en el momento del inventario. Aunque ya no tengas el binario, tienes un hash que enviar a VirusTotal, a feeds de TI, a allowlists internas.
- Registra la ruta. Dónde vivía el binario en disco suele ser toda la historia.
\Users\<name>\AppData\Local\Temp\svchost.exees su propia acusación.
Dónde vive Amcache#
C:\Windows\AppCompat\Programs\Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve.LOG1
C:\Windows\AppCompat\Programs\Amcache.hve.LOG2
.LOG1 y .LOG2 son los logs de transacción de la hive. Recoge siempre los tres. Coge solo la hive y silenciosamente te pierdes las escrituras más recientes que aún están bufferizadas en los logs.
Para la referencia larga de ubicación y recolección, ve Dónde está Amcache.hve en disco.
Historia del esquema#
Una pequeña pero accidentada historia:
- Windows 7 / Server 2008 R2:
RecentFileCache.bcf, un binario plano, mucho más escaso. No es Amcache. - Windows 8 / 8.1:
Amcache.hveaparece en forma de hive con clavesRoot\FileyRoot\Programs(esquema legacy). - Windows 10 build 1709 (Fall Creators Update, 2017): aparecen
Root\InventoryApplicationFiley la familia más ampliaInventory*(esquema moderno). - Windows 11: Continúa el esquema de Windows 10, con añadidos menores, registros de driver/dispositivo más granulares.
El análisis moderno trabaja contra el esquema moderno Inventory*. Las claves legacy permanecen en algunas builds y vale la pena revisarlas en sistemas antiguos y en hosts donde el appraiser ha sido deshabilitado. Especificidades por versión: Amcache en Windows 11 y 10, Amcache en Windows Server.
Estructura de la hive#
En una hive moderna de Windows 11, Root contiene:
Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File (legacy)
└── Programs (legacy)
Las cinco claves que tocas en la mayoría de los casos:
| Clave | Qué registra |
|---|---|
InventoryApplicationFile |
Cada PE que el appraiser inventarió. Ruta completa, SHA-1, link date, publisher, versión. La fuente individual más rica. |
InventoryApplication |
Aplicaciones instaladas. Padre de los registros de archivo vía ProgramId. |
InventoryDriverBinary |
Cada binario de driver cargado, con flags signed/kernel-mode. Crítico para BYOVD. |
InventoryDeviceContainer |
Registros de dispositivo con friendly name: impresoras, pantallas, medios removibles. |
InventoryDevicePnp |
Registros de enumeración PnP, uno por interfaz de dispositivo. Une con DeviceContainer vía InstanceId. |
Para el recorrido clave por clave, ve Estructura del Registro de Amcache.
Versionado del esquema#
El esquema se ha movido varias veces a lo largo de la vida de Windows 10. Aparecen nombres de valor nuevos, los viejos cambian de tipo o desaparecen. Por eso un visor genérico del Registro no encaja bien: los valores son correctos pero no están etiquetados, y pasas más tiempo cruzando posts de blog que analizando. Usa un parser específico (AmcacheParser, el parser de navegador de este sitio o el plugin amcache de RegRipper) y deja que la herramienta lleve la cuenta del esquema por ti.
Los campos que se ganan su sitio#
Un puñado de valores por entrada cargan el 90% del peso investigativo.
FileId#
La cadena de 41 caracteres "0000" + sha1_hex. El "0000" inicial es un tag histórico de tipo. Los 40 caracteres hex finales son el SHA-1 de los primeros 31 MiB. Quítale el prefijo antes de mandarlo a VirusTotal. AmcacheParser ya lo hace en la columna Hash.
Dos trampas:
- El hash cubre solo los primeros 31 MiB. Para instaladores y binarios grandes es un hash de prefijo, no de contenido completo. Por debajo de 31 MiB el hash de prefijo es igual al SHA-1 estándar.
- VirusTotal devuelve resultado vacío si incluyes el prefijo
"0000", y el resultado vacío parece idéntico a "hash desconocido". Engañoso.
Cobertura completa: FileId de Amcache explicado.
ProgramId#
Un hash de identidad de 44 caracteres que Windows asigna a una aplicación lógica, derivado del nombre, publisher, versión e idioma. Une un archivo en InventoryApplicationFile con su aplicación padre en InventoryApplication. Estable entre hosts para la misma instalación. Útil para pivotes entre hosts.
Cobertura completa: ProgramId de Amcache explicado.
Timestamps#
Amcache expone varios timestamps distintos. Confundirlos es el error número 1 de los analistas nuevos:
| Campo | Qué representa |
|---|---|
KeyLastWriteTimestamp |
Última escritura de Registro de la clave contenedora. Lo más cercano a "cuándo Amcache anotó esto". |
LinkDate |
TimeDateStamp del PE. Cuándo se compiló el binario. Controlado por el atacante. No tratarlo como tiempo de presencia. |
LastModified (cuando está) |
Marca de last-modified del lado de inventario. No está en todos los esquemas. |
MsiInstallDate |
Cuándo se instaló el MSI padre (si lo hay). |
El pivote correcto para "¿cuándo apareció este binario en este host?" es KeyLastWriteTimestamp. Ve Timestamps de Amcache explicados.
Path, publisher, IsPeFile#
El filtro de triage que hace la mayor parte del trabajo:
IsPeFile = TrueYPublishervacío YFullPathbajo\Users\,\AppData\,\ProgramData\o\Temp\.
Aplicado a InventoryApplicationFile, saca la inmensa mayoría de artefactos de malware commodity en un host infectado típico. Muchos falsos positivos (apps portables, herramientas de dev, scripts custom) pero es un filtro de triage, no una regla de detección.
Lo que Amcache no es#
Tres malentendidos persistentes que producen hallazgos equivocados:
No es "prueba de ejecución"#
Un binario en Amcache significa que el appraiser vio el archivo en el momento del inventario. El appraiser inventaria por ruta, no por si el binario corrió. Un binario puede aparecer en Amcache sin haberse ejecutado jamás.
Para ejecución: Prefetch (lo más fuerte), Sysmon 1, Security 4688, Shimcache como corroboración, SRUM para correlación con ventana mayor. Ve Amcache vs Prefetch y Amcache vs Shimcache.
No es completa#
El appraiser se pierde cosas:
- Archivos fuera de las rutas que escanea.
- Archivos que vinieron y se fueron entre pasadas del appraiser (drops transitorios).
- Archivos en hosts endurecidos donde el appraiser está deshabilitado.
- En builds antiguos de Windows, archivos fuera del scope legacy
Programs/File.
La ausencia en Amcache no es evidencia de que el binario nunca estuvo. Es evidencia de que el appraiser no lo vio.
No es a prueba de manipulación#
La hive vive en disco en una ubicación conocida. Un admin puede editarla, borrarla o parar el schedule del appraiser. Poco común en intrusiones commodity (el ruido rara vez compensa) pero posible. Trata Amcache como una señal más, no como verdad de campo. Ve ¿Se puede limpiar Amcache?.
Usar Amcache en una investigación#
El loop estándar en una intrusión Windows:
- Recoger:
Amcache.hve+Amcache.hve.LOG1+Amcache.hve.LOG2. El targetAmcachede KAPE lo hace en un comando.Windows.Forensics.Amcachede Velociraptor lo hace remoto. - Parsear: AmcacheParser con
--mppara recuperar entradas huérfanas. - Filtro de triage: PE sin firmar en ruta escribible por usuario contra
*_UnassociatedFileEntries.csv. Típicamente decenas de filas en un host infectado. - Pivote: SHA-1 contra VirusTotal, feed TI, detecciones históricas.
FullPathcontra la timeline del filesystem y Prefetch. - Corroborar ejecución: Prefetch (definitivo), Sysmon
1/7(creación de proceso y carga de imagen), Security 4688. - Acotar en el tiempo:
KeyLastWriteTimestamp± 1h. Sacar todos los eventos, entradas de MFT / USN y escrituras del Registro de esa ventana.
El último paso es el que más analistas se saltan y el que más informes necesitan. Un hallazgo procedente de Amcache más Prefetch más un 4688 es reportable. Un hallazgo solo de Amcache lleva la caveat "evidencia de presencia de archivo, ejecución no corroborada".
Para escenarios concretos:
- Recuperar evidencia de binarios borrados desde Amcache
- Cazar malware commodity con Amcache
- Historial de dispositivos USB y medios removibles
- Pivote de movimiento lateral
Herramientas#
| Herramienta | Mejor para |
|---|---|
| AmcacheParser de Eric Zimmerman | DFIR de producción en una workstation Windows. La implementación canónica. |
| Parser de navegador | Triage, formación, analistas no-Windows, hosts bloqueados. WebAssembly, sin subir nada. |
| Plugin amcache de RegRipper | Análisis interactivo rápido como parte de un barrido más amplio de RegRipper. |
| Plugins de Volatility | Sacar la hive de una imagen de memoria y pasársela a AmcacheParser. |
Para la pregunta práctica de "cuál ahora": AmcacheParser para la investigación, el parser de navegador para triage o un vistazo rápido sin instalar nada.
FAQ#
¿Cuánto suele pesar Amcache.hve?#
2-25 MB en una workstation Windows 11. 50+ MB en máquinas de dev o servidores ajetreados. Los logs de transacción son pequeños, normalmente por debajo de 1 MB cada uno.
¿Hasta cuándo hacia atrás?#
Meses o años en workstations que llevan mucho corriendo. La hive no purga activamente entradas mientras el binario sigue siendo reconocible. Una vez el binario se elimina y el appraiser ha tenido varias pasadas para notarlo, la entrada típicamente envejece y desaparece (pero no siempre).
¿Registra Amcache DLLs?#
Sí, en Windows 10 build 1709 y posteriores. Tanto EXEs como DLLs clasificados como PE.
¿Registra Amcache scripts?#
No para .ps1, .bat, .vbs, .js. Amcache es solo PE. La evidencia de ejecución de scripts viene de logs operacionales de PowerShell, AMSI, Sysmon o entradas de Prefetch para cscript.exe / wscript.exe.
¿Amcache vs Shimcache?#
Artefactos distintos pese a estar ambos en la infraestructura de Application Compatibility. Shimcache (AppCompatCache en SYSTEM) lo mantiene el loader, está limitado a 1024 entradas, sin hash. Amcache la mantiene el appraiser, es efectivamente ilimitada, con SHA-1 y metadatos más ricos. Ve Amcache vs Shimcache.
¿Linux / macOS?#
dotnet AmcacheParser.dll con el runtime .NET, o el parser de navegador que corre en cualquier sitio con un navegador moderno. Ve Cómo leer Amcache.hve en Linux.
¿Admisibilidad en tribunal?#
Depende de jurisdicción y recolección. Amcache está bien documentada y es de uso amplio. Documenta cadena de custodia, hashea antes y después de parsear, y usa un parser cuyo comportamiento puedas defender en contrainterrogatorio.
Lecturas adicionales#
- Yogesh Khatri, Amcache.hve en Windows 8. La ingeniería inversa pública original.
- Eric Zimmerman, AmcacheParser. Herramienta offline de referencia.
- Willi Ballenthin y el equipo de Mandiant por el mapeo original de campos del esquema legacy.
- La investigación de internals del Registro de Maxim Suhanov, que es lo que mató el mito de "Amcache = ejecución".
Si te llevas una cosa: hash primero, ruta segundo, tiempo tercero. Amcache da lo mejor de sí como índice de hash que de paso sabe qué archivos vio Windows, y lo peor cuando sus timestamps se tratan como verdad de campo.
Artículos relacionados
- ¿Qué es Root\InventoryApplicationFile? (glosario)
La clave principal de Amcache. Una subclave por PE que el appraiser inventarió, con hash, ruta, fabricante, fecha de enlace y una marca de escritura de registro. Donde se va el 90% del tiempo del analista.
- Dónde está Amcache.hve en disco (y cómo recogerlo)
Ruta: C:\Windows\AppCompat\Programs\Amcache.hve más los archivos .LOG. Siempre los tres. Y la forma correcta de recogerlo en un host vivo y desde shadow copies.
- Recuperar evidencia de binarios borrados desde Amcache
Amcache sobrevive a los binarios que registra. La ruta, el SHA-1, el publisher, el link date y el momento del inventario persisten meses después de que el atacante limpie el archivo. El flujo práctico.
- FileId de Amcache explicado: el formato de hash SHA-1 que almacena Windows
FileId es '0000' más el SHA-1 de los primeros 31 MiB. Quita el prefijo o tus lookups a VirusTotal devuelven silenciosamente nada. La referencia completa, con sus trampas.