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 le ProgramId correspond à une entrée dans InventoryApplication. Le fichier est associé à un produit installé.
  • *_UnassociatedFileEntries.csv — entrées dont le ProgramId ne 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 FILETIME 64 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_t 32 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_DWORD 0 ou 1.
  • Les chaînes de chemin sont stockées en minuscules dans LowerCaseLongPath. La casse originale n'est pas préservée.

Voir aussi#

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

Retour à tous les articles