mirror of
https://github.com/qtmleap/revkit.git
synced 2026-10-19 08:11:52 +02:00
- NetflixSSLBypass Tweakを大幅簡略化し、ロード時のos_log出力・UIViewControllerフックログを追加 - C/Swift分離で初期化・Orion安定化、ロード検知精度を向上 - ログ監視エージェント(log-monitor)を新設し、Frida/mitmproxy/Tweakの3系統ログを横断監視・復号状況レポート可能に - iOS用CBOR MSLメッセージの復号・エンコードパイプラインと検証CLIを新規実装 - Theosビルド/デバイス接続/ファイル分割等の運用ルールを明文化し、計画・レポート雛形もアップデート Netflix iOS解析の自動化・再現性向上、及び復号パイプラインのクロスプラットフォーム化を目的とする
5.0 KiB
5.0 KiB
作業計画書: iOS MSL/appboot セッション鍵キャプチャと Python 完全再現
日時: 2026-04-07T00:00:00+09:00
目標
iOS Netflix の MSL 及び appboot で復号できていないメッセージの暗号化鍵を取得し、最終的に Python コードだけで完全再現できるようにする。
現状の課題
- DH 共有シークレット (
NFWebCrypto::dhDerive()) が未キャプチャ - HKDF 出力 (セッション鍵導出) が未キャプチャ
- CCCrypt で取れている鍵に KAT/TFIT ノイズが混在
- Python MSL クライアントが Scheme 3 (DH/ECDH) に未対応
- Tweak の MslClient offset フックが ElleKit で失敗
タスク一覧
frida-engineer 担当
-
F1: NFWebCrypto シンボル列挙と dhDerive/HKDF 関数の特定
- NFWebCrypto.framework のエクスポートシンボルをスキャンし、dhDerive / HKDF 関連関数のアドレスを特定
- CommonCrypto の
CCKeyDerivationHMACも候補として調査
-
F2: HKDF フック実装 (最優先)
- HKDF 関数の入力 (ikm=DH共有シークレット, salt, info, length) と出力 (導出鍵) をキャプチャ
- これが取れれば DH フック不要で直接セッション鍵が得られる
-
F3: NFWebCrypto::dhDerive() フック実装 (F2 の fallback)
- ECDH 共有シークレットの raw bytes をキャプチャ
- F2 が取れない場合のバックアップ
-
F4: IosSessionCryptoContext コンストラクタフック
- セッション確立時の AES 暗号鍵と HMAC 鍵のペアを this ポインタから読み出し
- F2/F3 と独立して並行実施可能
-
F5: CCCrypt フックの呼び出し元フィルタリング
Thread.backtrace()で NFWebCrypto/MslClient フレームを含む呼び出しのみ記録- KAT/TFIT ノイズを除外
tweak-engineer 担当
-
T1: MslClient シンボル解決を dlsym 方式に変更
- offset ベースのフックを廃止し、
dlopen+dlsymで_aesCbcEncrypt等のシンボルを解決 - ElleKit の offset フック失敗を回避
- offset ベースのフックを廃止し、
-
T2:
_dyld_register_func_for_add_imageによる遅延ロード対応- MslClient が bootstrapTweak() 時点で未ロードの場合のリトライ機構
- dyld ロード完了時にフック関数を差し込む
-
T3: EVP_CipherInit_ex ログの MSL 文脈フィルタリング
backtrace()でコールスタックを取得し、MslClient 起因の呼び出しのみログ出力
python-engineer 担当
-
P1: Frida 鍵素材の取り込みインターフェース
import_session_keys(enc_key: bytes, sign_key: bytes)の実装- Scheme 3 の鍵を外部注入してセッションを構成
-
P2: CBOR MSL レスポンスの復号パイプライン
msl_decoder.pyとclient.pyのセッション鍵を連携- CBOR バイナリ → パース → AES-CBC 復号 → 平文 JSON 抽出
-
P3: キャプチャバイナリのオフライン検証 CLI
- Frida/mitmproxy でキャプチャした
.bin+ 鍵素材 JSON を入力 - 復号結果を標準出力するスクリプト (
tools/配下)
- Frida/mitmproxy でキャプチャした
-
P4: CBOR MSL リクエストのエンコーダー実装
- JSON ベースのリクエスト構築を iOS 向け CBOR フォーマットに対応
- 数値キーマッピングは
msl_decoder.pyの逆引き
-
P5: FAIRPLAY_MGK_APPID エンティティ認証データの組み立て
- apphmac, appid, devicetoken, ESN 等の CBOR エンコード
- iOS appboot リクエストの完全生成
実行順序
Phase A: 鍵キャプチャ (並列)
- 並列: F1 (シンボル列挙) + T1 (dlsym 方式) + T2 (dyld 遅延ロード) + P1 (鍵取り込み口)
- 依存: F1 完了後 → F2 (HKDF フック) + F3 (dhDerive フック) + F4 (コンストラクタフック) を並列
- 並列: F5 (CCCrypt フィルタ) + T3 (EVP フィルタ)
Phase B: 復号パイプライン (Phase A の鍵取得後)
- 並列: P2 (CBOR 復号パイプライン) + P3 (オフライン検証 CLI)
Phase C: リクエスト完全再現
- 順次: P4 (CBOR エンコーダー) → P5 (entity auth)
成果物
packages/frida/hook_netflix_ios.js: dhDerive/HKDF/IosSessionCryptoContext フック追加packages/tweak/NetflixSSLBypass/Sources/NetflixSSLBypass/Tweak.x.swift: dlsym 方式 + dyld 遅延ロードsrc/netflix_msl/crypto.py: Scheme 3 鍵取り込みインターフェースsrc/netflix_msl/cbor_client.py: iOS CBOR MSL クライアント (新規)tools/decrypt_capture.py: オフライン復号検証 CLI (新規)
リスク・注意点
- NFWebCrypto 内の HKDF が CommonCrypto 経由でない場合、シンボル特定に時間がかかる可能性
- dhDerive のシンボルが strip されている可能性 → offset フォールバック必要
- Scheme 3 の鍵導出パラメータ (salt, info) が不明 → Frida キャプチャで判明するまで Python 側は仮実装
- Tweak の dlsym が MslClient の C++ mangled name で失敗する可能性 → nm で事前確認