Wie der Hash im Windows Prefetch berechnet wird
Jede Prefetch-Datei in C:\Windows\Prefetch\ trägt einen Namen wie
NOTEPAD.EXE-1B4A5887.pf. Die acht Hex-Zeichen am Ende sind keine
Prüfsumme des Dateiinhalts — sie sind ein Hash des vollständigen
Pfades zur ausführbaren Datei, kodiert als UTF-16. Zwei Instanzen von
notepad.exe, die einmal aus C:\Windows\System32\ und einmal aus
C:\Users\analyst\notepad.exe gestartet werden, erzeugen zwei
unterschiedliche .pf-Dateien, weil sich ihre Pfade unterscheiden — und
das, obwohl die Binärdatei byte-identisch ist.
Drei Algorithmen, drei Epochen
Die Hash-Funktion hat sich parallel zu Windows selbst weiterentwickelt:
- Windows XP / Server 2003 — der ursprüngliche SuperFetch-Hash, eine einfache rollende Berechnung über den UTF-16-Pfad.
- Windows Vista / 2008 — dieselbe Familie, jedoch mit einem anderen konstanten Multiplikator und einem anderen Startwert. Prefetch-Dateien aus der Vista-Ära lassen sich nicht mit der XP-Funktion reproduzieren und umgekehrt.
- Windows 7 und neuer — in Microsoft-Terminologie „Hash function 5", noch immer in Windows 10 und 11 im Einsatz. Sie verarbeitet Byte-Gruppen aus dem UTF-16-Pfad in einer Schleife aus Multiplikation und XOR, maskiert das Ergebnis auf 32 Bit und kürzt es auf die unteren 32 Bit des Prefetch-Dateinamen-Suffixes.
Der Pfad-String, der in alle drei Algorithmen einfließt, enthält ein
Präfix \DEVICE\HARDDISK sowie den in UTF-16 (LE) und Großbuchstaben
kodierten Dateipfad — mit einigen Eigenheiten bei Volume-Formaten und
Kommandozeilenargumenten in späteren Windows-Versionen.
Warum das für Ermittler relevant ist
Eine untergeschobene Prefetch-Datei gehört zu den einfacheren
Anti-Forensik-Tricks. Bei Verdacht auf Manipulation berechnen Sie den
erwarteten Hash für den Pfad der ausführbaren Datei neu und vergleichen
ihn mit dem Dateinamen. Eine Abweichung ist ein starkes Indiz dafür,
dass die .pf-Datei nicht auf diesem System entstanden ist — entweder
wurde sie von einer anderen Maschine herüberkopiert oder von einem
unsauber arbeitenden Angreifer von Hand erzeugt.
Die Kehrseite davon: Wenn eine ausführbare Datei in einem ungewöhnlichen Pfad liegt (in einem Profilverzeichnis, in einem Temp-Ordner, unter einem USB-Laufwerksbuchstaben), ist der Hash der direkteste Beleg dafür, von wo sie ausgeführt wurde. Der Pfad selbst ist im Prefetch-Payload nicht mehr enthalten — nur die Volume Serial Number — weshalb der Hash oft die einzige verbliebene Spur des genauen Ausführungsorts ist.
Hinweise zur Implementierung
Open-Source-Implementierungen aller drei Hash-Funktionen finden sich in
der libscca-Dokumentation von libyal sowie im Rust-Crate
frnsc-prefetch, das auch dieses Tool antreibt. Wer eine forensische
Pipeline skriptet, kann die Vista- und Win-7+-Funktionen problemlos
inline einbinden — etwa ein Dutzend Zeilen Code pro Funktion, ganz ohne
zusätzliche Abhängigkeit.
Dieser Parser verifiziert den Hash standardmäßig nicht; er zeigt den aus dem Dateinamen geparsten Wert an, damit Sie ihn manuell gegenprüfen können. Ein künftiges Update wird auf Wunsch Abweichungen zum geparsten Pfad der ausführbaren Datei markieren.