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.
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:
- ler
HKLM\SYSTEM\Select\Current(um DWORD, tipicamente 1 ou 2), - percorrer o valor
ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCachecorrespondente, - cair em
ControlSet001eControlSet002seSelect\Currentnã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.exeou 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
- Microsoft Learn — Registry hives — referência canônica para arquivos de hive e ControlSets.
- ShimCacheParser da Mandiant — o parser Python original, útil como referência de formato.
- Velociraptor
Windows.Registry.AppCompatCache— lógica de coleta em sistemas vivos.