Windows-Artefakte · Lektion 3 von 9
Programmausführung: Prefetch, Amcache, Shimcache und BAM
10 Min. Lesezeit
„Wurde dieses Programm ausgeführt, wann und unter welchem Benutzerkonto?“ ist eine der häufigsten Fragen in einem Windows-Fall. Kein einzelnes Artefakt beantwortet alle drei Teilfragen. Diese Lektion behandelt die wichtigsten Ausführungsartefakte unter Windows 10 und 11: wo sich jedes davon in einer Triage-Erfassung befindet, welche Zeitstempel es enthält und was es belegt und was nicht. Die Methode besteht darin, einen Ausführungszeitpunkt nur anhand eines Artefakts anzugeben, das die Ausführung aufzeichnet, und ihn mit den anderen Artefakten zu bestätigen.
Prefetch
Der Prefetcher beschleunigt den Programmstart, indem er aufzeichnet, was eine ausführbare Datei lädt. Jede ausführbare Datei erhält eine Datei C:\Windows\Prefetch\<EXENAME>-<HASH>.pf, beispielsweise XFER.EXE-1A2B3C4D.pf. Der 8-stellige hexadezimale Hash wird aus dem vollständigen Pfad der ausführbaren Datei berechnet; bei Hostprozessen wie svchost.exe, rundll32.exe und dllhost.exe zusätzlich aus der Befehlszeile. Bei anderen ausführbaren Dateien bedeutet derselbe Name mit unterschiedlichen Hashes daher, dass das Programm aus unterschiedlichen Pfaden ausgeführt wurde. Das ist häufig relevant: SVCHOST.EXE außerhalb von System32 ist verdächtig.
Format
Unter Windows 10 und 11 sind die .pf-Dateien komprimiert. Sie beginnen mit der Signatur MAM, gefolgt von einem Byte, dessen niederwertiges Nibble 4 für XPRESS Huffman steht (üblicherweise 0x04), und anschließend der unkomprimierten Größe. Ein Hex-Editor zeigt daher nichts Lesbares an, bis ein Werkzeug die Dateien dekomprimiert. Nach der Dekomprimierung beginnt der Header mit der Formatversion an Offset 0 (30, also 0x1E, unter Windows 10 und Windows 11 bis 23H2; 31, also 0x1F, unter Windows 11 24H2 und neuer; rechnen Sie daher mit „Version 30 oder neuer“), der Signatur SCCA an Offset 4, dem Namen der ausführbaren Datei in UTF-16 an Offset 0x10 und dem Pfad-Hash an Offset 0x4C. Nach dem Parsen liefert eine Datei:
- die Ausführungsanzahl;
- bis zu 8 letzte Ausführungszeitpunkte (FILETIME, UTC), den neuesten zuerst;
- die referenzierten Dateien und Verzeichnisse während ungefähr der ersten zehn Sekunden der Ausführung, häufig einschließlich DLLs, Datendateien und des vollständigen Pfads des Programms selbst;
- Volume-Informationen: Gerätepfad, Volume-Seriennummer und Volume-Erstellungszeitpunkt.
Die .pf-Datei wird etwa zehn Sekunden nach dem Programmstart geschrieben. Ihre eigenen Dateisystem-Zeitstempel sind daher nützlich: Erstellungszeitpunkt ≈ erste Ausführung (die erste Ausführung liegt etwa 10 Sekunden davor) und Änderungszeitpunkt ≈ letzte Ausführung. Das ist wichtig, wenn die Ausführungsanzahl über 8 liegt und die ältesten Ausführungszeitpunkte bereits verdrängt wurden.
Einstellungen und Grenzen
Prefetch wird durch EnablePrefetcher unter SYSTEM\ControlSet001\Control\Session Manager\Memory Management\PrefetchParameters gesteuert (0 deaktiviert, 1 Anwendungsstart, 2 nur Systemstart, 3 beides). In Client-Versionen von Windows ist es standardmäßig aktiviert; unter Windows Server ist das Anwendungs-Prefetching üblicherweise deaktiviert. Seit Windows 8 enthält der Ordner bis zu 1.024 .pf-Dateien; ältere werden verworfen. In einem offline vorliegenden Hive gibt es kein CurrentControlSet; lesen Sie SYSTEM\Select\Current aus, um das richtige ControlSet00x auszuwählen (Lektion 2.1).
Belegt: Die ausführbare Datei unter diesem Pfad wurde gestartet, wie oft und wann. Belegt nicht: Welcher Benutzer sie ausgeführt hat, ob sie ihre Aufgabe abgeschlossen hat oder dass sie zuvor nie ausgeführt wurde (eine gelöschte oder verdrängte .pf-Datei löscht den Verlauf). PECmd ist ein Beispiel für einen Parser.
Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve ist ein Hive im Registry-Format mit eigenen Transaktionsprotokollen, Amcache.hve.LOG1 und .LOG2; erfassen Sie alle drei und spielen Sie die Protokolle vor dem Parsen ein. In aktuellen Builds von Windows 10 und 11 werden Dateien unter Root\InventoryApplicationFile aufgeführt, mit einem Unterschlüssel pro Datei und Werten wie:
| Wert | Bedeutung |
|---|---|
LowerCaseLongPath | Vollständiger Pfad in Kleinbuchstaben |
Name, Publisher, Version | Aus der PE-Versionsressource (können leer sein) |
Size | Dateigröße in Bytes |
LinkDate | Kompilierungszeitpunkt aus dem PE-Header (vom Linker gesetzt, kann gefälscht sein) |
FileId | 0000, gefolgt vom SHA-1 der Datei |
ProgramId | Verknüpft mit einem installierten Programm in Root\InventoryApplication |
Der SHA-1 erfasst die gesamte Datei nur bis zu einer Größe von 31.457.280 Bytes (30 MiB); bei einer größeren Datei erfasst er die ersten 31.457.280 Bytes. Der Hash der vollständigen Datei stimmt dann also nicht überein. Root\InventoryApplication führt installierte Programme mit Name, Herausgeber, Version und Installationsinformationen auf. Ältere Builds verwendeten stattdessen Root\File.
Der wichtige Vorbehalt: Unter Windows 10 und 11 wird Amcache durch Inventarisierungsaufgaben befüllt, die installierte Programme und Dateien durchsuchen. Daher zeigt ein Eintrag, dass die Datei vorhanden war und inventarisiert wurde, nicht unbedingt, dass sie ausgeführt wurde. Der LastWrite-Zeitpunkt des Schlüssels eines Eintrags gibt an, wann Windows den Eintrag geschrieben hat, nicht einen Ausführungszeitpunkt. Behandeln Sie Amcache als starken unterstützenden Beleg und verwenden Sie seinen SHA-1, um die genaue Binärdatei zu identifizieren, selbst nachdem die Datei gelöscht wurde. AmcacheParser ist ein Beispiel für ein Werkzeug.
Shimcache (AppCompatCache)
Der Anwendungskompatibilitätscache wird in SYSTEM\ControlSet001\Control\Session Manager\AppCompatCache, Wert AppCompatCache, als ein einzelner Binärblock gespeichert. Unter Windows 10 und 11 beginnt jeder Eintrag mit der Signatur 10ts und enthält den Dateipfad sowie den letzten Änderungszeitpunkt der Datei aus $STANDARD_INFORMATION. Dieser Zeitpunkt ist kein Ausführungszeitpunkt, und unter Windows 10 und 11 gibt es kein zuverlässiges Flag, das anzeigt, dass die Datei ausgeführt wurde. Die Einträge sind mit dem neuesten zuerst angeordnet; ihre Position kann daher helfen, Ereignisse zeitlich zu ordnen. Der Cache enthält bis zu 1.024 Einträge.
Der Cache befindet sich im Arbeitsspeicher und wird beim Herunterfahren oder Neustart in den Hive geschrieben. Eine Triage-Erfassung eines laufenden Systems enthält daher den Cache im Zustand des letzten Herunterfahrens: Kürzlich verwendete Programme können fehlen (die Arbeitsspeicheranalyse in Modul 5 kann sie wiederherstellen). Belegt: Eine Datei existierte unter diesem Pfad mit diesem Änderungszeitpunkt. Belegt nicht: Eine Ausführung oder einen Ausführungszeitpunkt. AppCompatCacheParser ist ein Beispiel für ein Werkzeug.
BAM und DAM
Der Background Activity Moderator, ein Dienst seit Windows 10 Version 1709, führt eine benutzerspezifische Liste im SYSTEM-Hive:
SYSTEM\ControlSet001\Services\bam\State\UserSettings\<SID>(spätere Windows-10-Builds und Windows 11);SYSTEM\ControlSet001\Services\bam\UserSettings\<SID>bei älteren Windows-10-Builds.
Jeder Wert trägt den vollständigen Gerätepfad als Namen, etwa \Device\HarddiskVolume3\Users\ana\Downloads\xfer.exe, und die ersten 8 Bytes der Daten sind ein FILETIME-Wert (UTC) der letzten Programmausführung. Ordnen Sie das Volume mithilfe der anderen Artefakte einem Laufwerksbuchstaben zu; das Windows-Volume ist üblicherweise C:. Da der Schlüssel pro SID geführt wird, verknüpft BAM ebenso wie das unten beschriebene UserAssist eine Ausführung mit einem Benutzerkonto (Lektion 2.2 behandelt die Auflösung von SIDs). Einträge werden bereinigt: Einträge, die älter als etwa eine Woche sind, sowie Einträge für gelöschte ausführbare Dateien können beim Systemstart verschwinden. Ihr Fehlen belegt daher wenig. Der Zeitpunkt kann um Sekunden oder mehr vom Prefetch-Ausführungszeitpunkt abweichen. Der Desktop Activity Moderator (Services\dam\...) verwendet denselben Aufbau und tritt hauptsächlich auf Geräten mit Modern Standby auf.
UserAssist
NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count zeichnet Programme auf, die der Benutzer über den Explorer gestartet hat: Startmenü, Desktop, Doppelklick. {CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} enthält ausführbare Dateien und {F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} Verknüpfungen. Wertnamen sind ROT13-codiert: P:\Hfref\nan\Qbjaybnqf\ksre.rkr wird zu C:\Users\ana\Downloads\xfer.exe decodiert. Bekannte Ordner erscheinen als GUIDs, beispielsweise {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7} für System32. Die 72 Byte langen Daten enthalten die Ausführungsanzahl (Offset 4), die Fokusanzahl (Offset 8), die Fokusdauer in Millisekunden (Offset 12) und den FILETIME-Wert der letzten Ausführung (Offset 60). Das belegt einen GUI-Start durch diesen Benutzer; Programme, die über eine Befehlszeile, ein Skript oder einen Dienst gestartet wurden, erscheinen jedoch nicht.
Protokolle des Programmkompatibilitätsassistenten (Windows 11)
Windows 11 22H2 und neuer schreiben Klartextdateien in C:\Windows\appcompat\pca\. PcaAppLaunchDic.txt enthält eine Zeile pro ausführbarer Datei: vollständiger Pfad, | und ein letzter Startzeitpunkt in UTC, etwa C:\Users\ana\Downloads\xfer.exe|2026-03-14 10:42:17.130. Öffentlich zugängliche Forschungsergebnisse zeigen, dass diese Zeilen über den Explorer gestartete Programme erfassen. Das Format ist jedoch undokumentiert, und nicht jeder Prozess erscheint darin. Behandeln Sie eine Zeile als Ausführungsbeleg, den Sie bestätigen sollten, und ihr Fehlen als nicht aussagekräftig.
Vergleich
| Artefakt | Speicherort | Bedeutung des Zeitstempels | Belegt die Ausführung? |
|---|---|---|---|
| Prefetch | C:\Windows\Prefetch\*.pf | Bis zu 8 letzte Ausführungen; .pf erstellt ≈ erste Ausführung, geändert ≈ letzte Ausführung | Ja (kein Benutzer) |
| Amcache | C:\Windows\AppCompat\Programs\Amcache.hve | LastWrite des Schlüssels = Eintrag geschrieben; LinkDate = Kompilierungszeitpunkt | Nein, unterstützt den Nachweis; liefert SHA-1 |
| Shimcache | SYSTEM ...\Session Manager\AppCompatCache | Letzter Änderungszeitpunkt der Datei aus $SI | Nein, nur Vorhandensein |
| BAM | SYSTEM ...\Services\bam\State\UserSettings\<SID> | Letzte Ausführung | Ja, pro Benutzer |
| UserAssist | NTUSER.DAT ...\Explorer\UserAssist\{GUID}\Count | Letzter GUI-Start | Ja, GUI-Starts durch diesen Benutzer |
| PCA | C:\Windows\appcompat\pca\PcaAppLaunchDic.txt | Letzter Start (UTC als Text) | Unterstützt den Nachweis; bestätigen |
Durchgerechnetes Beispiel: Wann wurde xfer.exe ausgeführt?
Die Triage-Erfassung eines Windows-11-Laptops enthält C:\Windows\Prefetch\XFER.EXE-1A2B3C4D.pf (der Hashwert dient hier der Veranschaulichung).
Prefetch. PECmd meldet Version 30, Ausführungsanzahl 3 und den referenzierten Pfad \VOLUME{…}\USERS\ANA\DOWNLOADS\XFER.EXE. Der neueste Ausführungszeitpunkt ist FILETIME 0x01DCB39F3A299D50 = 134.179.585.371.250.000. Die Division durch 10.000.000 ergibt 13.417.958.537,125 s seit 1601-01-01; das Subtrahieren von 11.644.473.600 s (1601 bis 1970) ergibt die Unix-Zeit 1.773.484.937,125, also 2026-03-14T10:42:17.125Z. Die anderen Ausführungszeitpunkte sind 2026-03-14T10:05:33Z und 2026-03-13T16:20:02Z. Die .pf-Datei wurde um 2026-03-13T16:20:12Z erstellt (10 s nach der ersten Ausführung) und um 2026-03-14T10:42:27Z geändert; beides ist konsistent.
BAM. Unter bam\State\UserSettings\S-1-5-21-…-1001 beginnt der Wert \Device\HarddiskVolume3\Users\ana\Downloads\xfer.exe mit 50 AB 50 41 9F B3 DC 01. Als Little-Endian gelesen ergibt das 0x01DCB39F4150AB50 = 134.179.585.491.250.000, also 2026-03-14T10:42:29.125Z: 12 Sekunden nach der letzten Ausführung laut Prefetch und verknüpft mit RID 1001, dem Konto ana.
Amcache. Ein InventoryApplicationFile-Eintrag enthält LowerCaseLongPath c:\users\ana\downloads\xfer.exe, Size 1.482.752 (unter 31.457.280, daher erfasst der SHA-1 die gesamte Datei), einen leeren Wert für Publisher und FileId 00003f2a9c1e7b0d4e85a6c2f19b0e7d3a5c48b1f6e2. Nach dem Entfernen von 0000 verbleibt der 40-stellige hexadezimale SHA-1 3f2a9c1e7b0d4e85a6c2f19b0e7d3a5c48b1f6e2, den Sie mit einer Kopie im Abbild des USB-Laufwerks oder mit einer Malware-Datenbank abgleichen können.
Die Falle. Shimcache führt C:\Users\ana\Downloads\xfer.exe mit dem Zeitpunkt 2026-03-13T16:18:40Z auf. Das ist der letzte Änderungszeitpunkt der Datei, höchstwahrscheinlich der Zeitpunkt, zu dem der Download geschrieben wurde, und er stimmt mit dem $SI-Änderungszeitpunkt in der $MFT überein. Es ist kein Ausführungszeitpunkt: Die Antwort auf „Wann wurde xfer.exe erstmals ausgeführt?“ lautet 2026-03-13T16:20:02Z aus Prefetch, nicht 16:18:40Z.
Prüfungsschwerpunkt: Rechnen Sie damit, einen ersten oder letzten Ausführungszeitpunkt aus Prefetch in UTC, einen SHA-1 aus AmcacheFileId(ohne das Präfix0000) oder die SID angeben zu müssen, die BAM mit einem Programm verknüpft. Fragen werden voraussichtlich prüfen, welche Zeitstempel eine Ausführung bedeuten: Shimcache-Zeitpunkte sind Dateiänderungszeitpunkte, und Amcache-Einträge zeigen das Vorhandensein an. Zwei .pf-Dateien mit demselben Namen und unterschiedlichen Hashes bedeuten zwei Pfade, sofern das Programm kein Hostprozess wie svchost.exe ist.
Kernpunkte
- Prefetch (
EXENAME-HASH.pf, MAM-komprimiert, Version 30 oder neuer) liefert Ausführungsanzahl, bis zu 8 Ausführungszeitpunkte, referenzierte Dateien und Volume-Daten; der Hash hängt vom Pfad ab. - Der Erstellungszeitpunkt der .pf-Datei liegt etwa 10 Sekunden nach der ersten Ausführung und ihr Änderungszeitpunkt etwa 10 Sekunden nach der letzten Ausführung.
- Amcache
InventoryApplicationFileliefert Pfad, Größe, LinkDate und SHA-1 (FileIdohne0000, erste 31.457.280 Bytes), zeigt aber das Vorhandensein und nicht die Ausführung an. - Shimcache zeichnet Pfad und $SI-Änderungszeitpunkt auf, wird beim Herunterfahren geschrieben und besitzt unter Windows 10 und 11 kein zuverlässiges Ausführungsflag.
- BAM liefert einen FILETIME-Wert der letzten Ausführung pro Benutzer-SID; UserAssist liefert ROT13-codierte GUI-Starts pro Benutzer; PCA-Protokolle unter Windows 11 22H2+ ergänzen einen Texteintrag zur Bestätigung.