Криптоанализ проприетарной системы DRM для видео 1999 года. Восстанавливает 61 зашифрованное видео рестлинга с CD-ROM WCW Internet Powerdisk с помощью статического анализа бинарного кода и атаки по известному открытому тексту.
Криптоанализ проприетарной DRM-системы для видео 1999 года, восстановление 51 минуты утерянного медиа с помощью статического анализа бинарного кода и атаки на основе известного открытого текста.

Кадр из восстановленного матча «CyberRing». Рестлеров WCW снимали на синем фоне и компоновали с CGI-ареной и эффектами огня. Так выглядело интерактивное развлечение 1999 года.
WCW Internet Powerdisk — рекламный CD-ROM, распространявшийся с журналом WCW Magazine в 1999 году. На диске находилось 61 видео (фрагменты матчей, профили рестлеров, заставки шоу), зашифрованных с помощью проприетарной системы PAVENCRYPT, разработанной компанией UIT.
Для воспроизведения требовался поставляемый плеер ULI Player, который при запуске получал ключи дешифрования с удалённого сервера. Когда около 2000 года серверная инфраструктура UIT перестала работать, контент стал навсегда недоступен. Плеер выводил лишь:
«Ключ дешифрования не найден в базе данных сервера»
Никаких ключей на диске нет. Документация по формату никогда не публиковалась. UIT, по всей видимости, полностью прекратила существование. В течение 25 лет контент оставался невоспроизводимым.
Наши выводы по обратной разработке подтверждаются оригинальным лицензионным соглашением 1999 года, зарегистрированным в SEC, в котором описывается «Программа генерации ключей на стороне сервера», создающая «ключи безопасности на основе времени».
Восстановленные видео доступны на Internet Archive:
61 клип общей продолжительностью 51 минута 20 секунд, перекодированный в H.264/AAC MP4. Оригинальный контент произведён WCW (Turner Broadcasting). Права сейчас принадлежат 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+ (без сторонних пакетов). ffmpeg для опциональной конвертации в MP4.
Каждый файл .PAV зашифрован потоковым шифром с повторяющимся ключом и вычитанием байтов:
plaintext[i] = (ciphertext[i] - key[i % key_length]) mod 256
Ключи уникальны для каждого файла, имеют длину от 8 до 24 байт печатного ASCII, генерируются случайным образом во время кодирования. Процедура дешифрования находится в PavSource.ax — 24-килобайтном фильтре DirectShow, собранном в апреле 1999 года:
mov cl, [ebx+edx+0x3C] ; загрузить key[key_index]
sub byte ptr [eax], cl ; plaintext = ciphertext - key_byte
Никакого перебора, эмуляции или сервера. Ключи восстанавливаются математически:
MPEG-1-файлы заканчиваются известными байтами. В хвосте файла содержатся заполнение 0xFF, за которым следует код конца программы (00 00 01 B9).
Повторяющийся ключ над константой даёт повторяющийся шаблон. Зашифрованный хвост обнаруживает периодичность, равную длине ключа.
Восстановление ключа — алгебраическая операция. Зная открытый текст, получаем key[i] = (ciphertext[i] - 0xFF) mod 256.
Верификация — структурная. Расшифрованный вывод должен начинаться с корректного кода пакета MPEG-1 (00 00 01 BA).
Вся атака выполняется за секунды без внешних данных.
┌─────────────────────────────────────────────────┐
│ Магия "PAVENCRYPT" (10 байт) │
├─────────────────────────────────────────────────┤
│ Незашифрованное MPEG-1-превью (16–32 КБ) │
│ 2 видеокадра, без звука (служило миниатюрой) │
├─────────────────────────────────────────────────┤
│ Зашифрованный MPEG-1-программный поток │
│ Побайтовый ключ вычитания, 8–24 байта │
│ │
│ Видео: 320×240, 30 кадр/с, ~1,29 Мбит/с │
│ Аудио: MP2, 44,1 кГц, моно, 64 кбит/с │
└─────────────────────────────────────────────────┘
61 клип, охватывающий состав WCW конца 1999 года:
| Категория | Количество | Избранное |
|---|---|---|
| Фрагменты матчей | 9 | Хоган против Голдберга, Хоган против Безумного Мачо, матчи CyberRing |
| Биографии рестлеров | 13 | Голдберг, Стинг, Хоган, DDP, Флэр, Нэш, Штайнер |
| Заставки шоу | 5 | Monday Nitro, Thunder, Surge |
| Сюжетные отрезки | 8 | Серийный рассказ «Хакер» |
| Промо и мерчандайз | 9 | Футболки и рекламные ролики |
| Прочие сегменты | 17 | Nitro Girls, матчи Nasty Boys, Рей Мистерио, Коннан |
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 Оригинальное заявление SEC 1999 года, документирующее систему шифрования
Этот инструмент работает с любым файлом формата PAVENCRYPT. Плеер ULI лицензировался нескольким распространителям контента в конце 1990-х годов. Атака обобщается на любой шифр с повторяющимся ключом, применённый к формату файла с предсказуемыми байтами, что описывает большинство проприетарных DRM той эры.