Qu'est-ce que RecentFileCache.bcf ?
Une courte introduction à l'artefact AppCompat de Windows 7 : où il vit, ce qu'il enregistre, et pourquoi il refait surface dans les dossiers de triage en 2026.
RecentFileCache.bcf est l'artefact dont vous oubliez l'existence jusqu'à ce qu'une machine Windows 7 atterrisse sur votre bureau. Il est petit, étroit et éphémère. Il enregistre les chemins complets des exécutables que le scanner Application Experience a vus depuis le dernier passage d'évaluation. Pas d'horodatage par entrée. Pas de hash. Pas de signataires. Juste une liste de chemins en UTF-16LE.
Et cette liste, sur le bon hôte, est l'un des signaux « ceci a tourné récemment » les plus propres que vous puissiez extraire du disque.
Où il vit
C:\Windows\AppCompat\Programs\RecentFileCache.bcf
Même répertoire que Amcache.hve sur les builds plus récents. Les deux artefacts ne coexistent presque jamais comme preuves primaires. Win7 et Server 2008 R2 vous donnent le BCF et un Amcache léger. Windows 8 et au-delà tue le BCF et s'appuie entièrement sur Amcache.hve. Si vous trouvez un BCF sur un hôte Win10, quelqu'un a fait un choix inhabituel et il faut comprendre qui.
Ce qu'il contient réellement
Un en-tête de 20 octets, puis une séquence dense de chaînes de chemins UTF-16LE préfixées par leur longueur jusqu'à EOF.
| Champ | Taille | Notes |
|---|---|---|
| Signature | 4 | 0x0fffeefe |
| Inconnu x3 | 12 | Observé 0x00002211, 3, 1 |
| Checksum possible | 4 | Aucun parser public ne le valide |
| Enregistrements... | Répéter jusqu'à EOF | |
| Compte de chars | 4 | Inclut le NUL final |
| Chemin | var | UTF-16LE, terminé NUL |
C'est tout. Pas d'horodatages. Pas de hashes. Pas de métadonnées PE. Le format n'a pas changé depuis Windows 7 SP1, ce qui veut dire que le parsing est indulgent et que les outils s'accordent.
Si vous voulez une télémétrie plus riche pour la même époque, il vous faut Amcache.hve, Prefetch ou Shimcache. Le BCF est la piste bon marché, pas le verdict.
Qui y écrit
Le service Application Experience (AeLookupSvc sur Win7) alimente le fichier à l'exécution. La tâche planifiée Microsoft\Windows\Application Experience\ProgramDataUpdater le vide à cadence environ quotidienne et promeut les survivants vers Amcache.hve. Le cycle de vie a des conséquences pour le triage, traité dans Application Experience et ProgramDataUpdater.
Version courte : un chemin arrive dans le fichier quand l'exécutable a traversé le code AppCompat. Le passage suivant de ProgramDataUpdater réécrit le fichier, souvent plus court qu'avant. Si l'évaluateur est désactivé, le fichier s'accumule indéfiniment et vous obtenez une fenêtre plus longue. J'ai vu des BCF vieux de 18 mois sur des hôtes où quelqu'un avait désactivé la tâche avec un script « telemetry remover ».
Sémantique des chemins
Une entrée typique ressemble à :
\??\C:\Users\bob\AppData\Local\Temp\setup.exe
Le préfixe \??\ est la notation du NT object manager pour un chemin de type DOS. Traitez-le comme C:\ et passez. Les parsers décents l'enlèvent ; traitez le reste comme n'importe quel autre chemin Win32.
Pourquoi cela compte encore en 2026
Deux raisons, dont aucune n'a disparu.
D'abord, Windows 7 n'est pas mort. Contrôle industriel, parcs de bornes, endpoints de dispositifs médicaux, ATM, MES embarqués. Il y a encore des millions de Win7 et Server 2008 R2 sur le terrain. Quand l'un est compromis, vous parsez des BCF en 2026 exactement comme en 2014.
Ensuite, les vieilles images continuent d'arriver. Réouvertures de cold cases, due diligence M&A, discovery civile. Une image disque Win7 de 2017 est tout aussi pertinente la semaine où elle débarque dans votre file.
Limites, honnêtement
- Pas d'horodatages par entrée. Le
LastWriteTimepropre au fichier est une borne supérieure grossière de quand la dernière entrée est arrivée et ne dit rien sur les précédentes. - Le fichier est réécrit, pas appended. Les entrées disparaissent entre les passes.
- Seulement les exécutables qui ont traversé la voie AppCompat du loader. Les loaders PE en mémoire, les DLL réflectives, certaines techniques LOLBin ne touchent jamais ce fichier.
- Pas de métadonnées sur l'exécutable. Un chemin est une revendication d'identité, pas une identité. Couplez avec
Amcache.hveou un hash depuis le disque si le binaire est encore là. - Pas d'attribution utilisateur. Par machine, pas par utilisateur. La question « qui a lancé ça » exige des preuves séparées issues d'EVTX ou du registre.
Le parser
Le parser de ce site prend un .bcf et émet une liste structurée de chemins. Tout tourne dans votre navigateur. Le fichier n'est jamais téléversé, ce qui compte quand le fichier en question vient d'un client réglementé dont les avocats se soucient de la chaîne de garde.
Pour les détails du format et un dump hex commenté, lisez le prochain billet de la série.