
Windows DPAPI 아티팩트를 넣으면 형식과 필요한 정확한 마스터 키를 식별하고, 키를 제공하면 복호화합니다. 오프라인, CLI + 웹 UI.
Windows DPAPI 증거를 위한 오프라인 툴킷입니다. 파일을 수집한 뒤 툴에 아티팩트를 지정하면, 툴이 형식을 인식하여 필요한 마스터 키가 정확히 무엇인지 알려줍니다. 키 자료를 제공하면 복호화합니다.
대부분의 DPAPI 툴링은 형식별로 스크립트가 하나씩이거나, 더 큰 공격 프레임워크 안에 묻혀 있는 기능입니다. 이 툴은 전체 범위를 아우르는 단일 도구입니다 — 마스터 키, DPAPI 블롭, Credential Manager, Vault, CREDHIST, Wi-Fi, RDP/RDCMan, CAPI/CNG 키와 인증서, PowerShell SecureStrings, KeePass, SCCM, Chromium os_crypt 키, 그리고 (선택적 플러그인을 통한) DPAPI-NG — 수집된 파일만으로 구동되며, 명령줄 인터페이스와 동일한 코어 위에 로컬 드래그 앤 드롭 웹 UI를 제공합니다.
레드 팀 및 침투 테스트, DFIR, 보안 연구를 위해 만들어졌습니다. 라이브 호스트, 도메인 컨트롤러, 네트워크, BKRP, LSASS 접근을 사용하지 않으며, 비밀번호나 PIN을 무차별 대입하지 않습니다. 수집된 아티팩트와 키 자료를 명시적으로 제공해야 합니다.
소유하고 있거나 명시적으로 검사 권한을 부여받은 시스템과 증거에만 사용하십시오.

사용자의 Protect 폴더와 Credential Manager 파일을 오프라인으로 수집했고 계정 비밀번호를 알고 있다고 가정합니다. 먼저 자격 증명을 검사합니다 — 키가 필요하지 않습니다:
python3 dpapi_toolkit.py CREDENTIAL_FILE
내장된 DPAPI 블롭과 그것이 요구하는 마스터 키 GUID를 출력합니다. Protect 디렉터리를 지정하여 해당 마스터 키를 매칭하고 잠금 해제한 다음 복호화합니다:
python3 dpapi_toolkit.py CREDENTIAL_FILE --type credential \
--masterkey-dir Protect-S-1-5-21-... \
--sid S-1-5-21-... \
--password 'password'
결과는 대상, 사용자 이름, 복구된 자격 증명을 담은 JSON입니다. 동일한 검사 후 복호화 흐름이 지원되는 모든 형식에 적용됩니다.
Python 3.10 이상. 유일한 필수 의존성은 cryptography입니다:
python3 -m pip install cryptography
선택적 의존성은 특정 기능을 활성화합니다:
python3 -m pip install python-registry # read Outlook data from NTUSER.DAT
python3 -m pip install dpapi-ng # offline DPAPI-NG plugin
python3 -m pip install impacket # offline SYSTEM/SECURITY/SAM hive plugin
라이브 Windows 호스트, 도메인 컨트롤러, 네트워크 연결, LSASS 접근이 필요하지 않습니다. 레지스트리 시크릿과 마스터 키는 이미 수집되어 있어야 합니다.
ConvertFrom-SecureString / Export-Clixml SecureStrings..vpol/.vcrd), CREDHIST 비밀번호 기록..rdp 파일 및 RDCMan .rdg/.settings.ProtectedUserKey.bin, SCCM 정책 시크릿, Outlook IMAP, 소프트웨어 기반 Windows Hello / NGC 키, Chromium os_crypt 키.$DPAPImk$ 마스터 키 (Hashcat 15300/15310/15900/15910), $MSONLINEACCOUNT$ CacheData (모드 33700), 로컬 SAM NT 해시. 참조.잠금 해제 방법은 이미 보유한 것에 따라 달라집니다. 다음 표는 이를 CLI 옵션에 매핑합니다. 동일한 선택지가 웹 UI의 2. Unlock key 아래에 나타납니다.
40/44바이트 DPAPI_SYSTEM 값은 복호화된 마스터 키가 아닙니다. 이를 사용하여 GUID 이름의 SYSTEM 마스터 키를 복호화한 다음, 그 결과로 얻은 64바이트 마스터 키를 사용하여 아티팩트를 복호화하십시오.
웹 UI는 동일한 오프라인 코어 위의 얇은 프런트 엔드이므로, 결과가 명령줄과 정확히 일치합니다:
python3 dpapi_web.py # http://127.0.0.1:8765/
127.0.0.1에만 바인딩되며, LAN/공용 바인드 옵션이 없고, 복호화된 결과를 단일 일회성 다운로드를 위해 제한된 메모리에 보관하며, 영구적인 복호화 출력을 절대 기록하지 않습니다. 전체 워크플로, 형식별 흐름, 보안 태세는 docs/web-ui.md를 참조하십시오.
빠른 도움말도 내장되어 있습니다: python3 dpapi_toolkit.py -h는 간단한 도움말, -hh는 키/아티팩트/위치/제한에 대한 상세 도움말, 그리고 아티팩트에 --structure를 추가하면 복호화 없이 파싱된 필드를 출력합니다.
이 툴킷은 의도적으로 오프라인입니다: 아웃바운드 HTTP, RPC, 도메인 컨트롤러, BKRP, LSASS, 라이브 레지스트리 접근이 없으며, 비밀번호/PIN 무차별 대입도 없습니다. 그 외에도:
SYSTEM/SECURITY 하이브는 windows_hives 플러그인으로 처리하거나, 이미 추출된 DPAPI_SYSTEM 값을 직접 제공할 수 있습니다.CacheData는 제공된 알려진 비밀번호 하나로 복호화하거나, 외부 복구를 위한 모드-33700 검증자로 내보낼 수 있습니다. 툴킷은 후보를 테스트하지 않습니다. 다른 CloudAP/LSASS 소스는 여전히 제공된 prekey 또는 credential key가 필요합니다.이것은 독립적인 구현이지만, Windows DPAPI 내부에 관한 방대한 공개 연구와 툴링 위에 서 있습니다. 여기의 오프라인 알고리즘을 가능하게 한 출판된 작업을 해주신 프로젝트와 저자분들께 감사드립니다:
@gentilkiwi)의 mimikatz — DPAPI 마스터 키, 블롭, CREDHIST, Vault, 자격 증명 형식 및 그 키 유도에 대한 참조.@agsolino)의 impacket — dpapi.py/secretsdump 로직 및 레지스트리 하이브 클래스; 또한 SYSTEM/SECURITY/SAM 하이브 플러그인이 사용하는 선택적 의존성.@harmj0y)와 GhostPack의 SharpDPAPI — 많은 아티팩트 형식 및 Credential/Vault/CAPI/CNG 경로에 대한 교차 검증.$DPAPImk$ 해시 형식 및 모드 15300/15310/15900/15910.@jborean93)의 dpapi-ng — 오프라인 DPAPI-NG 플러그인 뒤의 선택적 라이브러리.MIT. LICENSE 참조.
| 보유한 것 | 크기 / 형태 | 옵션 |
|---|
| 암호화된 Windows 마스터 키 | Protect 아래 GUID 이름의 파일 | --masterkey FILE 및 잠금 해제 방법 |
| 복호화된 마스터 키 | 64 바이트 | --real-masterkey FILE_OR_HEX_OR_BASE64 |
| 복호화된 마스터 키의 SHA1 매핑 | 20 바이트 | --real-masterkey FILE_OR_HEX_OR_BASE64 |
| DPAPI_SYSTEM 시크릿 | 40바이트 MachineKey || UserKey, 20바이트 키 하나, 또는 버전 포함 44바이트 | --dpapi-system FILE_OR_HEX_OR_TEXT |
| 최종 SID 바인딩 사용자 prekey | 20 바이트 | --prekey FILE_OR_HEX |
| NT 해시 | 16 바이트 | --nt-hash FILE_OR_HEX --sid SID |
| 로컬 SHA1 비밀번호 해시 | 20바이트 SHA1(password as UTF-16LE) | --sha1-hash FILE_OR_HEX --sid SID |
| 언바운드 credential key | 16–128 바이트 | --credkey FILE_OR_HEX --sid SID |
| AD DPAPI 백업 자료 | PEM, DER, PVK, CAPI PRIVATEKEYBLOB, 또는 256바이트 ServerWrap 키 | --domain-backup-key VALUE 또는 --pvk VALUE |
| 가이드 | 내용 |
|---|
| docs/cli-reference.md | 검사, 마스터 키 잠금 해제, 출력 옵션, 엔트로피, Hashcat 내보내기, 배치 모드, 기본 수집 위치, 문제 해결. |
| docs/artifacts.md | 지원되는 모든 아티팩트에 대한 형식별 명령 예제. |
| docs/web-ui.md | 로컬 웹 UI: 전체 워크플로, 핵심 아티팩트 흐름, 연쇄 복구, 보안 모델. |
| docs/plugins.md | 분리 가능한 오프라인 플러그인 (Certificate/PFX, CacheData, Windows hives, DPAPI-NG) 및 DPAPI-NG 워크스루. |
| docs/hashes.md | 오프라인 비밀번호 복구를 위한 크래킹 가능한 해시 얻기 — $DPAPImk$, $MSONLINEACCOUNT$, SAM NT 해시, Hashcat 명령 포함. |
| 파일 | 용도 |
|---|
dpapi_toolkit.py | 핵심 파싱/복호화 및 CLI. 모듈로도 임포트 가능. |
dpapi_web.py | 로컬, 의존성 없는 웹 UI (표준 라이브러리 HTTP 서버). |
dpapi_plugins.py | 오프라인 플러그인을 위한 매니페스트 검색 및 지연 로딩. |
plugins/certificate_pfx/ | 인증서/개인 키 매칭 및 오프라인 PKCS#12/PFX 생성. |
plugins/cachedata/ | Entra ID/CloudAP CacheData 알려진 비밀번호 디코더 및 Hashcat 모드-33700 내보내기. |
plugins/dpapi_ng/ | 로컬에서 제공된 KDS 루트 키로부터의 DPAPI-NG SID-descriptor 복호화. |
plugins/windows_hives/ | 오프라인 DPAPI_SYSTEM 추출 및 선택적 로컬 SAM 해시 내보내기. |