
Windows DPAPIアーティファクトをドロップするだけで、そのフォーマットと必要なマスターキーを正確に特定し、キーを入力すれば復号します。オフライン、CLI + Web UI。
Windows DPAPI 証跡のためのオフラインツールキット。ファイルを収集し、ツールを アーティファクトに向けると、フォーマットを認識して必要なマスターキーを正確に 示します。キーマテリアルを提供すれば復号します。
ほとんどの DPAPI ツールはフォーマットごとに 1 つのスクリプトであるか、より
大きな攻撃フレームワークに埋め込まれた機能です。これはその全範囲に対応する
単一のツールです — マスターキー、DPAPI ブロブ、Credential Manager、Vault、
CREDHIST、Wi-Fi、RDP/RDCMan、CAPI/CNG キーと証明書、PowerShell SecureString、
KeePass、SCCM、Chromium の os_crypt キー、そして (オプションのプラグインで)
DPAPI-NG — 収集したファイルのみから駆動され、コマンドラインインターフェース
と、同じコア上に構築されたローカルのドラッグアンドドロップ Web 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 SecureString。.vpol/.vcrd)、および
CREDHIST パスワード履歴。.rdp ファイルおよび RDCMan の
.rdg/.settings。ProtectedUserKey.bin、SCCM ポリシーシークレット、
Outlook IMAP、ソフトウェアベースの Windows Hello / NGC キー、および
Chromium の os_crypt キー。$DPAPImk$ マスターキー (Hashcat 15300/15310/15900/15910)、
CacheData (モード 33700)、およびローカル SAM NT
ハッシュ。 を参照。解除方法は、すでに何を持っているかによって異なります。これを CLI オプションに 対応付けます。同じ選択肢が Web UI の 2. Unlock key の下に表示されます。
40/44 バイトの DPAPI_SYSTEM 値は復号済みマスターキーではありません。これを 使って GUID 名の SYSTEM マスターキーを復号し、その結果得られる 64 バイトの マスターキーを使ってアーティファクトを復号します。
Web 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 は、提供された 1 つの既知パスワードで復号できます。また
は、外部リカバリ用のモード 33700 ベリファイアとしてエクスポートできます。
ツールキットは候補をテストしません。他の CloudAP/LSASS ソースは依然として
提供された prekey または資格情報キーを必要とします。これは独立した実装ですが、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 を参照。
$MSONLINEACCOUNT$| 持っているもの | サイズ / 形式 | オプション |
|---|
| 暗号化された 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、1 つの 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 |
| アンバインド資格情報キー | 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 | ローカル Web UI: 完全なワークフロー、コアアーティファクトフロー、連鎖リカバリ、およびそのセキュリティモデル。 |
| docs/plugins.md | 取り外し可能なオフラインプラグイン (Certificate/PFX、CacheData、Windows ハイブ、DPAPI-NG) および DPAPI-NG のウォークスルー。 |
| docs/hashes.md | オフラインパスワードリカバリ用のクラック可能ハッシュの取得 — $DPAPImk$、$MSONLINEACCOUNT$、および SAM NT ハッシュ、Hashcat コマンド付き。 |
| ファイル | 目的 |
|---|
dpapi_toolkit.py | コアの解析/復号と CLI。モジュールとしてもインポート可能。 |
dpapi_web.py | ローカルで依存関係のない Web 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 記述子復号。 |
plugins/windows_hives/ | オフライン DPAPI_SYSTEM 抽出とオプションのローカル SAM ハッシュエクスポート。 |