Zurück zu allen Beiträgen

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.