Artefactos de Windows · Lección 3 de 9
Ejecución de programas: Prefetch, Amcache, Shimcache y BAM
11 min de lectura
«¿Se ejecutó este programa, cuándo y con qué usuario?» es una de las preguntas más comunes en un caso de Windows. Ningún artefacto por sí solo responde a las tres partes. Esta lección aborda los principales artefactos de ejecución en Windows 10 y 11: dónde se encuentra cada uno en una recopilación de triaje, qué marcas de tiempo contiene y qué demuestra y qué no. El método consiste en indicar una hora de ejecución únicamente a partir de un artefacto que registre la ejecución y corroborarla con los demás.
Prefetch
El mecanismo de precarga acelera el inicio de los programas al registrar lo que carga un ejecutable. Cada ejecutable tiene un archivo C:\Windows\Prefetch\<EXENAME>-<HASH>.pf, por ejemplo, XFER.EXE-1A2B3C4D.pf. El hash de 8 dígitos hexadecimales se calcula a partir de la ruta completa del ejecutable y, para procesos anfitriones como svchost.exe, rundll32.exe y dllhost.exe, también a partir de la línea de comandos. Por lo tanto, para otros ejecutables, el mismo nombre con distintos hashes significa que el programa se ejecutó desde distintas rutas, lo que suele ser importante: SVCHOST.EXE fuera de System32 es sospechoso.
Formato
En Windows 10 y 11, los archivos .pf están comprimidos. Comienzan con la firma MAM, seguida de un byte cuyo nibble bajo con valor 4 indica XPRESS Huffman (normalmente 0x04), y después el tamaño sin comprimir, por lo que un editor hexadecimal no muestra nada legible hasta que una herramienta los descomprime. Después de la descompresión, el encabezado comienza con la versión del formato en el desplazamiento 0 (30, es decir, 0x1E, en Windows 10 y 11; algunas compilaciones de Windows 11 usan 31, por lo que cabe esperar «versión 30 o posterior»), la firma SCCA en el desplazamiento 4, el nombre del ejecutable en UTF-16 en el desplazamiento 0x10 y el hash de la ruta en el desplazamiento 0x4C. Al analizarlo, un archivo proporciona:
- el recuento de ejecuciones;
- hasta 8 horas de las últimas ejecuciones (FILETIME, UTC), con la más reciente primero;
- los archivos y directorios referenciados durante aproximadamente los primeros diez segundos de ejecución, que suelen incluir DLL, archivos de datos y la ruta completa del propio programa;
- información del volumen: ruta del dispositivo, número de serie del volumen y hora de creación del volumen.
El archivo .pf se escribe unos diez segundos después de que se inicia el programa. Por lo tanto, sus propias marcas de tiempo del sistema de archivos son útiles: hora de creación ≈ primera ejecución (la primera ejecución ocurre unos 10 segundos antes) y hora de modificación ≈ última ejecución. Esto es importante cuando el recuento de ejecuciones supera las 8 y las horas de ejecución más antiguas ya se han descartado.
Configuración y limitaciones
Prefetch se controla mediante EnablePrefetcher, en SYSTEM\ControlSet001\Control\Session Manager\Memory Management\PrefetchParameters (0 deshabilitado, 1 inicio de aplicaciones, 2 solo arranque, 3 ambos). Las versiones cliente de Windows lo habilitan de forma predeterminada; Windows Server suele tener deshabilitada la precarga de aplicaciones. Desde Windows 8, la carpeta admite hasta 1.024 archivos .pf y los más antiguos se descartan. En un subárbol del Registro sin conexión no existe CurrentControlSet; consulte SYSTEM\Select\Current para elegir el ControlSet00x correcto (lección 2.1).
Demuestra: que el ejecutable de esa ruta se inició, cuántas veces y cuándo. No demuestra: qué usuario lo ejecutó, si completó su tarea ni que nunca se ejecutara antes (un archivo .pf eliminado o descartado borra el historial). PECmd es un ejemplo de herramienta de análisis.
Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve es un subárbol en formato de Registro con sus propios registros de transacciones, Amcache.hve.LOG1 y .LOG2; recopile los tres y aplique los registros antes de analizarlo. En las compilaciones actuales de Windows 10 y 11, los archivos se enumeran en Root\InventoryApplicationFile, con una subclave por archivo y valores como:
| Valor | Significado |
|---|---|
LowerCaseLongPath | Ruta completa en minúsculas |
Name, Publisher, Version | Del recurso de versión PE (pueden estar vacíos) |
Size | Tamaño del archivo en bytes |
LinkDate | Hora de compilación del encabezado PE (establecida por el enlazador, puede falsificarse) |
FileId | 0000 seguido del SHA-1 del archivo |
ProgramId | Vincula con un programa instalado en Root\InventoryApplication |
El SHA-1 abarca el archivo completo solo hasta 31.457.280 bytes (30 MiB); para un archivo de mayor tamaño, abarca los primeros 31.457.280 bytes, por lo que el hash del archivo completo no coincidirá. Root\InventoryApplication enumera los programas instalados con su nombre, editor, versión e información de instalación. Las compilaciones anteriores usaban Root\File en su lugar.
La salvedad importante: en Windows 10 y 11, Amcache se llena mediante tareas de inventario que examinan los programas y archivos instalados, por lo que una entrada muestra que el archivo estaba presente y se incluyó en el inventario, no necesariamente que se ejecutó. La hora LastWrite de la clave de una entrada indica cuándo Windows escribió la entrada, no una hora de ejecución. Considere Amcache como evidencia de apoyo sólida y use su SHA-1 para identificar el binario exacto, incluso después de que se elimine el archivo. AmcacheParser es un ejemplo de herramienta.
Shimcache (AppCompatCache)
La caché de compatibilidad de aplicaciones se almacena en SYSTEM\ControlSet001\Control\Session Manager\AppCompatCache, en el valor AppCompatCache, como un único bloque binario. En Windows 10 y 11, cada entrada comienza con la firma 10ts y contiene la ruta del archivo y la hora de última modificación del archivo de $STANDARD_INFORMATION. Esa hora no es una hora de ejecución, y en Windows 10 y 11 no hay ningún indicador fiable que muestre que el archivo se ejecutó. Las entradas se ordenan con la más reciente primero, por lo que su posición puede ayudar a ordenar los eventos, y la caché admite hasta 1.024 entradas.
La caché reside en memoria y se escribe en el subárbol del Registro al apagar o reiniciar el sistema. Por lo tanto, una recopilación de triaje realizada en un sistema en ejecución contiene la caché tal como estaba en el último apagado: pueden faltar programas recientes (el análisis de memoria del módulo 5 permite recuperarlos). Demuestra: que existía un archivo en esa ruta con esa hora de modificación. No demuestra: la ejecución ni una hora de ejecución. AppCompatCacheParser es un ejemplo de herramienta.
BAM y DAM
Background Activity Moderator, un servicio disponible desde la versión 1709 de Windows 10, mantiene una lista por usuario en el subárbol SYSTEM:
SYSTEM\ControlSet001\Services\bam\State\UserSettings\<SID>(compilaciones posteriores de Windows 10 y Windows 11);SYSTEM\ControlSet001\Services\bam\UserSettings\<SID>en compilaciones anteriores de Windows 10.
Cada valor tiene como nombre la ruta completa del dispositivo, como \Device\HarddiskVolume3\Users\ana\Downloads\xfer.exe, y los primeros 8 bytes de los datos son un FILETIME (UTC) de la última ejecución del programa. Asocie el volumen con una letra de unidad mediante los demás artefactos; el volumen de Windows suele ser C:. Dado que la clave es por SID, BAM, al igual que UserAssist más adelante, vincula una ejecución con una cuenta de usuario (la lección 2.2 explica cómo resolver los SID). Las entradas se depuran: las que tienen más de una semana aproximadamente y las correspondientes a ejecutables eliminados pueden desaparecer al iniciar el sistema, por lo que su ausencia demuestra poco. La hora puede diferir en segundos o más de la hora de ejecución de Prefetch. Desktop Activity Moderator (Services\dam\...) usa la misma estructura y aparece principalmente en dispositivos con modo de espera moderno.
UserAssist
NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count registra los programas que el usuario inició mediante el Explorador: menú Inicio, escritorio, doble clic. {CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} contiene ejecutables y {F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} contiene accesos directos. Los nombres de los valores están codificados con ROT13: P:\Hfref\nan\Qbjaybnqf\ksre.rkr se decodifica como C:\Users\ana\Downloads\xfer.exe. Las carpetas conocidas aparecen como GUID, por ejemplo, {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7} para System32. Los datos de 72 bytes contienen el recuento de ejecuciones (desplazamiento 4), el recuento de foco (desplazamiento 8), el tiempo de foco en milisegundos (desplazamiento 12) y el FILETIME de la última ejecución (desplazamiento 60). Demuestra un inicio mediante la interfaz gráfica por parte de ese usuario, pero no aparecen los programas iniciados desde una línea de comandos, un script o un servicio.
Registros del Asistente para compatibilidad de programas (Windows 11)
Windows 11 22H2 y versiones posteriores escriben archivos de texto sin formato en C:\Windows\appcompat\pca\. PcaAppLaunchDic.txt contiene una línea por ejecutable: ruta completa, | y una hora de último inicio en UTC, como C:\Users\ana\Downloads\xfer.exe|2026-03-14 10:42:17.130. Las investigaciones publicadas muestran que estas líneas registran programas iniciados mediante el Explorador, pero el formato no está documentado y no aparecen todos los procesos. Considere una línea como evidencia de ejecución que debe corroborarse y su ausencia como carente de significado.
Comparación
| Artefacto | Ubicación | Significado de la marca de tiempo | ¿Demuestra ejecución? |
|---|---|---|---|
| Prefetch | C:\Windows\Prefetch\*.pf | Hasta 8 últimas ejecuciones; creación del .pf ≈ primera ejecución, modificación ≈ última ejecución | Sí (sin usuario) |
| Amcache | C:\Windows\AppCompat\Programs\Amcache.hve | LastWrite de la clave = escritura de la entrada; LinkDate = hora de compilación | No, sirve de apoyo; proporciona SHA-1 |
| Shimcache | SYSTEM ...\Session Manager\AppCompatCache | Hora de última modificación del archivo en $SI | No, solo presencia |
| BAM | SYSTEM ...\Services\bam\State\UserSettings\<SID> | Última ejecución | Sí, por usuario |
| UserAssist | NTUSER.DAT ...\Explorer\UserAssist\{GUID}\Count | Último inicio mediante la interfaz gráfica | Sí, inicios mediante la interfaz gráfica por parte de ese usuario |
| PCA | C:\Windows\appcompat\pca\PcaAppLaunchDic.txt | Último inicio (texto en UTC) | Sirve de apoyo; debe corroborarse |
Ejemplo resuelto: ¿cuándo se ejecutó xfer.exe?
La recopilación de triaje de una computadora portátil con Windows 11 contiene C:\Windows\Prefetch\XFER.EXE-1A2B3C4D.pf (el valor del hash aquí es ilustrativo).
Prefetch. PECmd informa de la versión 30, un recuento de 3 ejecuciones y la ruta referenciada \VOLUME{…}\USERS\ANA\DOWNLOADS\XFER.EXE. La hora de ejecución más reciente es FILETIME 0x01DCB39F3A299D50 = 134.179.585.371.250.000. Al dividir entre 10.000.000 se obtienen 13.417.958.537,125 s desde 1601-01-01; al restar 11.644.473.600 s (de 1601 a 1970) se obtiene el tiempo Unix 1.773.484.937,125, es decir, 2026-03-14T10:42:17.125Z. Las otras horas de ejecución son 2026-03-14T10:05:33Z y 2026-03-13T16:20:02Z. El archivo .pf se creó a las 2026-03-13T16:20:12Z (10 s después de la primera ejecución) y se modificó a las 2026-03-14T10:42:27Z; ambas horas son coherentes.
BAM. En bam\State\UserSettings\S-1-5-21-…-1001, el valor \Device\HarddiskVolume3\Users\ana\Downloads\xfer.exe comienza con 50 AB 50 41 9F B3 DC 01. Interpretado en little-endian, es 0x01DCB39F4150AB50 = 134.179.585.491.250.000, que corresponde a 2026-03-14T10:42:29.125Z: 12 segundos después de la última ejecución de Prefetch, y vinculado al RID 1001, la cuenta ana.
Amcache. Una entrada de InventoryApplicationFile tiene LowerCaseLongPath c:\users\ana\downloads\xfer.exe, Size 1.482.752 (inferior a 31.457.280, por lo que el SHA-1 abarca el archivo completo), Publisher vacío y FileId 00003f2a9c1e7b0d4e85a6c2f19b0e7d3a5c48b1f6e2. Al quitar 0000 queda el SHA-1 de 40 dígitos hexadecimales 3f2a9c1e7b0d4e85a6c2f19b0e7d3a5c48b1f6e2, que puede comparar con una copia en la imagen de la unidad USB o con una base de datos de malware.
La trampa. Shimcache enumera C:\Users\ana\Downloads\xfer.exe con la hora 2026-03-13T16:18:40Z. Esa es la hora de última modificación del archivo, muy probablemente cuando se escribió la descarga, y coincide con la hora de modificación de $SI en la $MFT. No es una hora de ejecución: la respuesta a «¿cuándo se ejecutó xfer.exe por primera vez?» es 2026-03-13T16:20:02Z según Prefetch, no 16:18:40Z.
Enfoque del examen: Prepárese para indicar una hora de primera o última ejecución de Prefetch en UTC, un SHA-1 deFileIdde Amcache (sin el prefijo0000) o el SID que BAM vincula con un programa. Es probable que las preguntas evalúen qué marcas de tiempo indican ejecución: las horas de Shimcache son horas de modificación de archivos y las entradas de Amcache muestran presencia. Dos archivos .pf con el mismo nombre y distintos hashes indican dos rutas, a menos que el programa sea un proceso anfitrión como svchost.exe.
Puntos clave
- Prefetch (
EXENAME-HASH.pf, comprimido con MAM, versión 30 o posterior) proporciona el recuento de ejecuciones, hasta 8 horas de ejecución, los archivos referenciados y datos del volumen; el hash depende de la ruta. - La hora de creación del archivo .pf es unos 10 segundos posterior a la primera ejecución y su hora de modificación es unos 10 segundos posterior a la última ejecución.
InventoryApplicationFilede Amcache proporciona la ruta, el tamaño, LinkDate y el SHA-1 (FileIdsin0000, primeros 31.457.280 bytes), pero muestra presencia, no ejecución.- Shimcache registra la ruta y la hora de modificación de $SI, se escribe al apagar el sistema y no tiene un indicador fiable de ejecución en Windows 10 y 11.
- BAM proporciona un FILETIME de última ejecución por SID de usuario; UserAssist proporciona los inicios mediante la interfaz gráfica por usuario, codificados con ROT13; los registros PCA de Windows 11 22H2+ añaden un registro de texto para corroborar.