Kryptoanalyse eines proprietären Video-DRM-Systems von 1999. Stellt 61 verschlüsselte Wrestling-Videos von der WCW Internet Powerdisk CD-ROM durch statische Binäranalyse und Known-Plaintext-Angriff wieder her.
Kryptanalyse eines proprietären Video-DRM-Systems von 1999, das 51 Minuten verlorener Medien durch statische Binäranalyse und Known-Plaintext-Angriff wiederherstellt.

Ein Bild aus einem wiederhergestellten „CyberRing“-Kampf. WCW-Wrestler wurden vor einem Bluescreen gefilmt und in eine CGI-Arena mit Feuereffekten eingefügt. So sah interaktive Unterhaltung 1999 aus.
Die WCW Internet Powerdisk war eine Werbe-CD-ROM, die 1999 dem WCW Magazine beilag. Sie enthielt 61 Videoclips (Kampfhöhepunkte, Wrestlerprofile, Showintros), die mit einem proprietären System namens PAVENCRYPT verschlüsselt waren, entwickelt von der Firma UIT.
Die Wiedergabe erforderte den mitgelieferten ULI Player, der zur Laufzeit dateispezifische Entschlüsselungsschlüssel von einem entfernten Server abrief. Als UITs Serverinfrastruktur um das Jahr 2000 offline ging, wurde der Inhalt dauerhaft unzugänglich. Der Spieler zeigte nur Folgendes an:
„Decryption key not found in the server database“ („Entschlüsselungsschlüssel nicht in der Serverdatenbank gefunden“)
Auf der Disc existieren keine Schlüssel. Es wurde nie eine Dokumentation des Formats veröffentlicht. UIT scheint vollständig aufgelöst zu sein. 25 Jahre lang war der Inhalt unspielbar.
Unsere Reverse-Engineering-Ergebnisse werden durch die ursprüngliche Lizenzvereinbarung von 1999 bestätigt, die bei der SEC eingereicht wurde und das „Server Side Key Generator Program“ beschreibt, das „Sicherheitsschlüssel basierend auf der Zeit“ erzeugt.
Die wiederhergestellten Videos sind im Internet Archive verfügbar:
61 Clips mit insgesamt 51 Minuten und 20 Sekunden, konvertiert in H.264/AAC MP4. Originalinhalte produziert von WCW (Turner Broadcasting). Die Rechte liegen jetzt bei WWE.
# 1. Extract the ISO
7z x WCW_R1.ISO -oiso_contents
# 2. Decrypt all PAV files to MPEG-1
python decrypt_pav.py
# 3. Convert to MP4 (optional, requires ffmpeg)
python convert_mp4.py
Anforderungen: Python 3.6+ (keine Drittanbieter-Pakete). ffmpeg für optionale MP4-Konvertierung.
Jede .PAV-Datei ist mit einer sich wiederholenden Byte-Subtraktions-Chiffre verschlüsselt:
plaintext[i] = (ciphertext[i] - key[i % key_length]) mod 256
Die Schlüssel sind dateispezifisch, bestehen aus 8 bis 24 Bytes druckbarem ASCII und werden zur Kodierungszeit zufällig generiert. Die Entschlüsselungsroutine befindet sich in PavSource.ax, einem 24 KB großen DirectShow-Quellfilter, der im April 1999 erstellt wurde:
mov cl, [ebx+edx+0x3C] ; load key[key_index]
sub byte ptr [eax], cl ; plaintext = ciphertext - key_byte
Keine Brute-Force, keine Emulation, kein Server. Die Schlüssel werden mathematisch wiederhergestellt:
MPEG-1-Dateien enden mit bekannten Bytes. Der Datei-Endbereich enthält 0xFF-Padding, gefolgt vom Program End Code (00 00 01 B9).
Ein sich wiederholender Schlüssel über eine Konstante erzeugt ein sich wiederholendes Muster. Der verschlüsselte Endbereich weist eine erkennbare Periodizität auf, die der Schlüssellänge entspricht.
Die Schlüsselwiederherstellung ist algebraisch. Mit bekanntem Klartext können wir key[i] = (ciphertext[i] - 0xFF) mod 256 ableiten.
Die Verifikation ist strukturell. Die entschlüsselte Ausgabe muss mit einem gültigen MPEG-1-Pack-Startcode (00 00 01 BA) beginnen.
Der gesamte Angriff wird in Sekunden ohne externe Eingabe ausgeführt.
┌─────────────────────────────────────────────────┐
│ "PAVENCRYPT" magic (10 bytes) │
├─────────────────────────────────────────────────┤
│ Unencrypted MPEG-1 preview (16-32 KB) │
│ 2 video frames, no audio (serves as thumbnail) │
├─────────────────────────────────────────────────┤
│ Encrypted MPEG-1 Program Stream │
│ Per-file subtraction key, 8-24 bytes │
│ │
│ Video: 320×240, 30fps, ~1.29 Mbps │
│ Audio: MP2, 44.1 kHz, mono, 64 kbps │
└─────────────────────────────────────────────────┘
61 Clips aus dem WCW-Kader von Ende 1999:
| Kategorie | Anzahl | Highlights |
|---|---|---|
| Kampfaufnahmen | 9 | Hogan vs. Goldberg, Hogan vs. Macho Man, CyberRing-Kämpfe |
| Wrestler-Biografien | 13 | Goldberg, Sting, Hogan, DDP, Flair, Nash, Steiner |
| Showintros | 5 | Monday Nitro, Thunder, Surge |
| Handlungsstränge | 8 | Serielle Erzählung „Hacker“ |
| Werbung & Merchandise | 9 | Wrestler-Shirts und Merchandise-Spots |
| Sonstige Segmente | 17 | Nitro Girls, Nasty Boys-Kämpfe, Rey Mysterio, Konnan |
decrypt_pav.py Entschlüsseler: Schlüsselwiederherstellung + Entschlüsselung zu MPEG-1
convert_mp4.py Transcoder: Batch-Konvertierung MPEG-1 zu H.264/AAC MP4
analyze_pav.py Inspektor: zerstörungsfreie PAV-Strukturanalyse
PavSource.ax Original-DirectShow-Filter-Binärdatei (reversed)
UlPlayer.exe Ursprüngliche ULI-Player-Anwendung
FINDINGS.md Technischer Bericht: Formatspezifikation, Disassembly, alle 61 Schlüssel
TIMELINE.md Reverse-Engineering-Methodik, Schritt für Schritt
docs/PRIMARY_SOURCES.md Ursprüngliche SEC-Einreichung von 1999, die das Verschlüsselungssystem dokumentiert
Dieses Tool funktioniert mit jeder Datei im PAVENCRYPT-Format. Der ULI-Player wurde Ende der 1990er Jahre an mehrere Inhaltsverteiler lizenziert. Der Angriff lässt sich auf jede sich wiederholende Schlüsselchiffre verallgemeinern, die auf ein Dateiformat mit vorhersagbaren Bytemustern angewendet wird – was auf die meisten proprietären DRM-Systeme dieser Ära zutrifft.