TL;DR. Cada geração do Windows reescreveu a estrutura do AppCompatCache. O XP usa um magic 0xDEADBEEF e um registro fixo de 552 bytes; Server 2003, Vista/2008, Windows 7/2008 R2 e Windows 8/8.1 têm cada um seu próprio cabeçalho e layout de entrada. Um parser precisa ramificar pelo magic do cabeçalho — não há um formato único.
A maior parte da documentação de ShimCache cobre o layout do Windows 10/11. Mas quem responde a incidentes ainda encontra controladores de domínio Windows 7, máquinas Server 2008 R2 e o eventual equipamento XP. A estrutura em disco nesses hosts é materialmente diferente. Esta é a referência por versão.
Por que não há um formato único
O ShimCache é uma estrutura interna do Windows sem especificação pública. A Microsoft a remodelou ao longo das versões conforme a infraestrutura de shim evoluía. O nome e o caminho do valor de registro também mudaram. Um parser robusto identifica a versão pelo cabeçalho antes de ler uma única entrada.
Cola por versão
| Windows | Valor de registro | Magic do cabeçalho | Forma da entrada |
|---|---|---|---|
| XP (32 bits) | …\AppCompatibility\AppCompatCache | 0xDEADBEEF | Registros fixos de 552 bytes, máx. 96 |
| Server 2003 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Entradas de 24 bytes (x86) / 32 bytes (x64) |
| Vista / 2008 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Como 2003, flags diferentes |
| Windows 7 / 2008 R2 | …\AppCompatCache\AppCompatCache | 0xBADC0FEE | Cabeçalho de 32 bytes; as entradas carregam o flag de inserção |
| Windows 8 / 2012 | …\AppCompatCache\AppCompatCache | 0x00000080 | Assinatura de entrada 00ts de comprimento variável |
| Windows 8.1 / 2012 R2 | …\AppCompatCache\AppCompatCache | 0x00000080 | Assinatura de entrada 10ts |
(O layout moderno 10ts/00ts do Windows 10/11 é detalhado à parte.)
XP — o caso atípico
O Windows XP não se parece com nada que veio depois: um magic 0xDEADBEEF, registros de largura fixa de 552 bytes, um limite rígido de 96 entradas e caminhos UTF-16 preenchidos a um comprimento fixo. Também armazenava uma marca de última atualização e um campo de tamanho de arquivo que versões posteriores abandonaram. Se você vê 0xDEADBEEF, está em território XP e nenhuma lógica de parsing moderna se aplica.
Windows 7 — o que você mais vai encontrar
Windows 7 / Server 2008 R2 ainda é comum em IR. Magic 0xBADC0FEE, cabeçalho de 32 bytes e registros por entrada que incluem o caminho, a data de última modificação do arquivo e — singularmente útil — um flag de execução removido a partir do Windows 8. No Windows 7 um flag setado é uma corroboração razoável (não absoluta) de execução; não extrapole isso para sistemas mais novos, como explicado em o ShimCache prova execução.
A transição 8 / 8.1
O Windows 8 introduziu a entrada de comprimento variável com uma assinatura por entrada (00ts), e o 8.1 a elevou para 10ts. É o ancestral estrutural do formato do Windows 10/11, então um parser que lida com 8.1 já está quase pronto para lidar com 10.
Analisá-los sem uma cadeia de ferramentas
O Shimcache Parser detecta automaticamente o magic do cabeçalho e ramifica para o decodificador correto para XP, 2003, Vista, 7, 8, 8.1 e 10/11 — assim você lê uma colmeia SYSTEM legada no navegador sem montar ferramentas antigas. Para a coleta nesses sistemas mais antigos, veja adquirir uma colmeia SYSTEM.
Leitura adicional
- Mandiant: leveraging the ShimCache — a engenharia reversa original por versão.
- AppCompatCacheParser de Eric Zimmerman — lida com todas as versões; uma boa verdade de referência.