What is Amcache ProgramId? (glossary)
ProgramId is the 44-character application-identity hash Amcache
assigns to each logical application. Unlike FileId, which hashes
file content, ProgramId hashes application metadata — name,
publisher, version, and language.
A typical value:
0006fa0b2a9f8a4eb9d7c81e8b1f3c5d3e2a0000ffff
Two properties make ProgramId valuable in DFIR:
- Stable across hosts. The same Office 365 build on two
different workstations gets the same
ProgramId. - Joins file records to application records. A file in
Root\InventoryApplicationFileand the parent application inRoot\InventoryApplicationshare the value.
How it differs from FileId#
| FileId | ProgramId | |
|---|---|---|
| Length | 41 chars ("0000" + SHA-1) |
44 chars |
| Hashes | First 31 MiB of file bytes | Application metadata |
| Per-binary unique | Yes | No — siblings share |
| Per-host unique | No | No — cross-host stable |
| Pivot use | Exact-binary cross-host | Application-family cross-host |
When ProgramId wins#
- Re-compiled tools with same identity. Attacker rebuilds
their loader between hosts —
Hashdiffers,ProgramIdstays the same. - Renamed binaries.
mimikatz.exe→svchost64.exe→update.exe. If the attacker did not scrub the PE version-info resource,ProgramIdfollows the binary across the renames. - Cross-host scoping. A single suspicious
ProgramIdon one host becomes a query against every other collected host's Amcache. See Lateral movement and Amcache ProgramId pivoting.
When ProgramId is the wrong pivot#
- Living-off-the-land binaries.
net.exe,psexec.exe, andcertutil.exeshareProgramIdacross every host that has them. Pivot on command line instead. - Per-host implants. Truly per-victim malware produces unique
ProgramIdvalues per host. Use behavioural patterns (4624 logon, network indicators) for those.
For the full ProgramId reference, see
Amcache ProgramId explained.
Related terms#
- FileId — the content-hash identifier.
- InventoryApplicationFile — where ProgramId is stored.
- Amcache.hve — the hive.
Related posts
- What is LinkDate in Amcache? (glossary)
LinkDate is the PE header TimeDateStamp Amcache records — when the binary was compiled or linked, not when it appeared on the host.
- What is KeyLastWriteTimestamp in Amcache? (glossary)
KeyLastWriteTimestamp is the registry-level last-write time of an Amcache entry — the closest thing Amcache exposes to 'when the appraiser recorded this file'.
- What is Root\InventoryApplicationFile? (glossary)
InventoryApplicationFile is the headline Amcache registry key — one sub-key per PE binary inventoried by the appraiser, with path, SHA-1, publisher, link date, and timestamps.
- What is Amcache FileId? (glossary)
FileId is the 41-character identifier Amcache stores for each file — '0000' + the SHA-1 hex of the first 31 MiB of the file.