TL;DR. Jede Windows-Generation schrieb die AppCompatCache-Struktur neu. XP nutzt ein 0xDEADBEEF-Magic und einen festen 552-Byte-Datensatz; Server 2003, Vista/2008, Windows 7/2008 R2 und Windows 8/8.1 haben je eigenen Header und Eintrags-Layout. Ein Parser muss anhand des Header-Magic verzweigen — es gibt kein einheitliches Format.
Die meiste ShimCache-Dokumentation behandelt das Windows-10/11-Layout. Aber Incident-Responder treffen weiter auf Windows-7-Domänencontroller, Server-2008-R2-Maschinen und gelegentlich ein XP-Gerät. Die On-Disk-Struktur ist dort grundlegend anders. Dies ist die Referenz pro Version.
Warum es kein einheitliches Format gibt
ShimCache ist eine interne Windows-Struktur ohne öffentliche Spezifikation. Microsoft formte sie über die Releases um, während sich die Shim-Infrastruktur weiterentwickelte. Auch Name und Pfad des Registry-Werts wanderten. Ein robuster Parser bestimmt die Version aus dem Header, bevor er einen einzigen Eintrag liest.
Spickzettel pro Version
| Windows | Registry-Wert | Header-Magic | Eintragsform |
|---|---|---|---|
| XP (32-Bit) | …\AppCompatibility\AppCompatCache | 0xDEADBEEF | Feste 552-Byte-Datensätze, max. 96 |
| Server 2003 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | 24-Byte- (x86) / 32-Byte- (x64) Einträge |
| Vista / 2008 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Wie 2003, andere Flags |
| Windows 7 / 2008 R2 | …\AppCompatCache\AppCompatCache | 0xBADC0FEE | 32-Byte-Header; Einträge tragen das Insert-Flag |
| Windows 8 / 2012 | …\AppCompatCache\AppCompatCache | 0x00000080 | Eintragssignatur 00ts variabler Länge |
| Windows 8.1 / 2012 R2 | …\AppCompatCache\AppCompatCache | 0x00000080 | Eintragssignatur 10ts |
(Das moderne 10ts/00ts-Layout von Windows 10/11 wird separat behandelt.)
XP — der Ausreißer
Windows XP ähnelt nichts Späterem: ein 0xDEADBEEF-Magic, feste 552-Byte-Datensätze, ein hartes Limit von 96 Einträgen und UTF-16-Pfade auf feste Länge aufgefüllt. Es speicherte auch einen Letzte-Aktualisierung-Zeitstempel und ein Dateigrößenfeld, die spätere Versionen verwarfen. Sehen Sie 0xDEADBEEF, sind Sie im XP-Gebiet und keine moderne Parse-Logik gilt.
Windows 7 — das, dem Sie am häufigsten begegnen
Windows 7 / Server 2008 R2 ist in der IR weiterhin verbreitet. Magic 0xBADC0FEE, ein 32-Byte-Header und Einträge mit Pfad, letzter Änderungszeit der Datei und — besonders nützlich — einem Execute-Flag, das ab Windows 8 entfernt wurde. Unter Windows 7 ist ein gesetztes Flag eine vertretbare (nicht absolute) Untermauerung der Ausführung; extrapolieren Sie das nicht auf neuere Systeme, wie in beweist der ShimCache Ausführung erklärt.
Der 8/8.1-Übergang
Windows 8 führte den Eintrag variabler Länge mit Eintragssignatur (00ts) ein, 8.1 hob sie auf 10ts. Das ist der strukturelle Vorfahr des Windows-10/11-Formats; ein Parser, der 8.1 beherrscht, ist fast bereit für 10.
Sie ohne Toolchain parsen
Der Shimcache Parser erkennt das Header-Magic automatisch und verzweigt zum richtigen Decoder für XP, 2003, Vista, 7, 8, 8.1 und 10/11 — so lesen Sie eine alte SYSTEM-Hive im Browser, ohne alte Tools bereitzustellen. Zur Sammlung auf diesen älteren Systemen siehe eine SYSTEM-Hive beschaffen.
Weiterführende Quellen
- Mandiant: leveraging the ShimCache — das ursprüngliche Reverse Engineering pro Version.
- Eric Zimmermans AppCompatCacheParser — beherrscht jede Version; eine gute Referenzwahrheit.