Quake shareware: как cd-rom стал ловушкой для id software
Знаете, почему 150 000 компакт-дисков с условно-бесплатной версией Quake пылились на складе? Не потому, что игра не продавалась. Наоборот — диск был настолько переполнен «бесплатным» контентом, что хакеры просто забрали всё, не заплатив ни цента.
Это история о том, как инженерное решение обернулось катастрофой, когда в дело вмешалась человеческая жадность и криптография уровня «мы верим, что никто не догадается».
Cd-rom в 1996 году: роскошь размером с флешку
Представьте эпоху: у вас Pentium с жёстким диском на 200 мегабайт, и тут появляется CD-ROM на 640 MiB. Это как если бы вам дали десять вёдер воды, когда вы привыкли к одному.
id Software три года работала над Quake. Игра занимала 22 мегабайта. То есть из 640 доступных оставалось 618. Чистое пространство. И кто-то в компании подумал: а что, если мы впихнём туда все наши игры — зашифрованные? Покупаешь один диск, звонишь по телефону, платишь — получаешь пароль и разблокируешь DOOM, HEXEN, HERETIC.
Идея выглядела гениальной. Никаких посредников, никаких магазинов — напрямую от производителя к игроку. Джон Кармак в интервью 1994 года шутил: «Если мы сделаем CD-версию DOOM, вы получите саму игру и часовой фильм о её создании».
В реальности всё пошло иначе.
Что лежало на диске
На каждом компакт-диске Quake Shareware было несколько файлов с расширением .MJ3 — так называемые «денейтнутые» исполняемые файлы. Это была технология TestDrive Corp: оригинальный EXE разрезался, первые 32 KiB заменялись заглушкой, которая выдавала «This application has been disabled», а сам код хранился в отдельном зашифрованном куске .ST3.
СТРУКТУРА ДЕНЕЙТНУТОГО ФАЙЛА
──────────────────────────────
Normal EXE: ┌─────────────┐
│ Original │
│ 32 KiB │
└─────────────┘
Denatured MJ3: ┌─────────────┐
│ Header │ ──▶ "Application disabled"
│ 32 KiB │
└─────────────┘
Separated ST3: ┌─────────────┐
│ Encrypted │
│ Original │
│ header │
└─────────────┘
Key: Зашифрованная часть + Seed = Восстановленный EXE
Для каждой игры на диске был свой MJ3 и свой ST3. Полный набор id Software — DOOM нескольких версий, HEXEN, HERETIC — всё это лежало рядом с Quake. Игрок мог купить диск за 9,95 доллара в CompUSA или Computer City, запустить программу FLOW.EXE, получить «вызов» (CHALLENGE), позвонить оператору, продиктовать код, заплатить и получить «серийный номер» (SERIAL).
Всё выглядело надёжно. CHALLENGE менялся каждые пять минут и содержал рандом. SERIAL выдавался только после оплаты. Казалось бы — защита на месте.
Хакерам понадобилось 39 дней.
Qcrack.exe: когда защита — это просто красивое слово
Группа GNOMON выпустила утилиту 10 октября 1996 года — меньше чем через полтора месяца после выхода диска. И их инсайт был до гениальности простым:
SERIAL — это не секрет. Это просто доказательство оплаты.
Сервер разблокировки проверял: заплатил ли человек? Если да — выдавал SERIAL. Но сам SERIAL не содержал никакой криптографической магии. Он был формальностью. А раз так — зачем вообще звонить оператору?
QCRACK.EXE делал одну вещь: генерировал валидный SERIAL автоматически, на основе CHALLENGE. Без звонка. Без оплаты. Без посредников.
ПРОВАЛЕННАЯ СХЕМА ЗАЩИТЫ
───────────────────────────
ПЛАН ID SOFTWARE:
┌──────────┐ Звонит ┌──────────┐ Платит ┌──────────┐
│ Игрок │ ──────────▶ │ Оператор │ ──────────▶ │ Сервер │
└──────────┘ └──────────┘ └──────────┘
│ │
│◀────── SERIAL (proof of payment) ───────────────│
│ │
│ ▼
│ ┌──────────────┐
└─────────────▶ │ FLOW.EXE │
│ "Unlocked!" │
└──────────────┘
ЧТО ДЕЛАЛ QCRACK.EXE:
┌──────────┐ ┌──────────┐
│ Игрок │ ─── CHALLENGE ────────▶│ QCRACK │
└──────────┘ └──────────┘
│ │
│◀── SERIAL (fake payment) ──────────┘
│
▼
┌──────────────┐
│ FLOW.EXE │
│ "Unlocked!" │
└──────────────┘
Проблема была архитектурная, а не техническая. Кто-то решил, что SERIAL будет «подтверждением оплаты», а не «криптографическим ключом». Это сработало бы, если бы сервер проверял каждый SERIAL онлайн при разблокировке. Но FLOW.EXE работал офлайн — и просто верил на слово.
Последствия: 150 000 дисков на складе
Результат? Дэвид Кушнер в книге Masters of Doom описывает ситуацию так: дистрибуция и исполнение заказов «вышли из-под контроля», а id Software осталась с 150 000 непроданных компакт-дисков.
К чести индустрии — урок был усвоен. Вскоре появились более надёжные схемы: онлайн-активация, привязка к железу, цифровые подписи, которые невозможно сгенерировать без сервера. Но в 1996 году это была передовая технология, которая проиграла простой арифметике.
Моя оценка: урок, который стоит повторить
Защита, которая работает только пока пользователь «честный», — это не защита. Это механизм честности.
В индустрии это называют security through obscurity — безопасность через неясность. Идея в том, что система безопасна, потому что никто не знает, как она устроена. Но это работает ровно до первого человека, который понял принцип. А когда понятен принцип — понятен и взлом.
TestDrive придумали элегантную схему: разрубить файл, спрятать кусок, выдать ключ после оплаты. Но забыли главное: ключ должен быть секретом. SERIAL не был секретом — он был квитанцией. А квитанцию можно подделать.
Для современных разработчиков это звучит очевидно. Но в 1996 году CD-ROM казался настолько новой территорией, что никто не заметил фундаментальную ошибку в дизайне.
Практический вывод
Если вы делаете систему лицензирования — ответьте на один вопрос: что именно не даёт пользователю получить доступ бесплатно?
- Если «сервер проверяет каждый раз» — это защита.
- Если «нужно позвонить и заплатить» — это не защита, это процесс. И процесс можно автоматизировать.
Quake Shareware CD — отличный артефакт эпохи. Но как урок по архитектуре систем лицензирования — он бесценен. Стоит пять баксов, а выучить можно на миллион.
Ссылки
- Fabien Sanglard — Quake Shareware, a CD-ROM just a little too full — первичный источник
- TestDrive Corp (архив) — история технологии denaturing
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.