Amcache: la referencia forense completa del hive Windows .hve

TL;DR — Amcache en un párrafo. Amcache es un hive del registro de Windows (Amcache.hve) mantenido por el Microsoft Compatibility Appraiser. Registra cada binario PE que el appraiser ha inventariado en el host, con hash SHA-1, ruta completa, publisher, fecha de link PE y marca de tiempo de inventario. Los analistas lo usan para probar que un binario estuvo presente (no necesariamente que se ejecutó), pivotar por hash entre hosts y recuperar evidencia de herramientas de atacantes eliminadas.

Amcache.hve es el hive del registro de Windows que registra qué programas han estado presentes o se han ejecutado en una máquina, con metadatos ricos: ruta completa, hash SHA-1, fecha de link PE, publisher, versión y la hora de inventario. Para el análisis forense digital y la respuesta a incidentes, es uno de los cuatro artefactos que todo analista de Windows aprende primero — junto con Prefetch, ShimCache y el registro de eventos de seguridad.

Esta página es la referencia canónica sobre el artefacto en sí: qué es, dónde vive, cómo lo produce Windows, qué contiene cada clave de nivel superior, cómo usarlo en una investigación y cómo se relaciona con las fuentes vecinas de evidencia de ejecución. Para cobertura de las herramientas de parsing, ver la guía completa de AmcacheParser; para la introducción breve original, ver Entender Amcache para análisis forense de Windows.


Amcache de un vistazo frente a los artefactos vecinos#

La pregunta más frecuente de los nuevos analistas de Amcache es «¿en qué se diferencia de ShimCache / Prefetch / SRUM?». Referencia rápida:

Artefacto Lo que prueba ¿Hash? ¿Ruta? Capacidad Fuente
Amcache.hve Binario estuvo presente en el host ✅ SHA-1 (primeros 31 MiB) ✅ Completa Miles de entradas Compatibility Appraiser
ShimCache (AppCompatCache) Binario visto por el loader ✅ Completa ~1 024 entradas (LRU) Loader Application Compatibility
Prefetch Binario ejecutado ✅ Completa ~1 024 archivos .pf Prefetcher de Windows (servicio Pf)
SRUM Binario consumió recursos durante 30+ días ✅ Completa Agregados por app System Resource Usage Monitor
Security 4688 Proceso creado (tiempo real) ✅ Completa Acotado por rotación del log Subsistema de auditoría

Regla de pivote: Amcache para presencia y hash; ShimCache para la lista vista por el loader; Prefetch para ejecución; SRUM para uso a lo largo del tiempo; 4688 para el evento en tiempo real. Detalle de cada emparejamiento: Amcache vs ShimCache, Amcache vs Prefetch, Amcache vs SRUM, Amcache vs AppCompatCache.


Qué es Amcache realmente#

Amcache es un hive del registro — el mismo formato binario que SYSTEM, SOFTWARE, SAM, SECURITY y NTUSER.DAT. No es un archivo de log, no es una base de datos, no es una lista plana. Es un árbol clave/valor con valores tipados, y esa estructura es lo que lo hace a la vez rico y ligeramente molesto de leer a mano.

El hive lo puebla el Microsoft Compatibility Appraiser, una tarea programada que viene con Windows en \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser. El appraiser escanea el sistema en busca de software instalado y presente, recopila metadatos del header PE de cada archivo y escribe registros de inventario estructurados en el hive. En builds modernos de Windows 10 y 11, el appraiser se ejecuta aproximadamente una vez al día; en builds de Windows Server la cadencia varía pero suele ser varias veces por semana.

El appraiser formaba parte originalmente de la infraestructura del Customer Experience Improvement Program (CEIP) — el mecanismo de Microsoft para enviar telemetría de compatibilidad a sus servidores antes de las grandes actualizaciones de Windows. El valor forense de Amcache es, en cierto sentido, un accidente de ese pipeline de telemetría: el appraiser tenía que mantener un inventario local para saber qué enviar, y ese inventario local es sobre lo que ahora pivotan los analistas.

Por qué importa a los analistas#

Amcache responde a una pregunta que ningún otro artefacto de Windows responde con tanta claridad:

"¿Ha estado este ejecutable alguna vez presente en este host, y si es así, con qué SHA-1, en qué ruta y aproximadamente cuándo?"

Tres cosas hacen que esa pregunta sea de alto valor en DFIR:

  1. Sobrevive al borrado. Un wiper puede eliminar el binario del disco; el snapshot del inventario en el hive persiste hasta la siguiente pasada del appraiser — e incluso entonces, la corrida previa suele seguir en los journals de transacciones.
  2. Pre-hashea el binario. Amcache almacena el SHA-1 de los primeros ~31 MiB del archivo en el momento del inventario. Aunque ya no tengas el binario, puedes enviar ese hash a VirusTotal, feeds de threat intel o tu base de datos interna de allowlist.
  3. Registra la ruta. Dónde vivía el binario en disco suele ser la historia completa — \Users\<name>\AppData\Local\Temp\svchost.exe es su propia acusación.

Dónde vive Amcache#

En un sistema Windows en vivo:

C:\Windows\AppCompat\Programs\Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve.LOG1
C:\Windows\AppCompat\Programs\Amcache.hve.LOG2

Los archivos .LOG1 y .LOG2 son los journals de transacciones del hive — el mismo mecanismo de log write-ahead que usa cualquier hive del registro. Recoge siempre los tres juntos. Si tomas solo Amcache.hve, puedes perder silenciosamente las escrituras más recientes, porque los cambios más recientes pueden seguir en los logs esperando ser volcados.

Para el conjunto completo de preguntas relacionadas con la ubicación (rutas en Windows más antiguos, dónde se encuentra en una imagen forense, cómo lo recogen KAPE / Velociraptor), ver Dónde está Amcache.hve en disco.

Historia a través de versiones de Windows#

El hive tiene una historia pequeña pero desordenada:

  • Windows 7 / Server 2008 R2 introdujo el artefacto como RecentFileCache.bcf — un archivo binario plano, no un hive, y con muchos menos metadatos. No es directamente comparable al Amcache moderno.
  • Windows 8 / 8.1 introdujo Amcache.hve en su forma de hive con las claves Root\File y Root\Programs (el schema "legacy").
  • Windows 10 build 1709 (Fall Creators Update) añadió las claves Root\InventoryApplicationFile y demás Inventory* — el schema moderno. Las claves legacy permanecieron por compatibilidad en algunos builds pero se volvieron más escasas con el tiempo.
  • Windows 11 continúa el schema de Windows 10 con adiciones menores, notablemente registros más granulares de drivers y contenedores de dispositivos.

Cuando parseas un hive, normalmente trabajas con el schema moderno Inventory*. Las claves legacy Root\Programs y Root\File siguen mereciendo una revisión en sistemas antiguos y en builds donde el appraiser ha sido desactivado — a veces capturan datos que las claves modernas omiten. Cubrimos los aspectos específicos de cada versión de Windows en Amcache en Windows 11 y 10 y Amcache en Windows Server.


La estructura del hive#

En el nivel superior, el hive tiene una única clave Root con estas sub-claves notables (en un sistema Windows 11 moderno):

Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File             (legacy)
└── Programs         (legacy)

Las cinco que los analistas DFIR tocan en esencialmente cada caso:

Clave Registra
InventoryApplicationFile Cada archivo PE que el appraiser inventarió, con ruta completa, SHA-1, fecha de link, publisher, versión. La fuente individual más rica.
InventoryApplication Aplicaciones instaladas (entradas MSI / Agregar o quitar programas). Padres de los registros de archivo vía ProgramId.
InventoryDriverBinary Cada binario de driver que cargó el sistema, con flags signed/kernel-mode. Crítico para investigaciones BYOVD.
InventoryDeviceContainer Registros de dispositivos con nombres amigables: impresoras, pantallas, controladores de medios extraíbles.
InventoryDevicePnp Registros de enumeración PnP, uno por interfaz de dispositivo. Se empareja con InventoryDeviceContainer vía InstanceId.

Para un desglose clave por clave — cada sub-clave, cada valor notable y qué significa — ver Estructura del registro Amcache y sus claves.

Versionado del schema#

El schema de Amcache ha cambiado varias veces a lo largo de la vida de Windows 10. Aparecen nuevos nombres de valor; los viejos desaparecen o cambian de tipo. Por eso un visor genérico del registro es una mala herramienta para Amcache — los valores que muestra son correctos pero sin etiquetar, y pasas más tiempo correlacionando con posts de blog que analizando. Usa un parser de propósito específico (AmcacheParser, el parser en el navegador de este sitio, o el plugin amcache de RegRipper) y deja que la herramienta siga el schema por ti.


Los campos que los analistas realmente usan#

Un puñado de valores por entrada de inventario carga con el 90% del peso investigativo:

FileId#

La cadena de 41 caracteres "0000" + sha1_hex que identifica de forma única un archivo por contenido. El 0000 inicial es una etiqueta de tipo histórica; los 40 caracteres hexadecimales restantes son el SHA-1 de los primeros 31 MiB del archivo. Quita el prefijo y tienes un hash que puedes enviar a VirusTotal, feeds IOC o tu base de datos de allowlist de hashes directamente.

Algunas trampas:

  • El hash cubre solo los primeros 31 MiB, no el archivo completo. Para instaladores y binarios grandes sigue siendo distintivo, pero técnicamente es un hash de prefijo, no un hash de contenido completo.
  • Los archivos de menos de 31 MiB se hashean por completo, por lo que el resultado coincide con un SHA-1 estándar.

Cobertura completa: Amcache FileId explicado.

ProgramId#

Un hash de identidad de 44 caracteres que Windows asigna a una aplicación lógica — una combinación de nombre, publisher, versión e idioma. El mismo ProgramId vincula un archivo en InventoryApplicationFile con el registro de aplicación padre en InventoryApplication. También es estable entre hosts: dos máquinas con la misma aplicación instalada normalmente comparten el mismo ProgramId para ella, lo que la convierte en un pivote útil para hunts entre hosts.

Cobertura completa: Amcache ProgramId explicado.

Marcas de tiempo#

Amcache expone múltiples marcas de tiempo diferentes, y confundirlas es el error nº 1 que cometen los nuevos analistas de Amcache:

Campo Qué representa
KeyLastWriteTimestamp Última escritura del registro de la clave que contiene esta entrada. Lo más cercano a "cuándo registró Amcache este archivo".
LinkDate TimeDateStamp del header PE — cuándo se compiló / enlazó el binario. Controlable por el atacante; no lo trates como evidencia de hora de presencia.
LastModified (cuando está presente) Marcador de last-modified del lado del inventario; no presente en todas las versiones del schema.
MsiInstallDate Cuándo se instaló el MSI padre (si el archivo procedía de uno).

El pivote correcto para "¿cuándo apareció este binario en este host?" es KeyLastWriteTimestamp. Cobertura completa: Marcas de tiempo de Amcache explicadas.

Path, publisher, IsPeFile#

El filtro de triage "¿esto es sospechoso?" en el que la mayoría de los analistas se estandarizan:

IsPeFile = True AND Publisher está vacío AND FullPath está bajo \Users\, \AppData\, \ProgramData\ o \Temp\.

Ese único filtro, aplicado a InventoryApplicationFile, saca a la luz la inmensa mayoría de los artefactos de malware comodín en un host típico infectado. También genera muchos falsos positivos — software pirata, scripts personalizados de desarrolladores, apps portables — por lo que es un filtro de triage, no una regla de detección.


Qué no es Amcache#

Vale la pena corregir de antemano tres conceptos erróneos persistentes, porque rutinariamente producen hallazgos incorrectos:

Amcache no es "prueba de ejecución"#

Que un binario aparezca en Amcache significa que el appraiser vio el archivo en disco en el momento del inventario. El appraiser inventaría archivos en función de dónde viven (Program Files, ProgramData, el menú Inicio, rutas tocadas recientemente) — no en función de si se ejecutaron. Un binario puede aparecer en Amcache sin haberse ejecutado nunca.

Para ejecución necesitas Prefetch (la señal más fuerte), eventos de creación de proceso (4688 / Sysmon 1), ShimCache como señal corroborativa, o SRUM para correlación en ventanas más largas. Ver Amcache vs Prefetch y Amcache vs ShimCache para las distinciones canónicas, y Amcache vs SRUM para el emparejamiento en ventanas más largas.

Amcache no es completo#

El appraiser se pierde cosas:

  • Archivos fuera de las rutas que escanea.
  • Archivos que aparecieron y desaparecieron entre corridas del appraiser.
  • Archivos en un host donde el appraiser ha sido desactivado (algunos endpoints hardenizados).
  • En builds antiguos de Windows, archivos fuera del alcance legacy Programs / File.

La ausencia de Amcache no es evidencia de que un binario nunca estuvo presente. Es evidencia solo de que el appraiser no lo vio.

Amcache no es a prueba de manipulación#

El hive vive en disco en una ubicación conocida. Un atacante con privilegios de admin puede modificarlo, borrarlo o — más sutilmente — modificar la programación del appraiser para que deje de registrar. Nada de esto es común en intrusiones de commodity (el valor de limpiar Amcache rara vez compensa el ruido que genera), pero es posible, y deberías tratar Amcache como una señal entre muchas, no como verdad fundamental.


Usar Amcache en una investigación#

El bucle investigativo estándar en una intrusión solo en Windows:

  1. Recoger. Toma Amcache.hve + Amcache.hve.LOG1 + Amcache.hve.LOG2. El target Amcache de KAPE hace esto en un solo comando; el artefacto Windows.Forensics.Amcache de Velociraptor lo hace remotamente.
  2. Parsear. Ejecuta AmcacheParser con --mp para recuperar entradas huérfanas. Obtendrás un CSV por categoría.
  3. Filtro de triage. Aplica el filtro "PE sin firmar en ruta escribible por el usuario" a *_UnassociatedFileEntries.csv. Esto produce una lista manejable — típicamente decenas de filas en un host típico infectado.
  4. Pivotar. Para cada fila superviviente, toma el hash SHA-1 y compáralo con VirusTotal, tu feed de TI y tus detecciones históricas. Para cada fila, también comprueba el FullPath contra tu timeline del sistema de archivos y el CSV de Prefetch — ¿muestra Prefetch que el mismo binario se ejecutó? ¿El archivo sigue existiendo en disco?
  5. Corroborar la ejecución. Cruza las coincidencias con Prefetch (ejecución definitiva), Sysmon 1 / 7 (proceso e image-load) y Security 4688 (creación de proceso) si está habilitado.
  6. Acotar en el tiempo. Toma KeyLastWriteTimestamp de las filas sospechosas y construye una ventana de tiempo ajustada alrededor. Extrae todos los eventos, cambios del sistema de archivos y escrituras del registro de esa ventana para tener la imagen completa.

Para escenarios específicos, los posts de casos de uso cubren el playbook en detalle:


Panorama de herramientas#

Tienes varias opciones razonables para parsear realmente el hive:

Herramienta Mejor para
AmcacheParser de Eric Zimmerman DFIR de producción en una estación de analista Windows. La implementación canónica.
Parser en navegador (este sitio) Triage, educación, analistas no-Windows, hosts bloqueados. Corre en WebAssembly, el archivo nunca sale del navegador.
Plugin amcache de RegRipper Análisis interactivo rápido como parte de un sweep más amplio de RegRipper.
Plugins de Volatility Extraer el hive de una imagen de memoria, luego pasarlo a AmcacheParser.

Para la pregunta práctica "¿cuál debería usar ahora?", la respuesta es casi siempre: AmcacheParser.exe de Eric para la investigación, el parser en navegador de este sitio para triage o una mirada rápida sin instalar nada. Los caminos de RegRipper y Volatility existen para contextos específicos — sweeps interactivos de RegRipper y adquisiciones solo de memoria, respectivamente.


Preguntas frecuentes#

¿Qué tamaño suele tener Amcache.hve?#

En una estación de trabajo típica de Windows 11, Amcache.hve va de 2 MB a 25 MB. Estaciones de desarrollador muy usadas y servidores con muchos binarios efímeros pueden superar los 50 MB. Los journals de transacciones son pequeños (normalmente <1 MB cada uno).

¿Hasta cuándo se remonta Amcache?#

El hive no está limitado por tiempo sino por el propio comportamiento de retención de Windows. En una estación de trabajo de larga vida puedes ver entradas de inventario de meses o años, especialmente para registros Inventory* donde el binario todavía está presente en disco. Una vez que un binario se elimina y el appraiser ha tenido varias pasadas para notarlo, la entrada correspondiente típicamente (pero no siempre) caduca.

¿Registra Amcache DLLs?#

Sí, en los schemas modernos. InventoryApplicationFile registra tanto EXEs como DLLs (filtrados a archivos PE en general). Hives anteriores a Windows 10 1709 pueden no hacerlo, según el build.

¿Registra Amcache scripts?#

Generalmente no para .ps1, .bat, .vbs, .js, etc. — Amcache se centra en binarios PE. La evidencia de ejecución de scripts viene de los logs operacionales de PowerShell, AMSI, Sysmon o Prefetch (para las invocaciones de cscript.exe / wscript.exe en sí).

¿Cuál es la relación entre Amcache y ShimCache?#

Son artefactos diferentes a pesar de que ambos implican compatibilidad de aplicaciones. ShimCache (AppCompatCache en el hive SYSTEM) lo mantiene el loader con fines de compatibilidad de aplicaciones y registra hasta 1024 entradas por host con metadatos limitados. Amcache lo mantiene el appraiser con fines de telemetría de compatibilidad y registra miles de entradas con metadatos ricos. Ver Amcache vs ShimCache para la comparación completa.

¿Puedo leer Amcache.hve en Linux o macOS?#

Sí. Usa dotnet AmcacheParser.dll en un host con el runtime de .NET, o usa el parser en navegador de este sitio que corre en WebAssembly y funciona en cualquier navegador moderno independientemente del SO host. El formato del hive es portable.

¿Es la evidencia de Amcache admisible en juicio?#

Eso depende de la jurisdicción y de cómo se recogió la evidencia. Amcache en sí está bien documentado y es ampliamente usado en DFIR, lo que ayuda. Aplican las reglas habituales: preserva el hive (y sus journals de transacciones) con cadena de custodia documentada, hashealo antes y después, y usa un parser documentado cuyo comportamiento puedas defender.


A dónde ir ahora#

Si llegaste aquí buscando...

Artículos relacionados

Volver a todos los artículos