Structure du registre Amcache : chaque clé expliquée
Amcache.hve est une ruche du registre Windows avec une clé racine
(Root) et un arbre de sous-clés en dessous. Chaque sous-clé contient
une catégorie d'inventaire différente : fichiers PE, applications
installées, pilotes, périphériques, raccourcis. Cette page parcourt
chaque clé notable, ce qu'elle enregistre et quelles valeurs vous
utilisez réellement en DFIR.
Pour le contexte général, voir la référence complète Amcache. Pour la référence au niveau des colonnes CSV produites par AmcacheParser, voir Les colonnes de sortie d'AmcacheParser expliquées.
Disposition de premier niveau#
Sur une ruche Windows 11 moderne, Root contient approximativement :
Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDeviceMediaClass
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File (legacy, peut être vide)
└── Programs (legacy, souvent éparse)
Le schéma moderne est Inventory*. Le schéma legacy est constitué
des clés à plat File et Programs, présentes depuis Windows 8.
Windows 10 (build 1709 et ultérieurs) et Windows 11 écrivent tous deux
le schéma moderne ; certaines entrées legacy peuvent encore apparaître
selon le build.
Root\InventoryApplicationFile — la clé phare#
C'est la clé dans laquelle vous passerez le plus de temps. Une
sous-clé par fichier que l'appraiser a inventorié, nommée d'après le
LongPathHash du fichier (un identifiant interne Amcache) suffixé
d'un court discriminateur. Chaque sous-clé contient des valeurs pour
ce fichier.
Valeurs notables#
| Nom de valeur | Type | Signification |
|---|---|---|
Name |
REG_SZ |
Nom de fichier seul (ex. mimikatz.exe). |
LowerCaseLongPath |
REG_SZ |
Chemin complet, en minuscules. |
LongPathHash |
REG_SZ |
Hash interne de déduplication de chemin d'Amcache. |
FileId |
REG_SZ |
"0000" + sha1_hex — le hash de contenu du fichier. Voir FileId Amcache expliqué. |
Size |
REG_QWORD |
Taille du fichier en octets. |
IsPeFile |
REG_DWORD |
1 si le fichier est un PE. |
IsOsComponent |
REG_DWORD |
1 si le fichier fait partie de Windows. |
Publisher |
REG_SZ |
Chaîne éditeur depuis la signature / ressource PE. |
Version |
REG_SZ |
VS_FIXEDFILEINFO.dwFileVersion. |
BinFileVersion |
REG_SZ |
Version binaire du fichier. |
BinProductVersion |
REG_SZ |
Version binaire du produit. |
ProductName |
REG_SZ |
Ressource PE ProductName. |
ProductVersion |
REG_SZ |
Ressource PE ProductVersion. |
LinkDate |
REG_SZ |
PE IMAGE_FILE_HEADER.TimeDateStamp (heure de compilation/link). |
Language |
REG_DWORD |
ID langue de ressource PE. |
Usn |
REG_QWORD |
Entrée du journal USN liée à cet inventaire. |
ProgramId |
REG_SZ |
Hash d'identité applicative de 44 caractères — fait la jointure avec InventoryApplication. Voir ProgramId Amcache expliqué. |
Le LastWriteTimestamp propre à la clé (pas une valeur, mais la
métadonnée au niveau du registre) est ce qu'AmcacheParser expose sous
KeyLastWriteTimestamp. C'est l'horodatage le plus utile à lui seul
pour « quand Amcache a-t-il enregistré cette entrée ? ». Couverture
complète :
Horodatages Amcache expliqués.
Associés vs non associés#
Lorsque AmcacheParser lit cette clé, il sépare les entrées en deux CSVs :
*_AssociatedFileEntries.csv— entrées dont leProgramIdcorrespond à une entrée dansInventoryApplication. Le fichier est associé à un produit installé.*_UnassociatedFileEntries.csv— entrées dont leProgramIdne correspond à aucun enregistrement d'application installée. Ce sont généralement des binaires ad-hoc, outils téléchargés, scripts, et — pertinent pour le DFIR — du tooling attaquant.
Le fichier Unassociated est l'endroit où la plupart des binaires malveillants ressortent sur un hôte compromis.
Root\InventoryApplication — applications installées#
Une sous-clé par application installée, indexée par ProgramId.
Valeurs notables :
| Nom de valeur | Signification |
|---|---|
ProgramId |
L'identité de 44 caractères, également utilisée comme nom de sous-clé. |
Name |
Nom d'affichage de l'application. |
Version |
Version de l'application. |
Publisher |
Chaîne éditeur. |
RootDirPath |
Répertoire d'installation. |
Source |
Comment l'appraiser a appris l'existence de l'application : MSI, AddRemoveProgram, Win32WindowsUpdate, Inbox, … |
Type |
Type d'application (Application, Driver, …). |
Language |
LCID. |
MsiPackageCode |
GUID MSI, si issu d'un MSI. |
MsiProductCode |
Code produit MSI, si issu d'un MSI. |
InstallDate |
Date d'installation de l'application (FILETIME). |
Pattern de pivot : prenez un ProgramId depuis un fichier suspect
dans InventoryApplicationFile, trouvez l'application correspondante
ici, et vous avez le contexte produit-installé complet (éditeur,
version, date d'installation) pour ce fichier.
Root\InventoryDriverBinary — binaires de pilotes kernel-mode#
Une sous-clé par binaire de pilote que le système a chargé. Valeurs notables :
| Nom de valeur | Signification |
|---|---|
DriverName |
Nom du fichier pilote. |
Inf |
Le .inf qui l'a installé. |
DriverVersion |
Chaîne de version du pilote. |
Product |
Ressource PE ProductName. |
ProductVersion |
Ressource PE ProductVersion. |
WdfVersion |
Version Windows Driver Framework. |
DriverCompany |
Chaîne société depuis le PE. |
DriverPackageStrongName |
Strong name. |
Service |
Nom de service associé. |
DriverSigned |
Si le pilote a déclaré une signature valide. |
DriverIsKernelMode |
1 pour les pilotes kernel-mode. |
DriverTimeStamp |
Date de link PE du pilote. |
ImageSize |
Taille de l'image en octets. |
Hash |
SHA-1 du pilote. |
Pour les enquêtes BYOVD (bring-your-own-vulnerable-driver), triez
par DriverTimeStamp ascendant et cherchez des pilotes anciens-mais-
signés qui sont apparus récemment sur l'hôte. Un pilote compilé en
2014 qui apparaît pour la première fois dans votre Amcache aujourd'hui
est suspect par construction.
Root\InventoryDeviceContainer — périphériques connectés#
Une sous-clé par « device container » que Windows suit (imprimantes, écrans, contrôleurs de média amovibles, périphériques Bluetooth, stockage réseau, …). Valeurs notables :
| Nom de valeur | Signification |
|---|---|
FriendlyName |
« Brother HL-L2350DW », « Logitech BRIO », … |
Manufacturer |
Chaîne fournisseur. |
ModelName / ModelNumber |
Identifiants de modèle. |
Categories |
Catégories du périphérique. |
DiscoveryMethod |
Comment Windows a énuméré le périphérique. |
IsConnected |
1 si connecté au dernier inventaire. |
IsPaired |
1 si appairé (Bluetooth, etc.). |
Icon |
Chemin vers la ressource d'icône du périphérique. |
C'est souvent la réponse la plus propre à « ce périphérique s'est-il déjà connecté à cet hôte ? ». Pour l'historique des périphériques de stockage USB en particulier, voir Historique USB et périphériques Amcache.
Root\InventoryDevicePnp — enregistrements d'énumération PnP#
Une sous-clé par interface de périphérique. Valeurs notables :
| Nom de valeur | Signification |
|---|---|
BusReportedDescription |
Ce que le périphérique a déclaré être à Windows. |
DeviceClass |
GUID de classe de pilote. |
DeviceId / InstanceId |
Identifiant d'instance PnP. |
Manufacturer |
Chaîne fournisseur. |
Model |
Chaîne modèle. |
Service |
Service du pilote. |
DriverName |
Fichier pilote derrière le périphérique. |
DevicePnp est la vue technique ; DeviceContainer est la vue
utilisateur. Faites la jointure entre les deux sur InstanceId pour
avoir le tableau complet.
Root\InventoryApplicationShortcut — raccourcis menu Démarrer / épinglés#
Une sous-clé par raccourci que Windows suit. Chaque entrée inclut le
chemin cible du raccourci et un ProgramId reliant à l'application
parente. Moins utilisé en réponse à incident, mais utile pour les
questions « qu'est-ce que l'utilisateur avait épinglé le $DATE ».
Root\InventoryApplicationDriver et InventoryApplicationFramework#
Ce sont des catalogues plus petits liés à la vue moderne
InventoryApplication. Driver liste les pilotes en mode utilisateur
associés aux applications installées ; Framework liste les
dépendances framework. Les deux ressortent peu en DFIR ; ils sont
plus utiles pour les audits d'inventaire applicatif que pour la
réponse à incident.
Root\InventoryMiscellaneousUUPInfo#
Enregistre des informations sur les packages Unified Update Platform. Rarement pertinent pour les enquêtes de sécurité, sauf si vous tracez comment une mise à jour Windows spécifique a été délivrée.
Root\Programs (legacy)#
L'ancien catalogue des applications installées, antérieur à
InventoryApplication. Métadonnées plus pauvres, mais sur certains
anciens builds c'est la seule liste d'applications peuplée.
AmcacheParser l'expose sous *_ProgramEntries.csv. Valeurs notables :
| Nom de valeur | Signification |
|---|---|
Name |
Nom d'affichage du programme. |
Version |
Version du programme. |
Publisher |
Chaîne éditeur. |
InstallDate |
Date d'installation (FILETIME). |
LanguageCode |
LCID. |
InstallSource |
Chemin source (CD, partage réseau, dossier de téléchargements, URL). |
UninstallString |
Ligne de commande de désinstallation. |
RootDirPath |
Répertoire d'installation. |
Source |
MSI, AddRemoveProgram, etc. |
Type |
Application, Driver, etc. |
ProgramInstanceId |
Identifiant par installation. |
InstallSource est la valeur à surveiller. Elle enregistre parfois
l'URL de téléchargement ou le partage réseau d'où provient un
installateur, ce qui est précieux pour enquêter sur des intrusions
supply-chain ou de social engineering.
Root\File (legacy)#
L'ancien catalogue par fichier. Sur les ruches modernes, cette clé est
souvent vide ou contient un petit sous-ensemble de ce qu'enregistre
InventoryApplicationFile. Vaut la peine d'être vérifiée, mais
rarement la source principale sur un hôte Windows 10+.
Comment les valeurs sont encodées#
Quelques particularités d'encodage qui valent la peine d'être connues :
- Les horodatages sont la plupart du temps stockés comme valeurs
Windows
FILETIME64 bits (ticks de 100 ns depuis le 1601-01-01 UTC). AmcacheParser les convertit en ISO-8601 UTC. - Les dates de link PE sont stockées comme valeurs
time_t32 bits (secondes depuis le 1970-01-01 UTC). AmcacheParser les convertit aussi. - Les hashes sont stockés comme chaînes de 41 caractères avec un
préfixe de type
"0000". - Les booléens sont des
REG_DWORD0ou1. - Les chaînes de chemin sont stockées en minuscules dans
LowerCaseLongPath. La casse originale n'est pas préservée.
Voir aussi#
- Référence complète Amcache — la vue d'ensemble haut niveau.
- FileId Amcache expliqué —
l'identifiant
"0000" + sha1en détail. - ProgramId Amcache expliqué — l'identité applicative de 44 caractères.
- Horodatages Amcache expliqués
—
KeyLastWriteTimestampvsLinkDateet autres. - Les colonnes de sortie d'AmcacheParser expliquées — chaque champ CSV, mappé vers ces valeurs du registre.
Pour explorer la structure sur une ruche que vous contrôlez, déposez un fichier sur la page d'accueil de l'analyseur — chaque clé et valeur est navigable dans l'UI.
Articles liés
- Amcache : la référence forensique complète de la ruche Windows .hve
Amcache est la ruche du registre Windows où l'appraiser inventorie chaque binaire PE, avec SHA-1, chemin, éditeur et horodatage. Référence complète.
- Où se trouve la clé de registre Amcache ?
Amcache est sa propre ruche située à C:\Windows\AppCompat\Programs\Amcache.hve — pas une clé sous HKLM. Quand elle est chargée par des outils ou par Windows lui-même, elle est montée comme HKLM\Amcache.
- Volatility et Amcache : extraire la ruche depuis des images mémoire
Un guide pratique pour récupérer Amcache depuis une image mémoire Windows en utilisant Volatility — quand la récupération côté mémoire est la seule option, quels plugins utiliser, et comment passer le relais à AmcacheParser.
- Plugin amcache de RegRipper : ce qu'il fait et quand l'utiliser
Un guide pratique sur le plugin amcache de RegRipper — ce qu'il analyse, comment sa sortie texte diffère du CSV d'AmcacheParser, et quand l'utiliser à la place (ou en complément) de l'outil Zimmerman.