Skip to content

¿Qué es RecentFileCache.bcf?

Una breve introducción al artefacto AppCompat de Windows 7: dónde vive, qué registra y por qué sigue apareciendo en casos de triage en 2026.

Publicado el 4 min de lectura

RecentFileCache.bcf es el artefacto cuya existencia olvidas hasta que una máquina con Windows 7 aterriza en tu mesa. Es pequeño, acotado y de vida corta. Registra las rutas completas de los ejecutables que el escáner Application Experience ha visto desde el último pase del appraiser. Sin marcas temporales por entrada. Sin hashes. Sin firmantes. Solo una lista de rutas en UTF-16LE.

Y esa lista, en el host adecuado, es una de las señales "esto se ejecutó recientemente" más limpias que puedes sacar del disco.

Dónde vive

C:\Windows\AppCompat\Programs\RecentFileCache.bcf

Mismo directorio que Amcache.hve en builds posteriores. Los dos artefactos casi nunca coexisten como evidencia primaria. Win7 y Server 2008 R2 te dan la BCF y una Amcache delgada. Windows 8 en adelante mata la BCF y se apoya enteramente en Amcache.hve. Si encuentras una BCF en un host Win10, alguien tomó una decisión rara y deberías averiguar quién.

Qué contiene en realidad

Una cabecera de 20 bytes, luego una secuencia compacta de cadenas de ruta UTF-16LE prefijadas en longitud hasta EOF.

CampoTamañoNotas
Firma40x0fffeefe
Desconocido x312Observado 0x00002211, 3, 1
Posible checksum4Ningún parser público lo valida
Registros...Repetir hasta EOF
Conteo de chars4Incluye el NUL final
RutavarUTF-16LE, terminada en NUL

Eso es todo. Sin marcas temporales. Sin hashes. Sin metadatos PE. El formato no ha cambiado desde Windows 7 SP1, lo que significa que el parseo es tolerante y las herramientas coinciden.

Si quieres telemetría más rica para la misma era necesitas Amcache.hve, Prefetch o Shimcache. La BCF es la pista barata, no el veredicto.

Quién escribe en ella

El servicio Application Experience (AeLookupSvc en Win7) alimenta el archivo en tiempo de ejecución. La tarea programada Microsoft\Windows\Application Experience\ProgramDataUpdater lo vacía con cadencia aproximadamente diaria y promociona a los supervivientes a Amcache.hve. El ciclo de vida tiene consecuencias para la triage, cubiertas en Application Experience y ProgramDataUpdater.

La versión corta: una ruta aterriza en el archivo cuando el ejecutable cruzó la ruta de código AppCompat. El siguiente pase de ProgramDataUpdater reescribe el archivo, a menudo más corto que antes. Si el appraiser está deshabilitado, el archivo se acumula indefinidamente y obtienes una ventana mayor. He visto BCFs con 18 meses de antigüedad en hosts donde alguien deshabilitó la tarea con un script eliminador de telemetría.

Semántica de rutas

Una entrada típica luce así:

\??\C:\Users\bob\AppData\Local\Temp\setup.exe

El prefijo \??\ es la notación del NT object manager para una ruta tipo DOS. Trátalo como C:\ y sigue. Los parsers decentes lo eliminan; trata el resto como cualquier otra ruta Win32.

Por qué sigue importando en 2026

Dos razones, ninguna desaparecida.

Primero, Windows 7 no ha muerto. Control industrial, flotas de kioscos, endpoints de dispositivos médicos, ATMs, cajas MES embebidas. Sigue habiendo millones de sistemas Win7 y Server 2008 R2 en el campo. Cuando uno se compromete, parseas BCFs en 2026 exactamente igual que lo hacías en 2014.

Segundo, las imágenes antiguas siguen llegando a las mesas. Reinvestigaciones de cold cases, due diligence en M&A, discovery civil. Una imagen Win7 de 2017 es igual de relevante la semana que aparece en tu cola.

Límites por honestidad

  • Sin marcas temporales por entrada. El propio LastWriteTime del archivo es una cota superior aproximada de cuándo aterrizó la última entrada y no te dice nada de las anteriores.
  • El archivo se reescribe, no se anexa. Las entradas desaparecen entre pases.
  • Solo ejecutables que cruzaron la ruta AppCompat del loader. Loaders PE en memoria, DLLs reflectivas y cierto tradecraft LOLBin nunca tocan este archivo.
  • Sin metadatos del ejecutable. Una ruta es una afirmación de identidad, no una identidad. Empareja con Amcache.hve o un hash del disco si el binario sigue ahí.
  • Sin atribución de usuario. Por máquina, no por usuario. La pregunta "¿quién ejecutó esto?" necesita evidencia separada de EVTX o Registro.

Parsearlo

El parser de este sitio toma un .bcf y emite una lista estructurada de rutas. Todo corre en tu navegador. El archivo nunca se sube, lo cual importa cuando el archivo en cuestión es de un cliente regulado cuyos abogados se preocupan por la cadena de custodia.

Para los detalles del formato y un volcado hexadecimal trabajado, lee el siguiente post de la serie.

Lecturas adicionales

Artículos relacionados

Cuatro artefactos Windows de evidence-of-execution lado a lado: qué almacena cada uno, qué no, y cuál abrir primero.
El ciclo de vida del BCF depende de una única tarea programada. Entiende cuándo se ejecuta ProgramDataUpdater, cuándo vacía el archivo y cómo detectar un appraiser deshabilitado.
El formato BCF es una cabecera, una lista de rutas UTF-16LE con prefijo de longitud, y se acabó. Aquí está lo que significa cada byte y por qué nada ha cambiado desde 2009.