TL;DR. Cada geração do Windows reescreveu a estrutura da AppCompatCache. O XP usa uma magic 0xDEADBEEF e um registo fixo de 552 bytes. Server 2003, Vista/2008, Windows 7/2008 R2 e Windows 8/8.1 têm cada um o seu próprio cabeçalho e disposição de entrada. Um parser tem de ramificar pela magic do cabeçalho. Não há um formato único.
A maior parte da documentação sobre ShimCache cobre a disposição Windows 10/11, porque é isso que os investigadores veem nas estações de trabalho. Depois recebe uma hive SYSTEM de um controlador de domínio Windows 7, de uma máquina aplicacional Server 2008 R2, ou daquela aparelhagem XP a correr código de linha-de-negócio, e o parser moderno recusa educadamente. Esta é a referência para esses casos.
Porque não há um formato único
A ShimCache é uma estrutura interna do Windows sem especificação pública. A Microsoft remodelou-a através das releases à medida que a infraestrutura de shim evoluiu. O nome e o caminho do valor de registo também mudaram. Um parser robusto identifica a versão a partir do cabeçalho antes de ler uma única entrada. O AppCompatCacheParser de Eric Zimmerman lida com todas as versões. O Shim Cache Parser da Mandiant lida com a maioria. Fazer o seu sem um passo de deteção de versão é como produz corrupção silenciosa.
Cábula por versão
| Windows | Valor de registo | Magic do cabeçalho | Forma da entrada |
|---|---|---|---|
| XP (32 bits) | …\AppCompatibility\AppCompatCache | 0xDEADBEEF | Registos 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 têm a 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 |
A disposição moderna 10ts do Windows 10/11 está detalhada em separado.
XP, o caso à parte
O Windows XP é diferente de tudo o que vem a seguir. Magic 0xDEADBEEF, registos de largura fixa de 552 bytes, limite rígido de 96 entradas, caminhos UTF-16 com padding para comprimento fixo. Guardava também um timestamp da última atualização e um campo de tamanho de ficheiro que versões posteriores abandonaram. Se vê 0xDEADBEEF, está em território XP e nada da lógica de parsing moderna se aplica. O caminho de registo também mudou: o XP guarda o valor sob AppCompatibility, não AppCompatCache.
Windows 7, o que vai encontrar mais
O Windows 7 e o Server 2008 R2 continuam comuns em IR. Magic 0xBADC0FEE, cabeçalho de 32 bytes, e registos por entrada que incluem o caminho, a hora da última modificação do ficheiro, e (singularmente útil) uma flag de execução que foi removida no Windows 8 e posteriores. No Windows 7, uma flag de execução ativa é corroboração razoável de execução, não absoluta. Não extrapole para sistemas mais recentes, conforme explicado em a ShimCache prova execução.
As hives do Windows 7 também emparelham com a RecentFileCache.bcf, antecessora da AmCache. Se tem um SYSTEM do Win7, provavelmente tem uma RecentFileCache.bcf útil ao lado.
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 elevou-a a 10ts. Este é o antecessor estrutural do formato Windows 10/11, pelo que um parser que lida com 8.1 está perto de lidar com o 10. A magic do cabeçalho mudou para 0x00000080 (o offset da primeira entrada), convenção que as hives modernas mantiveram.
Server 2003 e Vista
Magic 0xBADC0FFE. As entradas são mais pequenas (24 bytes em x86, 32 bytes em x64). O Vista acrescentou uma palavra de flags que o 2003 não tinha. Ambos são pouco comuns em resposta a incidentes moderna mas aparecem em migrações lift-and-shift de infraestrutura legada.
Analisá-los sem toolchain
O Shimcache Parser deteta automaticamente a magic do cabeçalho e ramifica para o descodificador correto para XP, 2003, Vista, 7, 8, 8.1 e 10/11. Pode ler uma hive SYSTEM antiga no browser sem preparar ferramentas datadas. Para orientação de recolha nesses sistemas antigos, veja adquirir uma hive SYSTEM. Para triagem de registo mais ampla numa máquina antiga, o registry parser trata das peculiaridades do formato antigo de hive.
Leitura adicional
- Caching Out the Val da Mandiant, a engenharia inversa original por versão.
- AppCompatCacheParser de Eric Zimmerman, trata de todas as versões; uma boa verdade de referência.