Amcache-Registry-Struktur: jeder Schlüssel erklärt
Amcache.hve ist eine Windows-Registry-Hive mit einem
Wurzelschlüssel (Root) und einem Baum von Unterschlüsseln
darunter. Jeder Unterschlüssel hält eine andere
Inventarkategorie: PE-Dateien, installierte Anwendungen,
Treiber, Geräte, Verknüpfungen. Diese Seite geht jeden
nennenswerten Schlüssel durch, was er aufzeichnet und welche Werte
Sie in der DFIR tatsächlich verwenden.
Für den High-Level-Kontext siehe die vollständige Amcache-Referenz. Für die von AmcacheParser erzeugte Referenz auf CSV-Spalten-Ebene siehe AmcacheParser-Ausgabespalten erklärt.
Top-Level-Layout#
Auf einer modernen Windows-11-Hive enthält Root ungefähr:
Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDeviceMediaClass
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File (Legacy, kann leer sein)
└── Programs (Legacy, oft dünn besiedelt)
Das moderne Schema ist Inventory*. Das Legacy-Schema sind die
flachen Schlüssel File und Programs, die seit Windows 8 präsent
sind. Windows 10 (Build 1709 und später) und Windows 11 schreiben
beide das moderne Schema; einige Legacy-Einträge können je nach
Build noch erscheinen.
Root\InventoryApplicationFile — der Hauptschlüssel#
Das ist der Schlüssel, in dem Sie die meiste Zeit verbringen.
Ein Unterschlüssel pro Datei, die der Appraiser inventarisiert
hat, benannt nach dem LongPathHash der Datei (ein interner
Amcache-Identifikator) mit einer kurzen Diskriminator-Endung. Jeder
Unterschlüssel hält Werte für diese Datei.
Nennenswerte Werte#
| Wertname | Typ | Bedeutung |
|---|---|---|
Name |
REG_SZ |
Nur der Dateiname (z. B. mimikatz.exe). |
LowerCaseLongPath |
REG_SZ |
Vollständiger Pfad, kleingeschrieben. |
LongPathHash |
REG_SZ |
Amcache-interner Pfad-Dedup-Hash. |
FileId |
REG_SZ |
"0000" + sha1_hex — der Inhalts-Hash der Datei. Siehe Amcache FileId erklärt. |
Size |
REG_QWORD |
Dateigröße in Bytes. |
IsPeFile |
REG_DWORD |
1, wenn die Datei ein PE ist. |
IsOsComponent |
REG_DWORD |
1, wenn die Datei Teil von Windows ist. |
Publisher |
REG_SZ |
Publisher-String aus der PE-Signatur / -Ressource. |
Version |
REG_SZ |
VS_FIXEDFILEINFO.dwFileVersion. |
BinFileVersion |
REG_SZ |
Binäre Dateiversion. |
BinProductVersion |
REG_SZ |
Binäre Produktversion. |
ProductName |
REG_SZ |
PE-Ressource ProductName. |
ProductVersion |
REG_SZ |
PE-Ressource ProductVersion. |
LinkDate |
REG_SZ |
PE-IMAGE_FILE_HEADER.TimeDateStamp (Kompilier-/Linkzeit). |
Language |
REG_DWORD |
PE-Ressource Sprach-ID. |
Usn |
REG_QWORD |
An dieses Inventar gebundener USN-Journal-Eintrag. |
ProgramId |
REG_SZ |
44-Zeichen-Anwendungsidentitäts-Hash — verbindet zu InventoryApplication. Siehe Amcache ProgramId erklärt. |
Der eigene LastWriteTimestamp des Schlüssels (kein Wert,
sondern die Metadaten auf Registry-Ebene) ist das, was
AmcacheParser als KeyLastWriteTimestamp ausgibt. Er ist der
einzelne nützlichste Zeitstempel für „Wann hat Amcache diesen
Eintrag erfasst?". Vollständige Behandlung:
Amcache-Zeitstempel erklärt.
Associated vs Unassociated#
Wenn AmcacheParser diesen Schlüssel liest, teilt er die Einträge in zwei CSVs auf:
*_AssociatedFileEntries.csv— Einträge, derenProgramIdzu einem Eintrag inInventoryApplicationpasst. Die Datei ist mit einem installierten Produkt assoziiert.*_UnassociatedFileEntries.csv— Einträge, derenProgramIdzu keinem installierten Anwendungsdatensatz passt. Das sind typischerweise Ad-hoc-Binärprogramme, heruntergeladene Tools, Skripte und — DFIR-relevant — Angreifer-Tooling.
Die Unassociated-Datei ist der Ort, an dem die meisten bösartigen Binärprogramme auf einem kompromittierten Host auftauchen.
Root\InventoryApplication — installierte Anwendungen#
Ein Unterschlüssel pro installierter Anwendung, mit der ProgramId
als Schlüssel. Nennenswerte Werte:
| Wertname | Bedeutung |
|---|---|
ProgramId |
Die 44-Zeichen-Identität, ebenfalls als Unterschlüsselname verwendet. |
Name |
Anzeigename der Anwendung. |
Version |
Anwendungsversion. |
Publisher |
Publisher-String. |
RootDirPath |
Installationsverzeichnis. |
Source |
Wie der Appraiser von der App erfahren hat: MSI, AddRemoveProgram, Win32WindowsUpdate, Inbox, ... |
Type |
Anwendungstyp (Application, Driver, ...). |
Language |
LCID. |
MsiPackageCode |
MSI-GUID, falls aus einem MSI. |
MsiProductCode |
MSI-Produktcode, falls aus einem MSI. |
InstallDate |
Installationsdatum der Anwendung (FILETIME). |
Pivot-Muster: Nehmen Sie eine ProgramId von einer verdächtigen
Datei in InventoryApplicationFile, finden Sie hier die
entsprechende Anwendung, und Sie haben den vollständigen
Installations-Produktkontext (Publisher, Version, Installationsdatum)
für diese Datei.
Root\InventoryDriverBinary — Treiber-Binärdateien im Kernel-Modus#
Ein Unterschlüssel pro Treiber-Binärdatei, die das System geladen hat. Nennenswerte Werte:
| Wertname | Bedeutung |
|---|---|
DriverName |
Dateiname des Treibers. |
Inf |
Die .inf, die ihn installiert hat. |
DriverVersion |
Treiber-Versionsstring. |
Product |
PE-Ressource ProductName. |
ProductVersion |
PE-Ressource ProductVersion. |
WdfVersion |
Windows-Driver-Framework-Version. |
DriverCompany |
Firmenstring aus dem PE. |
DriverPackageStrongName |
Strong Name. |
Service |
Zugehöriger Dienstname. |
DriverSigned |
Ob der Treiber eine gültige Signatur beanspruchte. |
DriverIsKernelMode |
1 für Treiber im Kernel-Modus. |
DriverTimeStamp |
PE-Linkdatum des Treibers. |
ImageSize |
Image-Größe in Bytes. |
Hash |
SHA-1 des Treibers. |
Für BYOVD-Untersuchungen (bring-your-own-vulnerable-driver)
sortieren Sie aufsteigend nach DriverTimeStamp und suchen Sie
nach alten, aber signierten Treibern, die kürzlich auf dem Host
aufgetaucht sind. Ein 2014 kompilierter Treiber, der heute zum
ersten Mal in Ihrer Amcache erscheint, ist konstruktionsbedingt
verdächtig.
Root\InventoryDeviceContainer — verbundene Geräte#
Ein Unterschlüssel pro „Device Container", den Windows verfolgt (Drucker, Displays, Wechselmedien-Controller, Bluetooth-Geräte, Netzwerkspeicher, ...). Nennenswerte Werte:
| Wertname | Bedeutung |
|---|---|
FriendlyName |
„Brother HL-L2350DW", „Logitech BRIO", ... |
Manufacturer |
Vendor-String. |
ModelName / ModelNumber |
Modell-Identifikatoren. |
Categories |
Gerätekategorien. |
DiscoveryMethod |
Wie Windows das Gerät enumeriert hat. |
IsConnected |
1, wenn beim letzten Inventar verbunden. |
IsPaired |
1, wenn gekoppelt (Bluetooth usw.). |
Icon |
Pfad zur Icon-Ressource des Geräts. |
Das ist oft die sauberste Antwort auf „Hat dieses Peripheriegerät jemals mit diesem Host verbunden?". Speziell für die USB-Massenspeicher-Historie siehe USB- und Gerätehistorie aus Amcache.
Root\InventoryDevicePnp — PnP-Enumerationseinträge#
Ein Unterschlüssel pro Geräteschnittstelle. Nennenswerte Werte:
| Wertname | Bedeutung |
|---|---|
BusReportedDescription |
Was das Gerät Windows mitgeteilt hat, dass es ist. |
DeviceClass |
Treiberklassen-GUID. |
DeviceId / InstanceId |
PnP-Instanz-Identifikator. |
Manufacturer |
Vendor-String. |
Model |
Modell-String. |
Service |
Treiberdienst. |
DriverName |
Treiberdatei hinter dem Gerät. |
DevicePnp ist die technische Sicht; DeviceContainer ist die
benutzerseitige Sicht. Verknüpfen Sie die beiden über InstanceId
für das vollständige Bild.
Root\InventoryApplicationShortcut — Startmenü- / angeheftete Verknüpfungen#
Ein Unterschlüssel pro Verknüpfung, die Windows verfolgt. Jeder
Eintrag enthält den Zielpfad der Verknüpfung und eine ProgramId,
die zur übergeordneten Anwendung verlinkt. Weniger im Einsatz in
der Incident Response, aber nützlich für die Frage „Was hatte der
Benutzer am $DATUM angeheftet?".
Root\InventoryApplicationDriver und InventoryApplicationFramework#
Das sind kleinere Kataloge, die an die moderne
InventoryApplication-Sicht gebunden sind. Driver listet
User-Mode-Treiber, die mit installierten Anwendungen verknüpft sind;
Framework listet Framework-Abhängigkeiten. Beide tauchen selten in
der DFIR auf; sie sind nützlicher für
Anwendungs-Inventar-Audits als für die Incident Response.
Root\InventoryMiscellaneousUUPInfo#
Zeichnet Informationen über Unified-Update-Platform-Pakete auf. Selten relevant für Sicherheitsuntersuchungen, es sei denn, Sie verfolgen, wie ein bestimmtes Windows-Update ausgeliefert wurde.
Root\Programs (Legacy)#
Der ältere Katalog installierter Anwendungen, der
InventoryApplication vorausging. Spärlichere Metadaten, aber auf
einigen älteren Builds ist dies die einzige befüllte
Anwendungsliste. AmcacheParser gibt sie als *_ProgramEntries.csv
aus. Nennenswerte Werte:
| Wertname | Bedeutung |
|---|---|
Name |
Programm-Anzeigename. |
Version |
Programmversion. |
Publisher |
Publisher-String. |
InstallDate |
Installationsdatum (FILETIME). |
LanguageCode |
LCID. |
InstallSource |
Quellpfad (CD, Netzwerkfreigabe, Downloads-Ordner, URL). |
UninstallString |
Kommandozeile zur Deinstallation. |
RootDirPath |
Installationsverzeichnis. |
Source |
MSI, AddRemoveProgram usw. |
Type |
Application, Driver usw. |
ProgramInstanceId |
Identifikator pro Installation. |
InstallSource ist der Wert, den Sie im Auge behalten sollten.
Er zeichnet manchmal die Download-URL oder die Netzwerkfreigabe
auf, von der ein Installer kam, was bei der Untersuchung von
Supply-Chain- oder Social-Engineering-Eindringversuchen
unbezahlbar ist.
Root\File (Legacy)#
Der ältere Katalog pro Datei. Auf modernen Hives ist dieser
Schlüssel oft leer oder enthält eine kleine Untermenge dessen, was
InventoryApplicationFile aufzeichnet. Lohnt einen Blick, aber
selten die primäre Quelle auf einem Windows-10+-Host.
Wie Werte kodiert sind#
Ein paar Kodierungseigenheiten, die man kennen sollte:
- Zeitstempel sind meist als Windows-
FILETIME-64-Bit-Werte gespeichert (100-ns-Ticks seit 1601-01-01 UTC). AmcacheParser konvertiert sie in ISO-8601 UTC. - PE-Linkdaten sind als 32-Bit-
time_t-Werte gespeichert (Sekunden seit 1970-01-01 UTC). AmcacheParser konvertiert sie ebenfalls. - Hashes sind als 41-Zeichen-Strings mit einem
"0000"- Typ-Präfix gespeichert. - Booleans sind
REG_DWORD0oder1. - Pfad-Strings werden in
LowerCaseLongPathkleingeschrieben gespeichert. Die ursprüngliche Groß-/Kleinschreibung wird nicht erhalten.
Siehe auch#
- Vollständige Amcache-Referenz — die High-Level-Übersicht.
- Amcache FileId erklärt — der
"0000" + sha1-Identifikator im Detail. - Amcache ProgramId erklärt — die 44-Zeichen-Anwendungsidentität.
- Amcache-Zeitstempel erklärt
—
KeyLastWriteTimestampvsLinkDateund Freunde. - AmcacheParser-Ausgabespalten erklärt — jedes CSV-Feld, zurück auf diese Registry-Werte abgebildet.
Um die Struktur auf einer Hive zu erkunden, die Sie kontrollieren, legen Sie eine Datei auf der Startseite des Parsers ab — jeder Schlüssel und Wert ist in der UI durchsuchbar.
Verwandte Beiträge
- Amcache: die vollständige Forensik-Referenz der Windows-.hve-Hive
Amcache ist die Windows-Registry-Hive, in der der Appraiser jede PE-Datei inventarisiert — mit SHA-1, Pfad, Herausgeber und Zeitstempel. Vollständige Referenz.
- Wo ist der Amcache-Registry-Schlüssel?
Amcache ist eine eigene Hive-Datei unter C:\Windows\AppCompat\Programs\Amcache.hve — kein Schlüssel unter HKLM. Beim Laden durch Tools oder durch Windows selbst wird sie als HKLM\Amcache eingehängt.
- Volatility und Amcache: die Hive aus Speicherabbildern extrahieren
Ein praktischer Leitfaden zur Wiederherstellung von Amcache aus einem Windows-Speicherabbild mit Volatility — wann speicherseitige Wiederherstellung die einzige Option ist, welche Plugins zu verwenden sind und wie an AmcacheParser übergeben wird.
- RegRipper amcache-Plugin: was es tut und wann man es verwendet
Ein praktischer Leitfaden zum amcache-Plugin von RegRipper — was es parst, wie sich seine Text-Ausgabe von AmcacheParsers CSV unterscheidet und wann man darauf zurückgreift statt (oder zusätzlich zum) Zimmerman-Tool.