Quake shareware: как cd-rom стал ловушкой для id software

18.08.2026 · 5 мин

Знаете, почему 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
Как TestDrive разрубала исполняемые файлы

Для каждой игры на диске был свой 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 будет «подтверждением оплаты», а не «криптографическим ключом». Это сработало бы, если бы сервер проверял каждый SERIAL онлайн при разблокировке. Но FLOW.EXE работал офлайн — и просто верил на слово.

Последствия: 150 000 дисков на складе

Результат? Дэвид Кушнер в книге Masters of Doom описывает ситуацию так: дистрибуция и исполнение заказов «вышли из-под контроля», а id Software осталась с 150 000 непроданных компакт-дисков.

К чести индустрии — урок был усвоен. Вскоре появились более надёжные схемы: онлайн-активация, привязка к железу, цифровые подписи, которые невозможно сгенерировать без сервера. Но в 1996 году это была передовая технология, которая проиграла простой арифметике.

Моя оценка: урок, который стоит повторить

Защита, которая работает только пока пользователь «честный», — это не защита. Это механизм честности.

В индустрии это называют security through obscurity — безопасность через неясность. Идея в том, что система безопасна, потому что никто не знает, как она устроена. Но это работает ровно до первого человека, который понял принцип. А когда понятен принцип — понятен и взлом.

TestDrive придумали элегантную схему: разрубить файл, спрятать кусок, выдать ключ после оплаты. Но забыли главное: ключ должен быть секретом. SERIAL не был секретом — он был квитанцией. А квитанцию можно подделать.

Для современных разработчиков это звучит очевидно. Но в 1996 году CD-ROM казался настолько новой территорией, что никто не заметил фундаментальную ошибку в дизайне.

Практический вывод

Если вы делаете систему лицензирования — ответьте на один вопрос: что именно не даёт пользователю получить доступ бесплатно?

Quake Shareware CD — отличный артефакт эпохи. Но как урок по архитектуре систем лицензирования — он бесценен. Стоит пять баксов, а выучить можно на миллион.

Ссылки

Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.