Expand description
Windows Vault decoder (VAULT_VPOL policy + VAULT_VCRD records).
The Vault store (%APPDATA%\Microsoft\Vault\<GUID>\ and the %LOCALAPPDATA%
counterpart) holds web/app credentials. Decryption is two-stage, following
impacket 0.13.1 (impacket/dpapi.py + examples/dpapi.py, the VAULT action):
- Policy —
Policy.vpolis aVAULT_VPOLwhose innerBlobis a DPAPI blob. Decrypting it with the user master key yieldsVAULT_VPOL_KEYS: two BCRYPT-wrapped AES keys (VaultVpolKeys). These keys are not per-record DPAPI blobs — they are the symmetric keys that decrypt the records. - Records — each
<GUID>.vcrdis aVAULT_VCRD: a header, an attribute map, and per-attribute encrypted payloads. Each sizeable attribute carries an optional IV and AES-CBC ciphertext; AES-CBC-decrypting it with a VPOL key yields the cleartext, which for web credentials is aVAULT_INTERNET_EXPLORERschema (username / resource / password).
This module owns only the parsing + the AES-CBC record decrypt (RustCrypto
aes/cbc, no hand-rolled crypto); the VPOL blob decrypt reuses
crate::decrypt::decrypt_dpapi_blob. If the VPOL key cannot be derived
(wrong master key), the policy decrypt errors loudly rather than guessing.
Structs§
- Vault
Vpol Keys - The two AES keys recovered from a decrypted
VAULT_VPOL_KEYSblob. - Vcrd
Attribute - One
VAULT_VCRDattribute’s encrypted payload. - WebCredential
- A decoded web credential (
VAULT_INTERNET_EXPLORERschema).
Functions§
- decrypt_
vcrd_ attribute - AES-CBC-decrypt one VCRD attribute with a VPOL key.
- decrypt_
vpol_ keys - Decrypt the VPOL policy blob with the master key → the two AES keys.
- parse_
internet_ explorer - Parse a decrypted
VAULT_INTERNET_EXPLORERcleartext into aWebCredential. - parse_
vcrd_ attributes - Parse a
VAULT_VCRDrecord into its encrypted attributes. - parse_
vpol_ file - Strip the
VAULT_VPOLwrapper, returning the inner DPAPI blob bytes.