Skip to content

RecentFileCache.bcf von Live- und Offline-Systemen erfassen

Praxisleitfaden zum Ziehen von RecentFileCache.bcf in drei Szenarien: ein laufender Windows-7-Endpoint, ein forensisches Disk-Image und eine Volume Shadow Copy.

Veröffentlicht am 4 Min. Lesezeit

Sie können RecentFileCache.bcf nicht analysieren, bevor Sie eine Kopie haben. Die Datei hat eine kurze Haltbarkeit (der nächste ProgramDataUpdater-Lauf schreibt sie neu), also greifen Sie früh zu. Dieser Beitrag deckt die drei Szenarien ab, die Sie tatsächlich antreffen werden, und die Fallstricke, die jedes beißen.

Live-System: Die Datei wird offen gehalten

Auf einer laufenden Windows-7-Box wird RecentFileCache.bcf vom Application-Experience-Dienst offen gehalten. Ein naives Kopieren schlägt fehl:

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

Drei Ansätze, die funktionieren:

  1. Roher Dateilesezugriff mit FTK Imager (GUI oder CLI). Umgeht die Win32-Sperre, indem er auf Geräteebene mit dem Volume kommuniziert. Die Kopie erfasst die Bytes, die zum Lesezeitpunkt auf der Festplatte sind.

  2. Volume Shadow Copy. vssadmin list shadows, um einen aktuellen Snapshot zu finden, dann die Datei aus dem Snapshot-Pfad lesen:

    $sc = (vssadmin list shadows | Select-String 'Shadow Copy Volume:').Line.Split(' ')[-1]
    Copy-Item "$sc\Windows\AppCompat\Programs\RecentFileCache.bcf" C:\triage\
    
  3. KAPE mit dem RecentFileCache-Target. Bevorzugt für skalierbare Triage. Die Target-Datei liegt unter Targets/Windows/RecentFileCache.tkape in der Kroll-KAPE-Distribution. KAPE mit --target RecentFileCache ausführen, zieht die Datei plus ihre NTFS-Metadaten über Raw-Reads.

Alle drei bewahren die LastWriteTime der Datei, die (laut dem Lifecycle-Beitrag) das Nächste ist, was Sie als „zuletzt aktualisiert"-Zeitstempel für das Artefakt als Ganzes erhalten.

Ein Hinweis, der mir ein- oder zweimal das Leben gerettet hat: Wenn Sie Erstreaktion auf einem verdächtigen Host sind, warten Sie nicht. Morgen ist der Appraiser gelaufen und Ihre Beweise sind eine viel kürzere Liste. Das ist eines der wenigen Artefakte, bei denen zehn Minuten Verzögerung die Spur kosten können.

Offline: Disk-Images

Für ein E01-, VHD- oder dd-Image lebt die Datei am selben Pfad innerhalb der Windows-Partition:

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

Übliche Workflows:

  • libewf + eine gemountete Partition — den Pfad direkt lesen:

    ewfmount image.E01 /mnt/ewf
    mmls /mnt/ewf/ewf1            # NTFS-Partitionsoffset finden
    mount -o ro,offset=$((2048*512)) /mnt/ewf/ewf1 /mnt/win
    cp /mnt/win/Windows/AppCompat/Programs/RecentFileCache.bcf ./
    
  • Sleuth Kit ohne Mounten, nützlich wenn das Image groß ist oder Sie $LogFile-wiederherstellbare Kopien wollen:

    fls -r -p -o 2048 image.dd | grep -i RecentFileCache.bcf
    # nutzen Sie den Inode, den fls meldet:
    icat -o 2048 image.dd <inode> > RecentFileCache.bcf
    
  • FTK Imager / X-Ways / EnCase. Point and click. Alle drei verarbeiten gesperrte Dateien in einem Image ohne Probleme.

Volume Shadow Copies sind Ihr Freund

Windows-7-Systeme tragen typischerweise wochenlange VSS-Historie unter Standardeinstellungen. Jede Shadow Copy enthält ihre eigene RecentFileCache.bcf, und weil die Datei neu geschrieben (nicht angehängt) wird, halten ältere Shadows oft Einträge, die seitdem aus der Live-Datei gepurgt wurden.

Workflow:

  1. Snapshots aufzählen: vssadmin list shadows (live) oder \System Volume Information\ aus einem Image ziehen.
  2. Für jeden Snapshot die BCF aus <shadow root>\Windows\AppCompat\Programs\ ziehen.
  3. Geparste Einträge über Snapshots diffen. Einträge, die in alten Snapshots existieren, aber nicht in der Live-Datei, sind besonders interessant. Sie wurden entweder in Amcache.hve befördert oder sind herausgealtert.

Der Parser auf dieser Seite hat kein eingebautes Diff, aber das JSON, das er ausgibt, ist klein und stabil. jq erledigt den Rest:

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  # Pfade, die verschwanden
comm -13 old.txt new.txt  # Pfade, die auftauchten

Die verschwundene Liste ist da, wo die interessanten Dinge wohnen. Ein Pfad, der vor drei Tagen vorhanden war und heute weg ist, lief entweder und wurde befördert, oder jemand hat aufgeräumt. Die Bestätigungskette über MFT und USN-Journal sagt Ihnen, welches.

Stolperfallen, die man im Hinterkopf behalten sollte

  • Die Datei existiert möglicherweise nicht. Auf einer frisch geimagten Maschine oder einer, auf der AeLookupSvc deaktiviert ist, kann die BCF fehlen. Abwesenheit ist Daten. Siehe Erkennen von RecentFileCache-Manipulation.
  • Erfassungszeitstempel sind keine Eintragszeitstempel. Die Datei um 14:00 zu ziehen, bedeutet nicht, dass der letzte Eintrag um 14:00 landete. Die eigene LastWriteTime der Datei ist die relevante Uhr, und sie verfolgt den Appraiser-Lauf, nicht eine einzelne Ausführung.
  • Server 2008 R2 verhält sich wie Win7. Gleiche Datei, gleicher Dienst, gleiche geplante Aufgabe Microsoft\Windows\Application Experience\ProgramDataUpdater. Überspringen Sie keinen 2008-R2-Server, weil „es ist ein Server, keine Workstation".
  • Win8 und später haben es nicht. Wenn Ihr Image Windows 8 oder neuer ist, hören Sie auf zu suchen. Sie wollen Amcache.hve.
  • Pfad-Semantik. Einträge werden mit dem \??\-NT-Präfix aufgezeichnet. Anständige Parser strippen es. Wenn Sie gegen Roh-Bytes scripten, machen Sie das Strippen selbst.

Als Nächstes

Sie haben eine Datei. Der nächste Beitrag behandelt, worauf Sie tatsächlich achten, sobald sie geparst ist.

Weiterführende Literatur

Verwandte Artikel

Der Lebenszyklus der BCF hängt an einer einzigen geplanten Aufgabe. Verstehen Sie, wann ProgramDataUpdater läuft, wann sie die Datei leert und wie Sie einen deaktivierten Appraiser erkennen.
Das BCF-Format ist ein Header, eine Liste von längen-präfixierten UTF-16LE-Pfaden, und das war's. Hier ist, was jedes Byte bedeutet und warum sich seit 2009 nichts geändert hat.
Ein vom SOC markierter Win7 Endpoint, 14 Pfade in der BCF, drei einer zweiten Betrachtung wert. Eine realistische Korroborationskette und wie viel die BCF tatsächlich beigetragen hat.