
Uma ferramenta em C# para gerar hashes DPAPI quebráveis a partir das MasterKeys do usuário
Uma ferramenta C# que extrai hashes DPAPI quebráveis das MasterKeys de usuários e arquivos CREDHIST.
Tem como alvo tanto a MasterKey ($DPAPImk$) quanto a cadeia completa de CREDHIST ($credhist$), com suporte a caminhos locais e compartilhamentos SMB remotos.
$DPAPImk$)A MasterKey de cada usuário pode ser encontrada em \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\.
A quebra revela a senha de domínio do usuário e desbloqueia todos os segredos protegidos por DPAPI daquela época.
A versão do hash depende do SO:
O campo context codifica o tipo de conta:
$credhist$)Cada entrada no arquivo CREDHIST de cada usuário. Cada entrada é criptografada com uma senha anterior e é descriptografada para o SHA1 + NTLM da senha anterior a ela.
A quebra da cadeia reconstrói todas as senhas históricas e seus hashes NTLM.
As entradas são rotuladas no campo de nome de usuário para que a saída seja autodescritiva:
alice[current]:$credhist$*... ← encrypted with the current password; crack this first
alice[prev1]:$credhist$*... ← encrypted with the previous password
alice[prev2]:$credhist$*...
A versão do hash da entrada depende do SO:
-m 15920-m 15930DPAPISnoop.exe [rootDir] [options]
rootDir assume o padrão de %HOMEDRIVE% se omitido. Caminhos UNC são totalmente suportados.
# 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)
Após a quebra, passe a senha recuperada de volta para o DPAPISnoop para percorrer a cadeia completa e imprimir todos os SHA1 e NTLM históricos:
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
Consulte README
Este trabalho de pesquisa e desenvolvimento foi conduzido de forma colaborativa entre um humano e ferramentas assistidas por IA, usando os modelos de IA GPT-5.5 e Claude Sonnet 4.6.
Os modelos de IA foram usados para auxiliar na geração de código e no suporte a engenharia reversa.
No entanto, toda a direção de pesquisa, validação, depuração, testes, análise de segurança e decisões técnicas finais foram executadas por um humano (Imdefinelyhuman).
Todo o conteúdo, código e análise gerados foram revisados, validados, modificados e integrados manualmente como parte de um fluxo de trabalho iterativo guiado por humano.
A declaração acima é uma forma elegante de também dizer que o código tem bugs e use-o por sua conta e risco!
Lefteris (lefty) Panos @ LRQA Red Team 2026
| Opção | Descrição |
|---|
| (nenhum) | Extrair $DPAPImk$ e $credhist$ do nosso usuário |
--credhist-only / -c | Ignorar a saída da MasterKey; emitir apenas linhas $credhist$ |
--password <plaintext> / -p | Percorrer a cadeia CREDHIST a partir da senha atual em texto claro |
--sha1 <40-hex> | Percorrer a cadeia CREDHIST a partir de um SHA1 conhecido da senha atual |
--pre1607 | Emitir context 2 (domínio pré-1607) em vez de context 3 para hashes de MasterKey de domínio |