TL;DR. O ShimCache prova que um arquivo existiu em disco; AmCache prova que foi executado e o identifica por SHA-1. ShimCache só é gravado no desligamento limpo — AmCache escreve continuamente. Puxe os dois; são co-testemunhas, não substitutos.
ShimCache e AmCache são os dois artefatos baseados em registro mais citados nas investigações de execução de programas no Windows. Eles parecem intercambiáveis. Não são. Esta é uma referência rápida para decidir qual usar com base na pergunta que você está tentando responder.
Visão geral
| ShimCache | AmCache | |
|---|---|---|
| Local | HKLM\SYSTEM\…\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| Capacidade | Até 1.024 entradas | Milhares de entradas, sem teto fixo |
| Dados por entrada | Caminho, mtime, (legado) flag de execução | Caminho, SHA-1, tamanho, editor, data de instalação, muito mais |
| Escrito quando | Apenas no desligamento | Continuamente (e em intervalos agendados) |
| Sobrevive a crash | Não — entradas recentes perdidas | Sim — já em disco |
| Ideal para | Provar que um arquivo existiu em disco | Provar que um arquivo foi executado + identificá-lo por hash |
Quando o ShimCache vence
O ShimCache mantém uma entrada para todo executável que o Windows simplesmente examinou por razões de compatibilidade. Isso o torna sensível: um binário que um atacante soltou e excluiu imediatamente pode ainda deixar um rastro no ShimCache. Se sua pergunta é «este arquivo já existiu neste host?» — o ShimCache é seu aliado.
Também é o único dos dois que captura o mtime $STANDARD_INFORMATION do arquivo. Esse carimbo de tempo não é o momento da execução (um equívoco comum que cobrimos em outro post), mas ancora a identidade do arquivo no tempo.
Quando o AmCache vence
AmCache é o que você quer quando a pergunta é «este arquivo foi realmente executado, e qual arquivo exatamente?». Cada entrada AmCache carrega um hash SHA-1, o tamanho do arquivo, o editor, a data de instalação — o suficiente para identificar um binário sem ambiguidade, mesmo se o arquivo em disco foi desde então substituído ou apagado.
AmCache também persiste. Como o Windows o escreve continuamente em vez de apenas no desligamento, a atividade recente em um sistema que travou ou foi reiniciado bruscamente tem mais chances de estar no AmCache do que no ShimCache.
Como usá-los juntos
Na prática, trate-os como co-testemunhas:
- Uma entrada em ambos, ShimCache e AmCache, com caminhos coincidentes e um carimbo AmCache recente, é evidência forte de execução.
- Uma entrada apenas no ShimCache diz que o arquivo esteve ao menos em disco em algum momento. Procure evidências corroborantes (Prefetch, AmCache, logs de eventos) antes de afirmar execução.
- Uma entrada apenas em AmCache sem Prefetch e sem ShimCache geralmente significa que o host não foi desligado de forma limpa desde a atividade — o ShimCache nunca foi gravado em disco.
Para os detalhes técnicos do layout binário do ShimCache, veja Analisando o ShimCache: o formato binário do Windows 10 e 11. Para analisar uma hive agora sem instalar nada, use o Shimcache Parser — tudo roda no seu navegador.
Leitura adicional
- AppCompatCacheParser de Eric Zimmerman — implementação C# de referência.
- Artefato
Windows.Registry.AppCompatCachedo Velociraptor — lógica de coleta em sistemas vivos. - ShimCache & AmCache forensic analysis (Mehrnoush) — walkthrough estendido com exemplos de casos.