Skip to content

Acquérir RecentFileCache.bcf depuis des systèmes vivants et hors-ligne

Guide pratique pour extraire RecentFileCache.bcf dans trois cadres : un endpoint Windows 7 en marche, une image forensique de disque et une Volume Shadow Copy.

Publié le 4 min de lecture

Vous ne pouvez pas analyser RecentFileCache.bcf tant que vous n'en avez pas une copie. Le fichier a une durée de vie courte (le prochain passage de ProgramDataUpdater le réécrit), alors récupérez-le tôt. Ce billet couvre les trois cadres que vous rencontrerez réellement et les pièges qui mordent chacun.

Système en marche : le fichier est tenu ouvert

Sur une machine Windows 7 en marche, RecentFileCache.bcf est tenu ouvert par le service Application Experience. Une copie naïve échoue :

PS C:\> copy C:\Windows\AppCompat\Programs\RecentFileCache.bcf C:\tmp\
Access to the path 'C:\Windows\AppCompat\Programs\RecentFileCache.bcf' is denied.

Trois approches qui marchent :

  1. Lecture brute avec FTK Imager (GUI ou CLI). Contourne le verrou Win32 en parlant au volume au niveau du périphérique. La copie capture les octets présents sur disque au moment de la lecture.

  2. Volume Shadow Copy. vssadmin list shadows pour trouver un snapshot récent, puis lire le fichier depuis le chemin du snapshot :

    $sc = (vssadmin list shadows | Select-String 'Shadow Copy Volume:').Line.Split(' ')[-1]
    Copy-Item "$sc\Windows\AppCompat\Programs\RecentFileCache.bcf" C:\triage\
    
  3. KAPE avec la cible RecentFileCache. Préféré pour le triage à l'échelle. Le fichier cible vit à Targets/Windows/RecentFileCache.tkape dans la distribution Kroll KAPE. Lancer KAPE avec --target RecentFileCache tire le fichier plus ses métadonnées NTFS via lectures brutes.

Les trois préservent le LastWriteTime du fichier, qui (selon le billet sur le cycle de vie) est ce qu'il y a de plus proche d'un horodatage « dernière mise à jour » pour l'artefact dans son ensemble.

Une note qui m'a sauvé une ou deux fois : si vous êtes premier intervenant sur un hôte que vous suspectez, n'attendez pas. Demain l'évaluateur aura tourné et vos preuves se réduiront à une liste bien plus courte. C'est l'un des rares artefacts où dix minutes de retard peuvent vous coûter la piste.

Hors-ligne : images de disque

Pour une image E01, VHD ou dd, le fichier vit au même chemin dans la partition Windows :

<partition root>/Windows/AppCompat/Programs/RecentFileCache.bcf

Workflows courants :

  • libewf + une partition montée — lire le chemin directement :

    ewfmount image.E01 /mnt/ewf
    mmls /mnt/ewf/ewf1            # trouver l'offset de la partition NTFS
    mount -o ro,offset=$((2048*512)) /mnt/ewf/ewf1 /mnt/win
    cp /mnt/win/Windows/AppCompat/Programs/RecentFileCache.bcf ./
    
  • Sleuth Kit sans montage, utile quand l'image est grosse ou quand on veut des copies récupérables via $LogFile :

    fls -r -p -o 2048 image.dd | grep -i RecentFileCache.bcf
    # utilisez l'inode que fls signale :
    icat -o 2048 image.dd <inode> > RecentFileCache.bcf
    
  • FTK Imager / X-Ways / EnCase. Pointer-cliquer. Les trois gèrent les fichiers verrouillés à l'intérieur d'une image sans souci.

Les Volume Shadow Copies sont votre amie

Les systèmes Windows 7 portent typiquement des semaines d'historique VSS avec les paramètres par défaut. Chaque shadow copy contient son propre RecentFileCache.bcf, et puisque le fichier est réécrit (non appended), les shadows plus anciens contiennent souvent des entrées qui ont depuis été purgées du fichier vivant.

Workflow :

  1. Énumérer les snapshots : vssadmin list shadows (live) ou tirer \System Volume Information\ depuis une image.
  2. Pour chaque snapshot, extraire le BCF depuis <shadow root>\Windows\AppCompat\Programs\.
  3. Différencier les entrées parsées entre snapshots. Les entrées présentes dans d'anciens snapshots mais absentes du fichier vivant sont particulièrement intéressantes. Elles ont soit été promues vers Amcache.hve, soit expirées.

Le parser de ce site n'a pas de diff intégré, mais le JSON qu'il émet est petit et stable. jq gère le reste :

jq -r '.entries[].path' rfc_2026-05-20.json | sort > old.txt
jq -r '.entries[].path' rfc_2026-05-26.json | sort > new.txt
comm -23 old.txt new.txt  # chemins disparus
comm -13 old.txt new.txt  # chemins apparus

La liste des disparus est l'endroit où vivent les choses intéressantes. Un chemin présent il y a trois jours et absent aujourd'hui a soit tourné et été promu, soit quelqu'un a nettoyé. La chaîne de corroboration via MFT et journal USN vous dit laquelle.

Pièges à garder en tête

  • Le fichier peut ne pas exister. Sur une machine fraîchement imagée ou une où AeLookupSvc est désactivé, le BCF peut être absent. L'absence est de la donnée. Voir Détecter la manipulation de RecentFileCache.
  • Les horodatages d'acquisition ne sont pas ceux des entrées. Tirer le fichier à 14:00 ne signifie pas que la dernière entrée a atterri à 14:00. Le LastWriteTime propre au fichier est l'horloge pertinente, et il suit l'exécution de l'évaluateur, pas une exécution individuelle.
  • Server 2008 R2 se comporte comme Win7. Même fichier, même service, même tâche planifiée Microsoft\Windows\Application Experience\ProgramDataUpdater. Ne sautez pas un serveur 2008 R2 parce que « c'est un serveur, pas une station ».
  • Win8 et plus récent ne l'ont pas. Si votre image est Windows 8 ou plus récent, arrêtez de chercher. Vous voulez Amcache.hve.
  • Sémantique des chemins. Les entrées sont enregistrées avec le préfixe NT \??\. Les parsers décents l'enlèvent. Si vous scriptez contre des octets bruts, faites le strip vous-même.

Suite

Vous avez un fichier. Le prochain billet couvre ce qu'il faut vraiment regarder une fois parsé.

Pour aller plus loin

Articles liés

Le cycle de vie du BCF tient en une seule tâche planifiée. Comprenez quand ProgramDataUpdater s'exécute, quand il vide le fichier, et comment repérer un appraiser désactivé.
Le format BCF est un en-tête, une liste de chemins UTF-16LE préfixés de leur longueur, et c'est tout. Voici ce que signifie chaque octet et pourquoi rien n'a changé depuis 2009.
Un endpoint Win7 signalé par le SOC, 14 chemins dans le BCF, trois méritant un second regard. Une chaîne de corroboration réaliste et combien le BCF a réellement contribué.