AmcacheParser : le guide complet de l'outil d'Eric Zimmerman

AmcacheParser est l'outil open source de référence pour analyser la ruche du registre Windows Amcache.hve. Il a été écrit par Eric Zimmerman, praticien chevronné de l'investigation numérique dont la suite d'outils (MFTECmd, RECmd, PECmd, EvtxECmd, …) constitue l'ossature des workflows forensiques Windows modernes. Si vous avez déjà trié un poste Windows, vous avez très probablement utilisé AmcacheParser — directement ou via un wrapper comme KAPE.

Ce guide est la référence canonique sur l'outil : ce qu'il analyse, comment l'installer, comment lire sa sortie, sa place dans un workflow DFIR, et quand vous pourriez préférer exécuter la même logique de parsing dans un navigateur sans rien installer (ce que fait ce site).

Crédit là où il est dû. AmcacheParser est l'œuvre d'Eric Zimmerman. L'analyseur dans le navigateur hébergé sur amcacheparser.com est un projet indépendant qui réimplémente le chemin de lecture en Rust + WebAssembly pour le triage et la formation. Il n'est ni affilié à Eric, ni à son employeur.


Qu'est-ce qu'AmcacheParser ?#

AmcacheParser est un programme en ligne de commande (AmcacheParser.exe) qui :

  1. Ouvre une ruche Amcache.hve du registre Windows (ou une copie accompagnée de ses journaux de transactions).
  2. Parcourt les sous-clés pertinentes : Root\InventoryApplicationFile, Root\InventoryApplication, Root\InventoryDriverBinary, Root\InventoryDeviceContainer, Root\Programs, Root\File, et les autres clés Inventory*.
  3. Décode les valeurs (FILETIMEs Windows, identifiants SHA-1, chaînes de version, GUIDs, ...) en champs lisibles.
  4. Écrit un CSV par catégorie, plus une timeline combinée.

C'est délibérément un analyseur en lecture seule et à usage unique : il n'interprète pas, ne note pas, ne déclenche pas d'alerte. Sa sortie est destinée à alimenter votre carnet d'analyste, votre SIEM, Timeline Explorer ou un autre outil de la suite Zimmerman.

Pourquoi les analystes s'intéressent à Amcache#

Amcache.hve est l'un des artefacts les plus riches sur un poste Windows pour la présence et l'exécution de programmes. Contrairement à Prefetch (qui prouve qu'un binaire s'est bien exécuté), Amcache enregistre souvent des binaires simplement présents sur le disque — y compris ceux supprimés avant votre arrivée. Pour chaque fichier suivi, vous obtenez généralement :

  • Le chemin complet au moment de l'inventaire.
  • Une empreinte SHA-1 des ~31 Mio premiers du fichier (le FileId).
  • La date de link PE et la taille du fichier.
  • L'éditeur, la version et le nom de produit issus de la section ressources PE.
  • Un horodatage de l'inscription en inventaire.

Cette combinaison — chemin + hash + date de link + heure d'inventaire — est de l'or pour la réponse à incident. Elle permet de pivoter en quelques secondes de « un binaire suspect a tourné sur un poste voisin » à « ce binaire exact a-t-il déjà existé sur cet hôte, même brièvement ? ».


Qui est Eric Zimmerman ?#

Eric Zimmerman est un ancien agent spécial du FBI, aujourd'hui Senior Director chez Kroll, où il dirige l'outillage de la pratique réponse à incident. Il publie des outils DFIR open source sur ericzimmerman.github.io depuis plus d'une décennie. AmcacheParser est dans la famille Get-ZimmermanTools aux côtés de :

  • MFTECmd — analyseur $MFT, $LogFile, $J, $Boot, $SDS
  • RECmd — ligne de commande et processeur batch pour les ruches
  • RBCmd — analyseur de Corbeille
  • PECmd — analyseur Prefetch
  • EvtxECmd — analyseur de journaux d'événements Windows
  • JLECmd — analyseur Jump List
  • LECmd — analyseur LNK
  • SBECmd — CLI de Shellbag Explorer

Si vous ne devez apprendre qu'une seule suite DFIR, celle de Zimmerman est celle que la plupart des employeurs attendront de vous.


Comment AmcacheParser fonctionne en interne#

Amcache.hve est un fichier de ruche du registre Windows standard — le même format binaire que SYSTEM, SOFTWARE, SAM ou NTUSER.DAT. AmcacheParser ouvre le fichier, parcourt les bins et cellules de la ruche, suit l'arborescence clés/valeurs et décode les valeurs typées. Les champs les plus utiles aux analystes sont encodés de trois façons légèrement pénibles :

  • FILETIMEs Windows — valeurs 64 bits comptant les ticks de 100 ns depuis le 1601-01-01 UTC. AmcacheParser les convertit en ISO-8601 UTC.
  • Dates de link PE — valeurs time_t 32 bits issues de IMAGE_FILE_HEADER.TimeDateStamp. Ce ne sont pas des dates système de fichiers ; elles sont fixées à la compilation/édition de liens et servent de pivot utile.
  • FileId SHA-1 — chaîne de 41 caractères "0000" + sha1_hex. Le 0000 initial est une étiquette de type historique ; les 40 caractères hexadécimaux suivants sont le SHA-1 des 31 premiers Mio du fichier tel qu'Amcache l'a vu.

La ruche elle-même est écrite par la tâche planifiée Microsoft Compatibility Appraiser (\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser). Sur Windows 10/11 récents, elle s'exécute environ une fois par jour, ce qui fait d'Amcache.hve l'un des meilleurs artefacts de « présence longitudinale » à votre disposition.

Les journaux de transactions comptent#

Comme toute ruche du registre, Amcache.hve possède des journaux compagnons .LOG1 / .LOG2. Si vous copiez la ruche sans ses journaux, vous risquez de manquer les écritures les plus récentes. AmcacheParser gère correctement les journaux si vous pointez sur un répertoire ou fournissez les journaux à côté de la ruche — collectez-les toujours ensemble.


Installer AmcacheParser#

Il existe trois moyens courants d'obtenir l'outil. Tous produisent le même binaire ; choisissez celui qui correspond à votre environnement.

Option 1 — Get-ZimmermanTools (recommandé)#

L'installeur officiel est un petit script PowerShell qui télécharge la suite entière dans un dossier cible et la maintient à jour.

# Créer un dossier d'outils et récupérer les builds .NET 6 les plus récents
mkdir C:\Tools\ZTools
cd    C:\Tools\ZTools
Invoke-WebRequest `
  -Uri 'https://raw.githubusercontent.com/EricZimmerman/Get-ZimmermanTools/master/Get-ZimmermanTools.ps1' `
  -OutFile Get-ZimmermanTools.ps1
.\Get-ZimmermanTools.ps1 -Dest C:\Tools\ZTools -NetVersion 6

Une fois terminé, AmcacheParser.exe se trouve sous C:\Tools\ZTools\net6\AmcacheParser\. Relancer le script plus tard met à jour tous les outils en place.

Option 2 — Téléchargement direct depuis ericzimmerman.github.io#

La page d'accueil ericzimmerman.github.io propose un zip pour chaque outil. C'est la bonne voie si l'égress PowerShell est bloqué sur le poste analyste.

Option 3 — Intégré à KAPE ou Velociraptor#

Si vous utilisez KAPE ou Velociraptor, AmcacheParser est déjà embarqué dans leurs catalogues de modules / artefacts. Vous ne l'installez généralement pas séparément — vous l'invoquez via une définition de target / module qui collecte aussi la ruche pour vous.

Pour un panorama complet des miroirs, des sommes de contrôle et des schémas d'installation en environnement isolé, voir le guide de téléchargement d'AmcacheParser.


Démarrage rapide : analyser une ruche#

L'invocation minimale tient en deux options :

AmcacheParser.exe `
  -f "C:\Triage\Windows\AppCompat\Programs\Amcache.hve" `
  --csv "C:\Triage\Output\Amcache"

Cela écrit un CSV par catégorie Inventory* dans le dossier de sortie. Pour un incident réel, vous voudrez presque toujours quelques options supplémentaires :

AmcacheParser.exe `
  -f "C:\Triage\Windows\AppCompat\Programs\Amcache.hve" `
  --csv "C:\Triage\Output\Amcache" `
  --csvf "HOSTNAME_amcache.csv" `
  -i `
  --mp
  • --csvf contrôle le nom de fichier de base pour que le triage multi-hôtes reste navigable.
  • -i inclut les entrées marquées IsOSComponent = true (désactivé par défaut car elles gonflent le bruit).
  • --mp (« multi-pass ») analyse les entrées orphelines / non associées qui seraient sinon ignorées.

La matrice complète des options se trouve dans le cheatsheet CLI AmcacheParser.

Charger la sortie dans Timeline Explorer#

Les CSVs sont conçus pour le Timeline Explorer d'Eric. Glissez n'importe quel *_UnassociatedFileEntries.csv ou *_AssociatedFileEntries.csv dans Timeline Explorer pour obtenir des colonnes triables, filtrables, et une vue instantanée « toute l'activité sur cette fenêtre ».


Lire la sortie CSV#

AmcacheParser écrit un schéma différent par catégorie. Les quatre que vous toucherez sur presque chaque cas :

Fichier Contenu
*_UnassociatedFileEntries.csv Fichiers qu'Amcache a vus sur disque et qui ne sont pas liés à une Inventory Application enregistrée. Le tableau pivot le plus riche pour les binaires inconnus.
*_AssociatedFileEntries.csv Fichiers liés à une InventoryApplication (produit installé).
*_DriverBinaries.csv Binaires de pilotes chargés — critique pour les enquêtes sur les rootkits noyau.
*_DeviceContainers.csv Historique des périphériques connectés (imprimantes, écrans, contrôleurs amovibles).

Les colonnes sur lesquelles vous pivoterez le plus souvent :

  • ApplicationName / Name — nom d'affichage résolu par Windows.
  • FullPath — chemin complet au moment de l'inventaire.
  • FileExtension — pratique pour filtrer .exe / .dll.
  • Hash (SHA-1) — le FileId sans le préfixe "0000".
  • LinkDate — heure de compilation PE.
  • FileVersionString, ProductName, Publisher, PublisherName.
  • Size — taille du fichier en octets au moment de l'inventaire.
  • IsPeFile, IsOsComponent — filtres rapides.
  • KeyLastWriteTimestamp — last-write au niveau registre de la clé contenante. Traitez ceci comme le pivot « heure d'inventaire ».

Chaque colonne, y compris des catégories Inventory moins courantes, est documentée dans Les colonnes de sortie d'AmcacheParser expliquées.

Exemples concrets#

Quelques requêtes qui gagnent leur pain sur des cas réels :

Trouver les fichiers PE non signés dans des chemins inscriptibles par l'utilisateur (post-traitement en PowerShell) :

Import-Csv .\HOST_amcache_UnassociatedFileEntries.csv |
  Where-Object {
    $_.IsPeFile -eq 'True' -and
    -not $_.Publisher    -and
    $_.FullPath -match '\\Users\\|\\ProgramData\\|\\AppData\\'
  } |
  Select-Object KeyLastWriteTimestamp, FullPath, Hash, Size |
  Sort-Object KeyLastWriteTimestamp

Pivoter sur un SHA-1 connu comme malveillant sur plusieurs hôtes :

Get-ChildItem -Recurse -Filter *_UnassociatedFileEntries.csv |
  ForEach-Object {
    Import-Csv $_.FullName |
      Where-Object { $_.Hash -eq 'da39a3ee5e6b4b0d3255bfef95601890afd80709' } |
      Select-Object @{n='Host';e={$_.PSChildName.Split('_')[0]}}, FullPath, KeyLastWriteTimestamp
  }

Où s'inscrit AmcacheParser dans un workflow DFIR#

La plupart des enquêteurs ouvrent Amcache après Prefetch et les journaux d'événements, car il répond à une question différente :

Artefact Question à laquelle il répond
Prefetch « Ce binaire s'est-il exécuté sur cet hôte ? »
Journal d'événements (4688 / Sysmon 1) « Ce processus a-t-il tourné, avec quelle ligne de commande, depuis quel parent ? »
ShimCache (AppCompatCache) « Ce binaire a-t-il été récemment manipulé par le loader ? »
Amcache « Ce binaire a-t-il déjà été présent sur cet hôte, avec quel hash et à quel chemin ? »

L'atout maître d'Amcache est la récupération de binaires supprimés : un wiper peut effacer le fichier du disque, mais le snapshot d'inventaire persiste dans la ruche jusqu'au prochain passage de l'appraiser — et même alors, le run précédent reste souvent dans les journaux de transactions. Nous couvrons en profondeur la distinction Amcache / Prefetch / ShimCache dans Comprendre Amcache pour l'analyse forensique Windows.

Schémas de pipeline#

Les deux schémas de production les plus courants :

  1. KAPE collect + KAPE parse. Le target Amcache de KAPE collecte la ruche + les journaux ; son module AmcacheParser exécute l'analyseur dans un dossier de sortie par hôte. Une commande, prêt pour Timeline Explorer.

  2. Windows.Forensics.Amcache Velociraptor. L'artefact Velociraptor récupère la ruche, exécute AmcacheParser côté serveur et téléverse le CSV. Couplez-le à un hunt pour le déployer sur des milliers de postes.

Les deux schémas sont couverts avec des commandes copiables dans le cheatsheet CLI.


L'alternative dans le navigateur#

L'outil hébergé sur ce site est une réimplémentation du chemin de lecture en Rust + WebAssembly. Il existe parce qu'il y a des situations où la CLI Windows n'est pas le bon outil sur le moment :

  • Un analyste non Windows ouvre un .hve dans son navigateur sans installer le runtime .NET ni un build Zimmerman.
  • Un étudiant veut voir à quoi ressemble Amcache avant de payer un laboratoire DFIR complet.
  • Triage sur un poste verrouillé où déployer un nouveau binaire nécessite un ticket de change.
  • Montrer une ruche à une partie prenante en partage d'écran sans l'exposer à un serveur tiers.

Le fichier ne quitte jamais votre navigateur. L'analyse se fait côté client en WebAssembly ; pas d'upload, pas de traitement côté serveur, pas de télémétrie. Déposez une ruche sur la page d'accueil pour essayer.

Pour des investigations complètes sur un poste analyste Windows, le AmcacheParser.exe officiel d'Eric reste le bon outil — il gère chaque cas limite, s'intègre au reste de la suite et produit le format CSV qu'attend chaque outil aval. La version navigateur est pour le triage, la formation, et les cas où installer quoi que ce soit est la mauvaise réponse.


Questions fréquentes#

AmcacheParser est-il gratuit ?#

Oui. Il est publié sous une licence permissive par Eric Zimmerman et est libre pour tout usage, y compris les missions DFIR commerciales.

Sur quels systèmes d'exploitation tourne AmcacheParser ?#

AmcacheParser.exe est une application .NET 6 / .NET 9. Elle tourne nativement sur Windows et sur Linux / macOS via le runtime .NET (dotnet AmcacheParser.dll sur les hôtes non Windows avec le build framework-dependent).

AmcacheParser modifie-t-il la ruche ?#

Non. Il ouvre la ruche en lecture seule et n'écrit que la sortie CSV au chemin spécifié par --csv.

Quelle différence entre AmcacheParser et le plugin amcache de RegRipper ?#

Les deux analysent la même ruche. Le plugin RegRipper produit un rapport texte lisible ; AmcacheParser produit du CSV structuré avec une ligne par entrée d'inventaire, beaucoup plus simple à charger dans un tableur, un SIEM ou Timeline Explorer. Les playbooks modernes utilisent AmcacheParser ; RegRipper reste populaire pour l'analyse interactive ponctuelle.

Amcache enregistre-t-il tous les binaires exécutés ?#

Non. Amcache enregistre la présence et les métadonnées d'inventaire, pas l'exécution. Un binaire peut apparaître dans Amcache sans avoir jamais tourné, et inversement un binaire peut tourner sans apparaître dans Amcache si l'appraiser n'est pas repassé depuis. Couplez avec Prefetch et les événements de création de processus pour prouver l'exécution.

Où se trouve Amcache.hve sur un système actif ?#

C:\Windows\AppCompat\Programs\Amcache.hve, avec les journaux de transactions Amcache.hve.LOG1 et Amcache.hve.LOG2 à côté. Le target Amcache de KAPE collecte les trois.

Peut-on utiliser AmcacheParser sur une image mémoire ?#

Pas directement. AmcacheParser analyse le format de ruche sur disque. Pour analyser Amcache à partir de la mémoire, utilisez les plugins registre de Volatility pour extraire la ruche, puis fournissez-la à AmcacheParser.


Pour aller plus loin#

Prêt à regarder une ruche tout de suite ? Déposez-en une sur la page d'accueil de l'analyseur — elle ne quitte jamais votre navigateur.

Articles liés

Retour à tous les articles