Artefatos do Windows · Aula 3 de 9
Execução de programas: Prefetch, Amcache, Shimcache e BAM
11 min de leitura
"Este programa foi executado, quando e sob qual usuário?" é uma das perguntas mais comuns em um caso envolvendo Windows. Nenhum artefato isolado responde às três partes. Esta aula aborda os principais artefatos de execução no Windows 10 e 11: onde cada um se encontra em uma coleta de triagem, quais registros de data e hora contém e o que comprova e não comprova. O método consiste em afirmar um horário de execução apenas com base em um artefato que registre a execução e corroborá-lo com os demais.
Prefetch
O prefetcher acelera a inicialização dos programas registrando o que um executável carrega. Cada executável recebe um arquivo C:\Windows\Prefetch\<EXENAME>-<HASH>.pf, por exemplo, XFER.EXE-1A2B3C4D.pf. O hash de 8 dígitos hexadecimais é calculado a partir do caminho completo do executável e, para processos de hospedagem como svchost.exe, rundll32.exe e dllhost.exe, também a partir da linha de comando. Para outros executáveis, portanto, o mesmo nome com hashes diferentes significa que o programa foi executado a partir de caminhos diferentes, o que frequentemente é relevante: SVCHOST.EXE fora de System32 é suspeito.
Formato
No Windows 10 e 11, os arquivos .pf são compactados. Eles começam com a assinatura MAM, seguida por um byte cujo nibble inferior 4 significa XPRESS Huffman (geralmente 0x04), e depois pelo tamanho descompactado; por isso, um editor hexadecimal não mostra nada legível até que uma ferramenta os descompacte. Após a descompactação, o cabeçalho começa com a versão do formato no offset 0 (30, isto é, 0x1E, no Windows 10 e 11; algumas compilações do Windows 11 usam 31, portanto espere encontrar "versão 30 ou posterior"), a assinatura SCCA no offset 4, o nome do executável em UTF-16 no offset 0x10 e o hash do caminho no offset 0x4C. Após a análise, um arquivo fornece:
- a contagem de execuções;
- até 8 horários das últimas execuções (FILETIME, UTC), do mais recente para o mais antigo;
- os arquivos e diretórios referenciados durante aproximadamente os primeiros dez segundos de execução, frequentemente incluindo DLLs, arquivos de dados e o caminho completo do próprio programa;
- informações do volume: caminho do dispositivo, número de série do volume e horário de criação do volume.
O arquivo .pf é gravado cerca de dez segundos após o início do programa. Seus próprios registros de data e hora no sistema de arquivos são, portanto, úteis: horário de criação ≈ primeira execução (a primeira execução ocorre cerca de 10 segundos antes) e horário de modificação ≈ última execução. Isso é importante quando a contagem de execuções é superior a 8 e os horários das execuções mais antigas já foram descartados.
Configurações e limites
O Prefetch é controlado por EnablePrefetcher em SYSTEM\ControlSet001\Control\Session Manager\Memory Management\PrefetchParameters (0 desativado, 1 inicialização de aplicativos, 2 somente inicialização do sistema, 3 ambos). O Windows cliente o habilita por padrão; o Windows Server geralmente mantém o prefetch de aplicativos desativado. Desde o Windows 8, a pasta armazena até 1.024 arquivos .pf, e os mais antigos são descartados. Em uma hive offline, não existe CurrentControlSet; leia SYSTEM\Select\Current para escolher o ControlSet00x correto (Aula 2.1).
Comprova: que o executável naquele caminho foi iniciado, quantas vezes e quando. Não comprova: qual usuário o executou, se concluiu sua tarefa ou que nunca foi executado antes (um .pf excluído ou descartado apaga o histórico). PECmd é um exemplo de ferramenta de análise.
Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve é uma hive em formato de Registro com seus próprios logs de transações, Amcache.hve.LOG1 e .LOG2; colete os três e reaplique os logs antes da análise. Nas compilações atuais do Windows 10 e 11, os arquivos são listados em Root\InventoryApplicationFile, com uma subchave por arquivo e valores como:
| Valor | Significado |
|---|---|
LowerCaseLongPath | Caminho completo em letras minúsculas |
Name, Publisher, Version | Obtidos do recurso de versão do PE (podem estar vazios) |
Size | Tamanho do arquivo em bytes |
LinkDate | Horário de compilação do cabeçalho PE (definido pelo vinculador, pode ser falsificado) |
FileId | 0000 seguido pelo SHA-1 do arquivo |
ProgramId | Vincula a um programa instalado em Root\InventoryApplication |
O SHA-1 abrange o arquivo inteiro somente até 31.457.280 bytes (30 MiB); para um arquivo maior, abrange os primeiros 31.457.280 bytes, portanto o hash do arquivo completo não será igual. Root\InventoryApplication lista os programas instalados com nome, editor, versão e informações de instalação. Compilações mais antigas usavam Root\File em vez disso.
A ressalva importante: no Windows 10 e 11, o Amcache é preenchido por tarefas de inventário que examinam programas e arquivos instalados, portanto uma entrada mostra que o arquivo estava presente e foi inventariado, não necessariamente que foi executado. O horário LastWrite da chave de uma entrada indica quando o Windows gravou a entrada, não um horário de execução. Trate o Amcache como uma forte evidência de apoio e use seu SHA-1 para identificar o binário exato, mesmo após a exclusão do arquivo. AmcacheParser é um exemplo de ferramenta.
Shimcache (AppCompatCache)
O cache de compatibilidade de aplicativos é armazenado em SYSTEM\ControlSet001\Control\Session Manager\AppCompatCache, no valor AppCompatCache, como um único bloco binário. No Windows 10 e 11, cada entrada começa com a assinatura 10ts e contém o caminho do arquivo e o horário da última modificação do arquivo obtido de $STANDARD_INFORMATION. Esse horário não é um horário de execução e, no Windows 10 e 11, não há um indicador confiável de que o arquivo foi executado. As entradas são ordenadas da mais recente para a mais antiga, portanto a posição pode ajudar a ordenar os eventos, e o cache armazena até 1.024 entradas.
O cache reside na memória e é gravado na hive durante o desligamento ou a reinicialização. Uma coleta de triagem de um sistema em execução contém, portanto, o cache como estava no último desligamento: programas recentes podem estar ausentes (a análise de memória no Módulo 5 pode recuperá-los). Comprova: que um arquivo existia naquele caminho com aquele horário de modificação. Não comprova: execução nem um horário de execução. AppCompatCacheParser é um exemplo de ferramenta.
BAM e DAM
O Background Activity Moderator, um serviço disponível desde o Windows 10 versão 1709, mantém uma lista por usuário na hive SYSTEM:
SYSTEM\ControlSet001\Services\bam\State\UserSettings\<SID>(compilações posteriores do Windows 10 e Windows 11);SYSTEM\ControlSet001\Services\bam\UserSettings\<SID>nas compilações mais antigas do Windows 10.
Cada valor tem como nome o caminho completo do dispositivo, como \Device\HarddiskVolume3\Users\ana\Downloads\xfer.exe, e os primeiros 8 bytes dos dados são um FILETIME (UTC) da última execução do programa. Mapeie o volume para uma letra de unidade usando os outros artefatos; o volume do Windows geralmente é C:. Como a chave é por SID, o BAM, assim como o UserAssist abaixo, vincula uma execução a uma conta de usuário (a Aula 2.2 aborda a resolução de SIDs). As entradas passam por limpeza: entradas com mais de cerca de uma semana e entradas de executáveis excluídos podem desaparecer na inicialização, portanto a ausência comprova pouco. O horário pode diferir em segundos ou mais do horário de execução do Prefetch. O Desktop Activity Moderator (Services\dam\...) usa a mesma estrutura e aparece principalmente em dispositivos com modo de espera moderno.
UserAssist
NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count registra programas que o usuário iniciou pelo Explorer: menu Iniciar, área de trabalho, clique duplo. {CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} contém executáveis e {F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} contém atalhos. Os nomes dos valores são codificados em ROT13: P:\Hfref\nan\Qbjaybnqf\ksre.rkr é decodificado como C:\Users\ana\Downloads\xfer.exe. Pastas conhecidas aparecem como GUIDs, por exemplo, {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7} para System32. Os dados de 72 bytes contêm a contagem de execuções (offset 4), a contagem de foco (offset 8), o tempo em foco em milissegundos (offset 12) e o FILETIME da última execução (offset 60). Isso comprova uma inicialização pela interface gráfica por aquele usuário, mas programas iniciados por uma linha de comando, um script ou um serviço não aparecem.
Logs do Assistente de Compatibilidade de Programas (Windows 11)
O Windows 11 22H2 e posteriores gravam arquivos de texto simples em C:\Windows\appcompat\pca\. PcaAppLaunchDic.txt contém uma linha por executável: caminho completo, | e um horário da última inicialização em UTC, como C:\Users\ana\Downloads\xfer.exe|2026-03-14 10:42:17.130. Pesquisas públicas mostram que essas linhas acompanham programas iniciados pelo Explorer, mas o formato não é documentado e nem todo processo aparece. Trate uma linha como evidência de execução a ser corroborada e sua ausência como algo sem significado.
Comparação
| Artefato | Localização | Significado do registro de data e hora | Comprova execução? |
|---|---|---|---|
| Prefetch | C:\Windows\Prefetch\*.pf | Até 8 últimas execuções; criação do .pf ≈ primeira execução, modificação ≈ última execução | Sim (sem usuário) |
| Amcache | C:\Windows\AppCompat\Programs\Amcache.hve | LastWrite da chave = gravação da entrada; LinkDate = horário de compilação | Não, serve de apoio; fornece SHA-1 |
| Shimcache | SYSTEM ...\Session Manager\AppCompatCache | Horário da última modificação do arquivo em $SI | Não, apenas presença |
| BAM | SYSTEM ...\Services\bam\State\UserSettings\<SID> | Última execução | Sim, por usuário |
| UserAssist | NTUSER.DAT ...\Explorer\UserAssist\{GUID}\Count | Última inicialização pela interface gráfica | Sim, inicializações pela interface gráfica por aquele usuário |
| PCA | C:\Windows\appcompat\pca\PcaAppLaunchDic.txt | Última inicialização (texto em UTC) | Serve de apoio; corrobore |
Exemplo resolvido: quando xfer.exe foi executado?
A coleta de triagem de um notebook com Windows 11 contém C:\Windows\Prefetch\XFER.EXE-1A2B3C4D.pf (o valor do hash aqui é ilustrativo).
Prefetch. O PECmd informa versão 30, contagem de execuções 3 e o caminho referenciado \VOLUME{…}\USERS\ANA\DOWNLOADS\XFER.EXE. O horário de execução mais recente é FILETIME 0x01DCB39F3A299D50 = 134.179.585.371.250.000. A divisão por 10.000.000 resulta em 13.417.958.537,125 s desde 1601-01-01; subtraindo 11.644.473.600 s (de 1601 a 1970), obtém-se o horário Unix 1.773.484.937,125, isto é, 2026-03-14T10:42:17.125Z. Os outros horários de execução são 2026-03-14T10:05:33Z e 2026-03-13T16:20:02Z. O arquivo .pf foi criado em 2026-03-13T16:20:12Z (10 s após a primeira execução) e modificado em 2026-03-14T10:42:27Z, ambos consistentes.
BAM. Em bam\State\UserSettings\S-1-5-21-…-1001, o valor \Device\HarddiskVolume3\Users\ana\Downloads\xfer.exe começa com 50 AB 50 41 9F B3 DC 01. Lido em little-endian, isso é 0x01DCB39F4150AB50 = 134.179.585.491.250.000, que corresponde a 2026-03-14T10:42:29.125Z: 12 segundos após a última execução do Prefetch e vinculado ao RID 1001, a conta ana.
Amcache. Uma entrada de InventoryApplicationFile tem LowerCaseLongPath c:\users\ana\downloads\xfer.exe, Size 1.482.752 (abaixo de 31.457.280, portanto o SHA-1 abrange o arquivo inteiro), Publisher vazio e FileId 00003f2a9c1e7b0d4e85a6c2f19b0e7d3a5c48b1f6e2. A remoção de 0000 deixa o SHA-1 de 40 dígitos hexadecimais 3f2a9c1e7b0d4e85a6c2f19b0e7d3a5c48b1f6e2, que você pode comparar com uma cópia na imagem da unidade USB ou em um banco de dados de malware.
A armadilha. O Shimcache lista C:\Users\ana\Downloads\xfer.exe com o horário 2026-03-13T16:18:40Z. Esse é o horário da última modificação do arquivo, muito provavelmente quando o download foi gravado, e corresponde ao horário de modificação de $SI na $MFT. Não é um horário de execução: a resposta a "quando xfer.exe foi executado pela primeira vez?" é 2026-03-13T16:20:02Z, obtido do Prefetch, e não 16:18:40Z.
Foco no exame: Prepare-se para informar um horário da primeira ou da última execução a partir do Prefetch em UTC, um SHA-1 deFileIddo Amcache (sem o prefixo0000) ou o SID que o BAM vincula a um programa. As questões provavelmente avaliarão quais registros de data e hora indicam execução: os horários do Shimcache são horários de modificação de arquivos e as entradas do Amcache mostram presença. Dois arquivos .pf com o mesmo nome e hashes diferentes significam dois caminhos, a menos que o programa seja um processo de hospedagem como svchost.exe.
Pontos principais
- O Prefetch (
EXENAME-HASH.pf, compactado com MAM, versão 30 ou posterior) fornece contagem de execuções, até 8 horários de execução, arquivos referenciados e dados do volume; o hash depende do caminho. - O horário de criação do arquivo .pf é cerca de 10 segundos após a primeira execução e seu horário de modificação é cerca de 10 segundos após a última execução.
InventoryApplicationFiledo Amcache fornece caminho, tamanho, LinkDate e SHA-1 (FileIdsem0000, primeiros 31.457.280 bytes), mas mostra presença, não execução.- O Shimcache registra o caminho e o horário de modificação de $SI, é gravado no desligamento e não tem um indicador confiável de execução no Windows 10 e 11.
- O BAM fornece um FILETIME da última execução por SID de usuário; o UserAssist fornece inicializações pela interface gráfica por usuário codificadas em ROT13; os logs do PCA no Windows 11 22H2+ acrescentam um registro em texto para corroborar.