Onde o ShimCache fica armazenado e quando é escrito?

3 min de leitura

TL;DR. O ShimCache vive em HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. O Windows o reconstrói em memória a cada sessão e só o grava na hive SYSTEM no desligamento limpo — uma reinicialização forçada pode descartar inteiramente as entradas recentes. Não esqueça de reproduzir SYSTEM.LOG1 / SYSTEM.LOG2.

Muitos contratempos com o ShimCache remontam a um único mal-entendido: investigadores assumem que o cache é atualizado como um arquivo de log, com entradas gravadas em disco à medida que acontecem. Não é assim. Aqui está exatamente onde o ShimCache vive e quando o Windows escreve nele.

ShimCache: gravações em memória vs gravação em disco

O caminho no registro

O ShimCache vive dentro da hive SYSTEM, em:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache

Esse último AppCompatCache é um valor, não uma subchave. O dado é um único blob binário cujo esquema varia por versão do Windows — XP, 7, 8, 8.1, 10 e 11 usam cada um um layout ligeiramente diferente. O passeio pelo formato binário cobre o esquema moderno do Windows 10/11 em detalhes.

Você pode ler o mesmo valor offline extraindo a hive SYSTEM — é um dos arquivos sob C:\Windows\System32\config\ — e apontando um parser para ele. O Shimcache Parser faz exatamente isso, no seu navegador, sem enviar o arquivo a lugar nenhum.

O truque do ControlSet «atual»

O Windows na verdade mantém múltiplos ControlSets (ControlSet001, ControlSet002, às vezes mais). Em qualquer momento, exatamente um é o conjunto ativo, indicado pelo valor HKLM\SYSTEM\Select\Current. CurrentControlSet é um alias em tempo de execução para o que estiver ativo.

Ao analisar offline você deve:

  1. ler HKLM\SYSTEM\Select\Current (um DWORD, tipicamente 1 ou 2),
  2. percorrer o valor ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCache correspondente,
  3. cair em ControlSet001 e ControlSet002 se Select\Current não for legível.

A maioria dos parsers — esta ferramenta incluída — lida com isso automaticamente.

Quando o cache é escrito

Aqui está a parte que surpreende: enquanto o sistema está em execução, o ShimCache vive em memória. O Windows só o grava na hive SYSTEM no desligamento limpo. Portanto:

  • Um reinício forçado, queda de energia, BSOD ou kill de VM em nível de hipervisor descartará quaisquer entradas recentes que ainda não tenham sido persistidas.
  • Uma triagem a quente de um sistema em execução com reg.exe ou RegRipper vê o ShimCache anteriormente persistido, não o que está sendo construído em memória.
  • Análise de memória (ex. plugin Volatility shimcachemem) pode recuperar o cache atual em memória antes que se perca.

Esse timing é o motivo pelo qual a análise dead-box de uma hive frequentemente perde a atividade mais recente, e por que os investigadores recorrem ao AmCache (que escreve continuamente — veja ShimCache vs AmCache) para preencher a lacuna.

E o log de transações do registro?

A hive SYSTEM é acompanhada de arquivos de log de transações (SYSTEM.LOG1, SYSTEM.LOG2). Eles podem conter escritas não flushadas que nunca chegaram à hive principal. Parsers offline robustos reproduzem esses logs antes de ler o ShimCache; se você está construindo sua própria análise, considere-os ou use um parser que faça isso.

Checklist rápida

  • Valor ShimCache: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache
  • ControlSet ativo selecionado por HKLM\SYSTEM\Select\Current
  • Armazenado em memória, gravado apenas no desligamento limpo — corroborar com AmCache para atividade recente
  • Reproduzir logs SYSTEM.LOG* antes do parsing para o quadro mais atual

Leitura adicional

Artigos relacionados