mirror of
https://github.com/qtmleap/revkit.git
synced 2026-09-16 08:11:51 +02:00
- 旧ドキュメント (docs/netflix/, docs/instructions/ 等) を削除 - docs/spec/: appboot ピンニング解析、iOS再生フロー、 MSL CBOR鍵交換解析、キャプチャ復号状況、暗号化フロー図を追加 - docs/netflix_client_spec.md, platform_flow_comparison.md を追加 - iOS認証・マニフェスト・ライセンス取得フロー詳細を追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
Netflix MSL クライアント仕様: Android
共通仕様: 00_common.md
1. フロー
%%{init: {'theme': 'dark'}}%%
sequenceDiagram
participant App as Android App (Cronet)
participant MSL as MSL Gateway<br/>(android14.prod)
participant CDM as Widevine CDM
rect rgba(80, 80, 80, 0.3)
Note over App,MSL: 認証・鍵交換
App->>MSL: /getProxyEsn (ESN=APPBOOT)
MSL-->>App: 実 ESN (NFANDROID1-PRV-P-L3-*)
App->>MSL: /aleProvision
Note right of App: RSA-OAEP-256 + A128GCM<br/>platform=androidNative
MSL-->>App: ALE 鍵 (HMAC + AES)
end
rect rgba(60, 100, 60, 0.3)
Note over App,CDM: マニフェスト → ライセンス → 復号
App->>MSL: /manifest (MSL暗号化)
MSL-->>App: マニフェスト (video_tracks, KID)
App->>CDM: generateRequest (PSSH initData)
CDM-->>App: license-request (protobuf)
App->>MSL: /pbo_licenses/router (license challenge)
MSL-->>App: license-response (content keys)
App->>CDM: update (license-response)
CDM-->>App: keystatuseschange (usable)
Note over App: DASH セグメント復号・再生
end
rect rgba(80, 80, 80, 0.3)
Note over App,MSL: テレメトリ
loop 再生中
App->>MSL: /events (position, trackId)
end
end
2. 認証
| 項目 | 値 |
|---|---|
| ESN プレフィックス | NFANDROID1-PRV- |
| 初期 ESN | APPBOOT (起動時) |
| ESN 取得方法 | /getProxyEsn で動的取得 |
| 認証スキーム | NETFLIXID (Cookie) |
| 鍵交換方式 | RSA-OAEP-256 + A128GCM |
| MSL トランスポート | Cronet (HTTP/2) |
| MSL 圧縮 | gzip |
ESN 二段階取得
- 起動時は
APPBOOTESN で MSL ハンドシェイク /getProxyEsnで実 ESN を取得:NFANDROID1-PRV-P-{L1|L3}-{hash}- 以降は実 ESN で通信
ALE プロビジョニング固有パラメータ
{
"netflixClientPlatform": "androidNative",
"appVer": 63928,
"appVersion": "9.57.0",
"api": 34,
"mnf": "Google",
"ffbc": "phone",
"mId": "GOOGLPIXEL=4A==5G=S",
"devmod": "Google_Pixel 4a (5G)",
"provisionRequest": {
"keyx": { "scheme": "RSA-OAEP-256" },
"scheme": "A128GCM",
"type": "SOCKETROUTER"
}
}
3. マニフェスト取得
MSL ゲートウェイ: android14.prod.ftl.netflix.com / android14.prod.cloud.netflix.com
提供されるコーデック (実測, Widevine L3)
| 解像度 | ビットレート | プロファイル |
|---|---|---|
| 480x270 | — | playready-h264hpl22-dash |
| 960x540 | — | playready-h264hpl30-dash |
Widevine L3 では最大 960x540 (SD) に制限される。 L1 デバイスであれば 1080p まで取得可能。
4. ライセンスチャレンジ
エンドポイント: MSL 経由 /pbo_licenses/router
ホスト: android14.prod.cloud.netflix.com
Widevine CDM 情報 (実測)
| 項目 | 値 |
|---|---|
| OEMCrypto セキュリティレベル | L3 |
| セキュリティパッチ | May 20 2022 |
| デバイス証明書ハッシュ | KAvwDZh6ZPI16jT59NO7L5XUj7ME5e6KKx0eXz0Zz9A= |
5. デバイス構成
/config エンドポイントで取得:
{
"path": ["deviceConfig", "hendrixConfig", "networkScoreConfig", "accountConfig", "streamingConfig2"]
}
レスポンスに retrystrategy, truststore, jtruststore, msltruststore, TLS cipher suites を含む。
6. データ API
| API | 方式 | ホスト |
|---|---|---|
| GraphQL | MSL 経由 | android14.prod.cloud.netflix.com/graphql |
| persisted query | version=102 |