Formati ShimCache legacy: Windows XP, 2003, Vista, 7 e 8

3 min di lettura

TL;DR. Ogni generazione di Windows ha riscritto la struttura dell'AppCompatCache. XP usa un magic 0xDEADBEEF e un record fisso di 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 in base al magic dell'header — non esiste un formato unico.

Gran parte della documentazione ShimCache copre il layout di Windows 10/11. Ma chi risponde agli incidenti incontra ancora domain controller Windows 7, macchine Server 2008 R2 e l'occasionale apparecchio XP. La struttura su disco su quegli host è sostanzialmente diversa. Ecco il riferimento per versione.

Perché non esiste un formato unico

Lo ShimCache è una struttura interna di Windows senza specifica pubblica. Microsoft l'ha rimodellata tra le versioni man mano che l'infrastruttura di shim evolveva. Anche nome e percorso del valore di registro sono cambiati. Un parser robusto identifica la versione dall'header prima di leggere una singola voce.

Promemoria per versione

WindowsValore di registroMagic dell'headerForma della voce
XP (32 bit)…\AppCompatibility\AppCompatCache0xDEADBEEFRecord fissi da 552 byte, max 96
Server 2003…\AppCompatCache\AppCompatCache0xBADC0FFEVoci da 24 byte (x86) / 32 byte (x64)
Vista / 2008…\AppCompatCache\AppCompatCache0xBADC0FFECome 2003, flag diversi
Windows 7 / 2008 R2…\AppCompatCache\AppCompatCache0xBADC0FEEHeader da 32 byte; le voci portano il flag d'inserimento
Windows 8 / 2012…\AppCompatCache\AppCompatCache0x00000080Firma di voce 00ts a lunghezza variabile
Windows 8.1 / 2012 R2…\AppCompatCache\AppCompatCache0x00000080Firma di voce 10ts

(Il layout moderno 10ts/00ts di Windows 10/11 è dettagliato a parte.)

XP — il caso anomalo

Windows XP non assomiglia a nulla di ciò che è venuto dopo: un magic 0xDEADBEEF, record a larghezza fissa di 552 byte, un limite rigido di 96 voci e percorsi UTF-16 riempiti a lunghezza fissa. Memorizzava anche una marca di ultimo aggiornamento e un campo dimensione file che le versioni successive hanno abbandonato. Se vedi 0xDEADBEEF, sei in territorio XP e nessuna logica di parsing moderna si applica.

Windows 7 — quello che incontrerai di più

Windows 7 / Server 2008 R2 è ancora comune nella IR. Magic 0xBADC0FEE, header da 32 byte e record per voce che includono il percorso, la data di ultima modifica del file e — particolarmente utile — un flag di esecuzione rimosso da Windows 8 in poi. Su Windows 7 un flag impostato è una conferma ragionevole (non assoluta) dell'esecuzione; non estrapolarlo a sistemi più recenti, come spiegato in lo ShimCache prova l'esecuzione.

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 è a buon punto per gestire 10.

Analizzarli senza una toolchain

Lo Shimcache Parser rileva automaticamente il magic dell'header e dirama al decoder corretto per XP, 2003, Vista, 7, 8, 8.1 e 10/11 — così puoi leggere una hive SYSTEM legacy nel browser senza predisporre vecchi strumenti. Per la raccolta su questi sistemi più vecchi, vedi acquisire una hive SYSTEM.

Approfondimenti

Articoli correlati