
1999年の独自ビデオDRMシステムの暗号解析。静的バイナリ解析と既知平文攻撃を用いて、WCW Internet Powerdisk CD-ROMから61本の暗号化されたレスリングビデオを復元します。
1999年製プロプライエタリなビデオDRMシステムの暗号解析。静的バイナリ解析と既知平文攻撃により、51分の失われたメディアを復元。

復元された「CyberRing」試合のフレーム。WCWのレスラーはブルースクリーンで撮影され、火炎効果のあるCGIアリーナに合成された。これが1999年のインタラクティブ・エンターテインメントの姿だった。
WCW Internet Powerdisk は、1999年にWCW Magazineに同梱されたプロモーション用CD-ROMである。UITという企業が開発した PAVENCRYPT と呼ばれるプロプライエタリなシステムで暗号化された61本のビデオクリップ(試合ハイライト、レスラープロフィール、番組イントロ)が収録されていた。
再生にはバンドルされていたULI Playerが必要で、ランタイムにリモートサーバーからファイルごとの復号鍵を取得していた。UITのサーバーインフラが2000年ごろに停止すると、コンテンツは恒久的にアクセス不能となった。プレイヤーには次のメッセージしか表示されなかった:
"サーバーデータベースに復号鍵が見つかりません"
ディスクには鍵は存在しない。フォーマットのドキュメントは公開されていない。UITは完全に解散したと思われる。25年間、コンテンツは再生不可能だった。
我々のリバースエンジニアリングの結果は、SECに提出された1999年のオリジナルライセンス契約書と一致している。この契約書には「Server Side Key Generator Program」が「時間に基づくセキュリティ鍵」を作成すると記述されている。
復元された動画はInternet Archiveで公開されている:
61クリップ、合計51分20秒、H.264/AAC MP4に変換済み。オリジナルコンテンツはWCW (Turner Broadcasting) 制作。IPは現在WWEが保有。
# 1. ISOを展開
7z x WCW_R1.ISO -oiso_contents
# 2. すべてのPAVファイルをMPEG-1に復号
python decrypt_pav.py
# 3. MP4に変換(任意、ffmpegが必要)
python convert_mp4.py
必要環境: Python 3.6+(サードパーティパッケージ不要)。オプションのMP4変換にはffmpegが必要。
各 .PAV ファイルは 繰り返し鍵によるバイト減算暗号 で暗号化されている:
plaintext[i] = (ciphertext[i] - key[i % key_length]) mod 256
鍵はファイルごとにユニークで、8~24バイトの印字可能なASCII文字からなり、エンコード時にランダムに生成される。復号ルーチンは PavSource.ax(1999年4月にビルドされた24KBのDirectShowソースフィルター)に含まれている:
mov cl, [ebx+edx+0x3C] ; 鍵[key_index]をロード
sub byte ptr [eax], cl ; 平文 = 暗号文 - 鍵バイト
ブルートフォースなし、エミュレーションなし、サーバー不要。鍵は数学的に復元される:
MPEG-1ファイルの末尾は既知のバイトで終わる。 ファイル末尾には0xFFパディングの後にプログラム終了コード(00 00 01 B9)が含まれる。
定数に対する繰り返し鍵は繰り返しパターンを生成する。 暗号化された末尾は鍵長に等しい検出可能な周期性を持つ。
鍵の復元は代数的である。 既知の平文から key[i] = (ciphertext[i] - 0xFF) mod 256 を導出できる。
検証は構造的である。 復号された出力は有効なMPEG-1 Pack Start Code(00 00 01 BA)で始まらなければならない。
攻撃全体は外部入力を必要とせず、数秒で実行される。
┌─────────────────────────────────────────────────┐
│ "PAVENCRYPT" マジック (10 バイト) │
├─────────────────────────────────────────────────┤
│ 非暗号化 MPEG-1 プレビュー (16-32 KB) │
│ 2フレームの動画、音声なし(サムネイルとして機能)│
├─────────────────────────────────────────────────┤
│ 暗号化 MPEG-1 プログラムストリーム │
│ ファイル固有の減算鍵、8-24 バイト │
│ │
│ 動画: 320×240, 30fps, 約1.29 Mbps │
│ 音声: MP2, 44.1 kHz, モノラル, 64 kbps │
└─────────────────────────────────────────────────┘
1999年後半のWCWロスターを網羅した61クリップ:
| カテゴリ | 数 | ハイライト |
|---|---|---|
| 試合映像 | 9 | Hogan vs. Goldberg, Hogan vs. Macho Man, CyberRingマッチ |
| レスラー紹介 | 13 | Goldberg, Sting, Hogan, DDP, Flair, Nash, Steiner |
| 番組イントロ | 5 | Monday Nitro, Thunder, Surge |
| ストーリーライン | 8 | 「ハッカー」連続ナレーション |
| プロモ&グッズ | 9 | レスラーTシャツとグッズスポット |
| その他 | 17 | Nitro Girls, Nasty Boysマッチ, Rey Mysterio, Konnan |
decrypt_pav.py 復号ツール: 鍵復元 + MPEG-1への復号
convert_mp4.py 変換ツール: バッチMPEG-1→H.264/AAC MP4
analyze_pav.py 検査ツール: 非破壊PAV構造解析
PavSource.ax オリジナルDirectShowフィルタバイナリ(解析済み)
UlPlayer.exe オリジナルULI Playerアプリケーション
FINDINGS.md 技術報告書: フォーマット仕様、逆アセンブリ、全61鍵
TIMELINE.md リバースエンジニアリング手法のステップバイステップ
docs/PRIMARY_SOURCES.md 暗号システムを文書化した1999年のSEC提出書類
このツールは任意のPAVENCRYPTフォーマットファイルで動作する。ULI Playerは1990年代後半に複数のコンテンツ配信業者にライセンス供与されていた。この攻撃は、予測可能なバイトパターンを持つファイルフォーマットに適用された繰り返し鍵暗号に一般化可能であり、これは当時のほとんどのプロプライエタリDRM方式に該当する。