TL;DR. Ogni generazione di Windows ha riscritto la struttura dell'AppCompatCache. XP usa una magic 0xDEADBEEF e un record fisso da 552 byte. Server 2003, Vista/2008, Windows 7/2008 R2 e Windows 8/8.1 hanno ciascuno il proprio header e layout di voce. Un parser deve diramare sulla magic dell'header. Non c'è un singolo formato.
La maggior parte della documentazione ShimCache copre il layout di Windows 10/11, perché è ciò che gli investigatori vedono sulle workstation. Poi ti consegnano un hive SYSTEM da un domain controller Windows 7, una macchina applicativa Server 2008 R2, o l'occasionale appliance XP che ancora gira codice di linea di business, e il parser moderno rifiuta cortesemente. Questa è la referenza per quei casi.
Perché non c'è un singolo formato
ShimCache è una struttura interna di Windows senza specifica pubblica. Microsoft l'ha rimodellata attraverso le release man mano che l'infrastruttura shim evolveva. Anche il nome del valore di registro e il percorso si sono spostati. Un parser robusto identifica la versione dall'header prima di leggere una singola voce. L'AppCompatCacheParser di Eric Zimmerman gestisce ogni versione. Il Mandiant Shim Cache Parser ne gestisce la maggior parte. Implementarsi il proprio senza uno step di rilevamento versione è il modo per produrre corruzione silenziosa.
Cheat sheet per versione
| Windows | Valore registro | Magic header | Forma voce |
|---|---|---|---|
| XP (32 bit) | …\AppCompatibility\AppCompatCache | 0xDEADBEEF | Record fissi da 552 byte, max 96 |
| Server 2003 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Voci 24 byte (x86) / 32 byte (x64) |
| Vista / 2008 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Come 2003, flag diversi |
| Windows 7 / 2008 R2 | …\AppCompatCache\AppCompatCache | 0xBADC0FEE | Header da 32 byte; le voci portano il flag di inserimento |
| Windows 8 / 2012 | …\AppCompatCache\AppCompatCache | 0x00000080 | Firma voce 00ts a lunghezza variabile |
| Windows 8.1 / 2012 R2 | …\AppCompatCache\AppCompatCache | 0x00000080 | Firma voce 10ts |
Il layout moderno 10ts di Windows 10/11 è dettagliato separatamente.
XP, l'eccezione
Windows XP non assomiglia a nulla di ciò che è venuto dopo. Magic 0xDEADBEEF, record a larghezza fissa di 552 byte, tetto duro di 96 voci, percorsi UTF-16 paddati a lunghezza fissa. Memorizzava anche un timestamp di ultimo aggiornamento e un campo di dimensione file che le versioni successive hanno scartato. Se vedi 0xDEADBEEF, sei in territorio XP e nessuna delle logiche di parsing moderne si applica. Anche il percorso del registro si è spostato: XP tiene il valore sotto AppCompatibility, non AppCompatCache.
Windows 7, quello che incontrerai di più
Windows 7 e Server 2008 R2 sono ancora comuni in IR. Magic 0xBADC0FEE, header da 32 byte, e record per voce che includono il percorso, l'ora di ultima modifica del file e (utilità unica) un flag di esecuzione rimosso in Windows 8 e successivi. Su Windows 7 un flag di esecuzione attivo è una conferma ragionevole di esecuzione, non assoluta. Non estrapolare questo ai sistemi più nuovi, come spiegato in lo ShimCache dimostra l'esecuzione?.
Gli hive Windows 7 si accoppiano anche con RecentFileCache.bcf, il predecessore di AmCache. Se hai un SYSTEM Win7, probabilmente hai un utile RecentFileCache.bcf accanto.
La transizione 8 / 8.1
Windows 8 ha introdotto la voce a lunghezza variabile con una firma per voce (00ts), e 8.1 l'ha portata a 10ts. È l'antenato strutturale del formato Windows 10/11, quindi un parser che gestisce 8.1 è quasi pronto per gestire 10. La magic dell'header è passata a 0x00000080 (l'offset della prima voce), convenzione che gli hive moderni hanno mantenuto.
Server 2003 e Vista
Magic 0xBADC0FFE. Le voci sono più piccole (24 byte su x86, 32 byte su x64). Vista ha aggiunto una parola di flag che 2003 non aveva. Entrambi sono rari nell'incident response moderno ma compaiono nelle migrazioni lift-and-shift di infrastrutture legacy.
Parsarli senza toolchain
Lo Shimcache Parser rileva automaticamente la magic dell'header e dirama al decoder corretto per XP, 2003, Vista, 7, 8, 8.1 e 10/11. Puoi leggere un hive SYSTEM legacy nel browser senza tirare fuori tooling vecchio. Per le linee guida di raccolta su questi sistemi più vecchi, vedi acquisire un hive SYSTEM. Per un triage registro più ampio su una macchina legacy, il registry parser gestisce le particolarità del formato hive più vecchio.
Letture aggiuntive
- Caching Out the Val di Mandiant. il reverse engineering per versione originale.
- AppCompatCacheParser di Eric Zimmerman. gestisce ogni versione; ottima ground truth.