
Introdução
Quando falamos de análise forense digital, o artefato AmCache tem fundamental importância na identificação de atividades maliciosas em sistemas Windows. Esse artefato permite a identificação da execução de binários legítimos e maliciosos. Ele é gerenciado pelo sistema operacional e, até o momento da redação deste artigo, não existe uma maneira conhecida para modificar ou remover dados do AmCache. Logo, em um cenário de resposta a um incidente cibernético, o AmCache pode ser a chave para identificar artefatos perdidos (por exemplo, ransomware que se auto apaga), permitindo que analistas pesquisem padrões deixados pelo atacante, como nomes de arquivos e diretórios. Ademais, o AmCache armazena os hashes SHA-1 dos arquivos executados, o que permite aos profissionais de forense a pesquisa em feeds de threat intelligence (como o OpenTIP e VirusTotal) e a geração de regras para bloquear os arquivos identificados em outras máquinas presentes na rede.
Este artigo apresenta uma análise abrangente do artefato AmCache, permitindo que os leitores compreendam melhor o seu funcionamento interno. Além disso, apresentamos uma nova ferramenta chamada “AmCache-EvilHunter“, que pode ser utilizada por qualquer profissional para analisar facilmente o arquivo Amcache.hve
e extrair indicadores de comprometimento (IOCs). A ferramenta também é capaz de consultar os feeds de inteligência supracitados para verificar detecções de arquivos maliciosos; esse nível de automação integrada reduz o esforço manual e acelera a detecção de ameaças, o que é de grande valor para analistas e equipes de resposta.
A importância das evidências de execução
A evidência de execução é fundamental para a análise forense digital e resposta a incidentes, pois ajuda os investigadores a reconstruírem como o sistema foi utilizado durante uma invasão. Artefatos como o Prefetch, ShimCache e UserAssist oferecem pistas sobre o que foi executado. O AmCache também é um artefato robusto para identificação de evidência de execução, preservando metadados que indicam a presença e a execução de um arquivo, mesmo que o arquivo tenha sido excluído ou modificado. Uma vantagem do AmCache em relação a outros artefatos do Windows é que ele armazena o hash do arquivo, o que é extremamente útil para os analistas, pois pode ser usado para buscar arquivos maliciosos pela rede, aumentando a probabilidade de identificar completamente, conter e erradicar a ameaça.
Introdução ao AmCache
O Application Activity Cache (AmCache) foi introduzido pela primeira vez no Windows 7 e completamente implementado no Windows 8 e superiores. Seu propósito é substituir o antigo RecentFileCache.bcf
em sistemas recentes. Ao contrário do seu antecessor, o AmCache inclui informações forenses valiosas sobre execução de programas e drivers carregados.
Esse artefato é armazenado como um arquivo de hive de registro chamado Amcache.hve
no diretório C:\Windows\AppCompat\Programs
. Os metadados armazenados nesse arquivo incluem os caminhos dos arquivos, dados dos desenvolvedores, timestamps de compilação, tamanhos de arquivos e hashes SHA-1.
É importante destacar que o formato do AmCache não depende da versão do sistema operacional, mas sim da versão das bibliotecas (DLLs) responsáveis por preencher o cache. Dessa forma, mesmo sistemas Windows com diferentes níveis de atualização podem apresentar pequenas diferenças na estrutura dos arquivos AmCache. As bibliotecas conhecidas usadas para preencher esse cache estão armazenadas em %WinDir%\System32
com os seguintes nomes:
- aecache.dll
- aeevts.dll
- aeinv.dll
- aelupsvc.dll
- aepdu.dll
- aepic.dll
Vale ressaltar que esse artefato possui algumas particularidades e limitações. O AmCache calcula o hash SHA-1 considerando apenas os primeiros 31.457.280 bytes (aproximadamente 31 MB) de cada executável; portanto, comparar seu hash online pode falhar para arquivos que excedam esse tamanho. Além disso, Amcache.hve
não é realmente um log de execução: ele registra arquivos em diretórios examinados pelo Microsoft Compatibility Appraiser, executáveis e drivers copiados durante a execução de programas, e aplicativos GUI que exigiram shimming de compatibilidade. Apenas a última categoria indica execução real de forma confiável. Itens nos dois primeiros grupos simplesmente confirmam a presença do arquivo no sistema, sem dados sobre se ou quando foram executados.
No mesmo diretório, podemos encontrar arquivos LOG adicionais usados para garantir a consistência do Amcache.hve
e operações de recuperação:
- C:\Windows\AppCompat\Programs\Amcache.hve.*LOG1
- C:\Windows\AppCompat\Programs\Amcache.hve.*LOG2
O arquivo Amcache.hve
pode ser coletado de um sistema para análise forense usando ferramentas como Aralez, Velociraptor ou Kape.
A estrutura do Amcache.hve
O arquivo Amcache.hve
é um hive do Registro do Windows no formato REGF; ele contém várias subchaves que armazenam diferentes classes de dados. Um parser simples em Python pode ser implementado para iterar o Amcache.hve
e apresentar suas chaves.
1 2 3 4 5 6 7 8 9 10 |
#!/usr/bin/env python3 import sys from Registry.Registry import Registry hive = Registry(str(sys.argv[1])) root = hive.open("Root") for rec in root.subkeys(): print(rec.name()) |
O resultado desse parser ao ser executado é:

Chaves da AmCache
Do ponto de vista de DFIR (Digital Forensics and Incident Response), as chaves que mais nos interessam são: InventoryApplicationFile
, InventoryApplication
, InventoryDriverBinary
e InventoryApplicationShortcut
, que são descritas em detalhes nas subseções a seguir.
InventoryApplicationFile
A chave InventoryApplicationFile
é essencial para rastrear todos os executáveis encontrados no sistema. Cada executável é representado por uma subchave com nome único, que armazena os seguintes metadados principais:
- ProgramId: um hash único gerado a partir do nome do binário, versão, desenvolvedor e linguagem, com alguns zeros adicionados no início do hash
- FileID: o hash SHA-1 do arquivo, com quatro zeros adicionados no início do hash
- LowerCaseLongPath: o caminho completo do arquivo em letras minúsculas
- Name: nome do arquivo
- OriginalFileName: nome original do arquivo como especificado no cabeçalho PE (nome dado pelo desenvolvedor)
- Publisher: geralmente utilizado para identificar se o desenvolvedor do binário é legítimo. Para malware, essa subchave normalmente estará vazia
- Version: versão do executável
- BinaryType: indica se o binário é de 32 ou 64 bits
- ProductName: armazena mais informações sobre o executável
- LinkDate: data de compilação extraída do cabeçalho PE
- Size: tamanho do arquivo em bytes
- IsOsComponent: flag booleana que indica se o executável pertence ao sistema operacional ou não
Com algumas adaptações em nosso parser, podemos ler as informações armazenadas dentro dessa chave:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/env python3 import sys from Registry.Registry import Registry hive = Registry(sys.argv[1]) root = hive.open("Root") subs = {k.name(): k for k in root.subkeys()} parent = subs.get("InventoryApplicationFile") for rec in parent.subkeys(): vals = {v.name(): v.value() for v in rec.values()} print("{}\n{}\n\n-----------\n".format(rec, vals)) |

Subchaves do InventoryApplicationFile
Também podemos usar ferramentas como o Registry Explorer para visualizar os mesmos dados de forma gráfica:

Análise do InventoryApplicationFile via Registry Explorer
Como mencionado anteriormente, o AmCache calcula o hash SHA-1 apenas sobre os primeiros 31.457.280 bytes (aproximadamente 31 MB). Para comprovar isso, fizemos um pequeno experimento, no qual utilizamos um binário menor que 31 MB (Aralez) e outro maior que esse valor (uma versão customizada do Velociraptor). No primeiro caso, o hash SHA-1 do binário inteiro foi armazenado no AmCache.

Primeiro cenário do experimento
Para o segundo cenário, usamos o utilitário dd para extrair os primeiros 31 MB do binário do Velociraptor:

Binário com apenas 31 MB
Ao verificar a entrada do Velociraptor no AmCache, constatamos que ele realmente armazenava o hash SHA-1 calculado apenas sobre os primeiros 31.457.280 bytes do binário. Curiosamente, o valor de Size representava o tamanho real do arquivo original. Portanto, confiar apenas no hash do arquivo armazenado no AmCache para consultar portais de inteligência de ameaças pode não ser suficiente ao lidar com arquivos grandes. Logo, é necessário verificar se o tamanho do arquivo no registro é maior que 31.457.280 bytes antes de fazer a busca nos portais de inteligência de ameaças.

Segundo cenário do experimento
Sabendo disso, atacantes podem tirar vantagem dessa característica para gerar propositalmente binários maliciosos de tamanho grande. Dessa forma, mesmo que os investigadores verifiquem que um malware foi executado/esteve presente em um sistema Windows, o hash SHA-1 real do binário permanecerá desconhecido, dificultando seu rastreamento pela rede e sua recuperação em bases como o VirusTotal.
InventoryApplicationFile – caso de uso: identificação de um aplicativo excluído que foi previamente utilizado
Suponha que você esteja investigando uma possível ameaça interna. O usuário nega ter executado qualquer programa suspeito e qualquer software suspeito foi apagado de forma segura do disco. Mas, na chave InventoryApplicationFile
, você encontra um registro do winscp.exe
presente na pasta de Downloads do usuário. Mesmo que o arquivo não exista mais, isso indica que a ferramenta esteve na máquina e provavelmente foi usada para transferir arquivos antes de ser excluída. Em nossos casos de resposta a incidentes, já vimos casos semelhantes, nos quais essa chave se mostrou útil.
InventoryApplication
A chave InventoryApplication
registra dados sobre aplicativos que foram previamente instalados no sistema. Diferentemente da InventoryApplicationFile
, que registra todos os executáveis encontrados, a InventoryApplication
foca naqueles com registros de instalação. Cada entrada é nomeada pelo seu ProgramId único, permitindo uma ligação direta com a chave correspondente em InventoryApplicationFile
. Além disso, a InventoryApplication
possui as seguintes subchaves de interesse:
- InstallDate: string que indica a data de instalação do aplicativo
- MsiInstallDate: presente apenas se o aplicativo foi instalado via Windows Installer (MSI); extraída diretamente dos metadados do MSI
- UninstallString: a linha de comando exata utilizada para desinstalar o programa
- Language: identificador numérico de localidade (LCID)
- Publisher: nome do desenvolvedor ou fabricante
- ManifestPath: caminho do manifest utilizado pelo UWP ou aplicativos AppX/MSIX
Com uma pequena alteração em nosso parser, podemos verificar os dados contidos nessa chave:
1 2 3 |
<...> parent = subs.get("InventoryApplication") <...> |

Subchaves de InventoryApplication
Quando um ProgramId
aparece tanto aqui quanto na chave InventoryApplicationFile
, isso confirma que o executável não está/estava apenas presente ou foi executado, mas foi formalmente instalado. Essa distinção nos ajuda a separar cópias ou execuções temporárias do software propriamente instalado. A figura a seguir destaca o ProgramId do software WinRAR na chave InventoryApplicationFile
.
Ao buscar pelo ProgramId
, encontramos uma correspondência exata na chave InventoryApplication
. Isso confirma que o WinRAR realmente foi instalado no sistema.
Outro detalhe interessante sobre a chave InventoryApplication
é que ela contém uma subchave chamada LastScanTime
, que é armazenada separadamente dos ProgramIds
e mantém um valor representando a última vez que o Microsoft Compatibility Appraiser foi executado. Essa é uma tarefa agendada que inicia o binário compattelrunner.exe
, e as informações nessa chave só devem ser atualizadas quando essa tarefa for executada. Como resultado, softwares instalados desde a última execução do Appraiser podem não aparecer aqui. O valor LastScanTime
é armazenado no formato Windows FileTime.

Informações de InventoryApplication LastScanTime
InventoryApplication – caso de uso: identificação de software de acesso remoto
Suponha que, durante uma investigação de resposta a incidentes, você encontre uma entrada para o AnyDesk na chave InventoryApplication
(mesmo que o aplicativo não esteja mais instalado). Isso indica que o atacante provavelmente utilizou essa ferramenta para acesso remoto e depois a removeu para cobrir seus rastros. Mesmo que tenha sido apagadа do disco, essa chave comprova que o programa esteve presente. Já vimos esse cenário em casos reais mais de uma vez.
InventoryDriverBinary
A chave InventoryDriverBinary
registra todos os drivers que o sistema carregou, fornecendo os metadados essenciais para identificar drivers suspeitos ou maliciosos. Cada driver é armazenado em uma subchave com nome único e inclui:
- FileID: o hash SHA-1 do driver, com quatro zeros adicionados no início
- LowerCaseLongPath: caminho complete em letras minúsculas do driver no disco
- DigitalSignature: detalhes sobre o certificado utilizado. Uma assinatura válida nos ajuda a confirmar se o driver é legítimo ou não
- LastModified: data de modificação, ajuda a identificar quando o driver foi alterado em disco
Como os drivers do Windows operam no nível de privilégio mais alto, eles são frequentemente explorados por malware. Por exemplo, um estudo anterior realizado pela Kaspersky mostra que os atacantes estão explorando drivers vulneráveis para encerrar processos de EDR (Endpoint Detection and Response). Ao investigar um incidente de cibersegurança, os analistas podem correlacionar informações como o hash de cada driver, o caminho do arquivo, o status da assinatura digital e o timestamp de modificação. Essa análise permite verificar se o binário corresponde a uma versão legítima e assinada, identificar adulterações por meio de datas de modificação suspeitas e destacar drivers não assinados ou com nomes incomuns para uma investigação mais detalhada. Projetos como o LOLDrivers contribuem para a detecção de drivers vulneráveis frequentemente explorados por invasores em ambientes reais.

Dados em InventoryDriverBinary
Além do InventoryDriverBinary
, o AmCache também fornece a chave InventoryApplicationDriver
, que registra todos os drivers que foram instalados por aplicativos específicos. Ela inclui duas entradas:
- DriverServiceName, que identifica o nome do serviço associado ao driver instalado; e
- ProgramIds, que lista os identificadores dos programas (correspondente aos nomes em
InventoryApplication
) responsáveis pela instalação do driver.
Conforme apresentado na figura abaixo, a chave ProgramIds pode ser usada para rastrear o programa associado que utiliza esse driver:

Correlação de informações via ProgramIds
InventoryDriverBinary – caso de uso: identificação de um driver vulnerável ou malicioso
Se o sistema foi comprometido por meio da exploração de um driver conhecido como vulnerável ou malicioso, você pode utilizar a chave de registro InventoryDriverBinary
para confirmar sua presença. Mesmo que o driver tenha sido removido, vestígios nessa chave podem revelar que ele já foi carregado pelo sistema operacional, o que ajuda a identificar comprometimentos em nível de kernel e na reconstrução da linha do tempo durante a investigação. Foi exatamente assim que o malware AV Killer previamente citado foi descoberto.
InventoryApplicationShortcut
Essa chave contém entradas para arquivos .lnk (atalhos) que estavam presentes em pastas como o Menu Iniciar ou a Área de Trabalho de cada usuário. Dentro de cada chave, o ShortcutPath
fornece o caminho absoluto para o arquivo LNK no momento em que foi identificado. O ShortcutTargetPath
mostra para onde o atalho apontava. Também podemos buscar pela entrada ProgramId
dentro da chave InventoryApplication
, utilizando o ShortcutProgramId
(de forma semelhante ao que fizemos com os drivers).

Chave InventoryApplicationShortcut
InventoryApplicationShortcut – caso de uso: confirmar o uso de um aplicativo excluído
Você descobre que um programa suspeito foi excluído do computador, mas o usuário afirma que nunca o executou. A chave InventoryApplicationShortcut
pode revelar que havia um atalho para esse programa na área de trabalho e que ele foi acessado recentemente. Com evidências complementares, como uma análise do Prefetch, é possível confirmar a execução do software.
Comparação entre as chaves do AmCache
A tabela abaixo resume as informações apresentadas nas subseções anteriores, destacando os principais dados sobre cada chave do AmCache.
Chave | Contém | Indica execução? |
InventoryApplicationFile | Metadados para todos os executáveis identificados no sistema. | Possivelmente (presença = provável execução) |
InventoryApplication | Metadados sobre programas instalados no sistema. | Não (indica a instalação, não necessariamente a execução) |
InventoryDriverBinary | Metadados sobre drivers carregados no sistema. | Sim (o driver foi carregado em memória) |
InventoryApplicationShortcut | Informações sobre arquivos .lnk. | Possivelmente (necessita validação com outros artefatos) |
AmCache-EvilHunter
Sem dúvida, o Amcache.hve
é um artefato forense de grande importância. Entretanto, não identificamos nenhuma ferramenta que interprete seu conteúdo de forma eficaz enquanto fornece inteligência de ameaças para o analista. Com isso em mente, desenvolvemos o AmCache-EvilHunter
, uma ferramenta de linha de comando para interpretar e analisar arquivos de registro Amcache.hve
do Windows, identificar evidências de execução, executáveis suspeitos e realizar consultas ao Kaspersky OpenTIP e VirusTotal, visando aprimorar a inteligência de ameaças durante procedimentos de DFIR.
O AmCache-EvilHunter
é capaz de processar o arquivo Amcache.hve
e filtrar os registros por intervalo de datas (com as opções --start
e --end
). Também é possível buscar registros usando palavras-chave (--search
), o que é útil para procurar convenções de nomenclatura conhecidas adotadas por atacantes. Os resultados podem ser salvos nos formatos CSV (--csv
) ou JSON (--json
).
A imagem abaixo apresenta um exemplo de execução do AmCache-EvilHunter com as opções básicas, utilizando o seguinte comando:
1 |
amcache-evilhunter -i Amcache.hve --start 2025-06-19 --end 2025-06-19 --csv output.csv |
A saída contém todos os aplicativos que estavam presentes na máquina em 19 de junho de 2025. A última coluna indica se o arquivo é um componente do sistema operacional ou não.

Uso básico do AmCache-EvilHunter

Resultado em CSV
Analistas frequentemente se deparam com um grande volume de executáveis. Para reduzir o escopo e diminuir informações irrelevantes, a ferramenta consegue buscar binários suspeitos conhecidos com a opção --find-suspicious
. Os padrões usados pela ferramenta incluem nomes comuns de malware, processos do Windows com pequenos erros de digitação (por exemplo, scvhost.exe
), executáveis legítimos frequentemente usados em incidentes, nomes de arquivo de uma letra/um dígito (como 1.exe
, a.exe
) ou strings hexadecimais aleatórias. A figura abaixo apresenta os resultados obtidos ao usar esta opção; como destacado, um arquivo svchost.exe
faz parte do sistema operacional e o outro não, tornando este último um bom candidato para coleta e análise caso não tenha sido excluído.

Identificação de arquivos suspeitos
Arquivos maliciosos geralmente não incluem informações de desenvolvedor e definitivamente não fazem parte do sistema operacional por padrão. Por essa razão, o AmCache-EvilHunter
também conta com as opções --missing-publisher
e --exclude-os
. Esses parâmetros permitem um filtro fácil de binários suspeitos e agilizam a coleta de inteligência de ameaças, o que é crucial durante um incidente.
Outra funcionalidade importante que diferencia nossa ferramenta de outras abordagens propostas é que o AmCache-EvilHunter pode consultar o Kaspersky OpenTIP (--opentip
) e o VirusTotal (--vt
) para os hashes que identifica. Dessa forma, os analistas podem obter rapidamente informações sobre os artefatos e decidir se irão prosseguir com uma análise completa dele ou não.

Dados de threat intelligence
Os binários da ferramenta estão disponíveis em nossa página do GitHub para sistemas Linux e Windows.
Conclusão
O Amcache.hve
é uma peça fundamental na perícia forense de sistemas Windows, armazenando metadados detalhados, como caminhos completos, hashes SHA-1, timestamps de compilação, informações do desenvolvedor e versão, para executáveis presentes no sistema. Embora não funcione como um registro definitivo de execução, sua vantagem está em documentar a presença e os caminhos dos arquivos, sendo essencial para identificar binários suspeitos, verificar a confiabilidade por meio de buscas de hashes em bases de inteligência de ameaças e correlacionar valores de LinkDate
com campanhas de ataque conhecidas.
Para extrair todo o seu potencial investigativo, os analistas podem combinar os dados do AmCache com outros artefatos (por exemplo, Prefetch, ShimCache e logs de eventos do Windows) para confirmar a execução real e construir linhas do tempo precisas. Comparar as entradas de InventoryApplicationFile
com InventoryApplication
revela se um arquivo foi apenas copiado ou formalmente instalado, e identificar registros incomuns de drivers pode expor rootkits e mecanismos de persistência. Utilizar parsers como o AmCache-EvilHunter e realizar buscas no VirusTotal ou bases de dados de ameaças proprietárias permite a geração de Indicadores de Comprometimento (IOCs) e uma resposta a incidentes robusta, tornando a análise do AmCache uma habilidade fundamental para profissionais de análise forense digital.
Jornada forense: identificação de aplicativos maliciosos via AmCache