Как уязвимость на Shareware-диске позволила взломать полную версию Quake

Прокомментировать Просмотры: 7

В середине 1990-х годов пределом мечтаний любого владельца ПК — если вынести за скобки баснословно дорогой процессор Intel Pentium — являлся оптический привод CD-ROM. Обладая колоссальным по тем меркам объёмом в 640 Мбайт (что примерно втрое превышало среднюю ёмкость типового жёсткого диска), компакт-диски распахнули перед энтузиастами двери в эпоху мультимедиа. Пользователи получили доступ к галереям изображений в разрешении 640×480 с палитрой в 256 индексированных цветов[1], цифровому звуку формата VOC и коротким видеороликам Video For Windows с кадровой частотой 12 fps в скромном окне 240×179[2][3], воспроизводившимся на протяжении нескольких десятков секунд.

Для игровой индустрии CD-ROM оказался весьма парадоксальным носителем: его вместимость в разы опережала производственные возможности студий по созданию ассетов соответствующего качества. Часть проектов — например, The 7th Guest (1993), Wing Commander III: Heart of the Tiger (1994) и Phantasmagoria (1995) — сделали ставку на интерактивное кино (FMV), пусть видеоряд зачастую и занимал лишь фрагмент экрана. Другие сосредоточились на записи несжатого оркестрового саундтрека. Пожалуй, наиболее ёмко и иронично специфику новой технологии сформулировал ведущий архитектор id Software Джон Кармак:

Публика ждёт, что дисковые версии будут под завязку набиты оцифрованной речью и видеовставками […] Ирония в том, что если бы мы решились выпустить DOOM на CD, то записали бы туда саму игру и часовой документальный фильм о её разработке с комментариями нашей команды.

Джон Кармак, интервью журналу «ATARI EXPLORER ONLINE», январь 1994 года

Идеально в теории, провально на практике

К лету 1996 года, потратив три года на напряжённую разработку, id Software завершила производство долгожданного Quake. Как и в эпоху Doom, авторы планировали выпустить условно-бесплатный пролог (shareware) параллельно с полноценным релизом. Дистрибутив Quake занимал скромные 22 Мбайт, и возник закономерный вопрос: чем занять остальное пространство на компакт-диске? Родилась смелая мысль — разместить там зашифрованные сборки всех прошлых игр студии. Это позволяло обойти ритейлеров: покупатель мог разблокировать любую игру мгновенно, совершив один звонок оператору и продиктовав данные кредитки.

Идею претворили в жизнь. Официальный анонс носителя состоялся[4] 3 июля 1996 года, а розничные продажи стартовали 30 августа[5]. Однако триумф был недолгим: спустя всего 39 дней[6] группа реверс-инженеров GNOMON опубликовала архив Quakecrk.zip с утилитой QCRACK.EXE, позволявшей снять защиту со всех проектов на диске в один клик.

Инициатива с розничной продажей shareware-диска Quake обернулась полным фиаско. Замысел id выглядел привлекательно: исключить посредников, предоставив игроку возможность купить пробную версию, позвонить по горячей линии, оплатить заказ и мгновенно получить код доступа ко всей игре.

Однако аудитория немедленно принялась взламывать защиту, чтобы забрать контент даром. Вдобавок логистика и обработка платежей превратились в сущий кошмар. В отчаянной попытке спасти ситуацию студия отозвала диски из магазинов, но момент был упущен — на складах осело около 150 тысяч нераспроданных копий.

Дэвид Кушнер («Властелины DOOM»)

Как же функционировала эта система и где разработчики допустили фатальный просчёт? Давайте разберёмся детально.

Анатомия розничного диска Quake Shareware

Архивные ветки Usenet-конференции rec.games.computer.quake.misc содержат исчерпывающие свидетельства[7] тех событий. Диск можно было приобрести за $9,95 в любой крупной торговой сети вроде CompUSA или Computer City.

Магазин CompUSA (1998 год) (source)
Торговый зал CompUSA (1998 год) (источник)
Магазин Computer City (1994 год)
Магазин Computer City (1994 год)
Quake Shareware CD
Оригинальный компакт-диск Quake Shareware

Полиграфия и упаковка были выполнены на премиальном уровне, нетипичном для демоверсий. Наклейка на коробке акцентировала внимание на статусе «Shareware version» и предлагала набрать бесплатный номер 1–800-669-9342 (или 1–800-ID-GAMES) для покупки ключа активации.

Телефонная линия существует и поныне, однако связаться с центром активации уже не выйдет: ритейлер CompUSA обанкротился и закрылся ещё в конце 2000-х. Сегодня по этому номеру автоответчик предлагает товары медицинского назначения для пенсионеров.

Интересный факт: Во время звонка оператор запрашивал так называемый «SOURCE CODE». Этот идентификатор не участвовал в криптографических вычислениях и служил лишь для трекинга партнерских продаж конкретной торговой точки. Анализ лотов на eBay позволил выявить маркировку многих сетей той эпохи: 12-BSTBY (BestBuy), 24-CCITY (Computer City), 22-CUSA (CompUSA), 38-EB (Electronics Boutique), 44-FTRSP (Future Shop), 34-EGGH (Egghead Software) и 56-MCTR (Media Play).

Штатная схема разблокировки

Интерфейс программы-оболочки отличался поразительной наглядностью. Пользователь мог мгновенно запустить shareware-эпизод или нажать кнопку QUAKE UNLOCK для покупки полного издания.

В меню присутствовал раздел ID STUFF со встроенным каталогом студии: там находились различные редакции DOOM, а также HERETIC и HEXEN, доступные к приобретению тем же способом.

При выборе опции разблокировки лаунчер генерировал CODE NUMBER (запрос, или CHALLENGE), который следовало продиктовать консультанту. После списания средств оператор выдавал ответный UNLOCK CODE NUMBER (ключ, или SERIAL). Во избежание ошибок при диктовке оба значения снабжались встроенными контрольными суммами.

Для защиты от повторного применения одного и того же ключа CHALLENGE обновлялся при каждом перезапуске утилиты, а также автоматически каждые 5 минут работы интерфейса.

Тексты в программе были выдержаны в дерзком стиле id Software (к примеру, фраза: «нажатие этой кнопки позволит зарегистрироваться даже нищему»). Пользователя также предупреждали о необходимости создать бэкап распакованных файлов, поскольку из-за псевдослучайной смены CHALLENGE введённый SERIAL становился непригодным для повторной установки.

Снаружи система казалась монолитной: ключ выдавался исключительно кол-центром после оплаты, без него дешифрация была невозможна. Что же послужило причиной краха?

Технология TestDrive под микроскопом

Программный комплекс защиты был разработан сторонней компанией TestDrive Corp (см. архивную копию их сайта). Решение позиционировалось как удобный мост между триал-версией и покупкой коммерческого ПО.

Алгоритм «модифицировал» бинарные файлы .EXE: первые 32 Кбайт заменялись заглушкой (при прямом запуске выдавалось сообщение «This application has been disabled»), файлу присваивалось расширение .MJ3, оригинальный заголовок упаковывался в зашифрованный контейнер .ST3, а система генерировала стартовое число (seed).

Если проанализировать файловую структуру shareware-диска Quake с помощью дампа каталогов, то обнаружится по одному объекту MJ3 на каждую игру. Внутри архива PAGEMKR лежат сопутствующие файлы ST3. Казалось бы, диск содержит всё для сборки исходных инсталляторов, кроме секретного seed, который оператор сообщает в виде SERIAL.

В подобной логике нет изъяна: закрытый ключ остаётся на сервере, а связка CHALLENGE/SERIAL одноразовая. Но взломщики из GNOMON вскрыли фундаментальный дефект всей архитектуры.

Принцип работы генератора QCRACK.EXE

Патч QCRACK.EXE, увидевший свет 8 октября 1996 года (gnomon.nfo) — ровно через 39 дней после старта продаж, — представлял собой автономный генератор корректных кодов SERIAL на базе текущего CHALLENGE.

Хакеры выяснили главное: код активации, диктуемый оператором, не содержал никакой секретной криптографической информации. Он служил исключительно квитанцией об оплате.

Локальная утилита QUAKE FLOW.EXE сама вычисляла правильный SERIAL прямо на машине пользователя. Вся «проверка» сводилась к банальному сравнению введенной строки с результатом локального расчёта. Архитектура целиком опиралась на порочную концепцию безопасности через неясность (security through obscurity).

Хотя сам математический аппарат вычисления SERIAL был довольно запутанным, в 2016 году исследователь rmolina[8] полностью восстановил его алгоритм:

  1. 11-значный CHALLENGE делится на 4-значный GAME-ID и 7-значный блок, определяющий параметры OFFSET и DEPTH.

  2. GAME-ID выступает индексом в зашифрованной таблице SKU.17, откуда извлекается кодовое имя игры (CODENAME, к примеру, doom2).

  3. На базе CODENAME из архива FLOWLIB.LIB достаётся 512-байтный файл параметров (например, DOOM2.DOC).

  4. Используя CODENAME и статическую константу «Testdrive Corp.», программа формирует из файла DOC массив из 254 16-битных значений, индивидуальный для каждого продукта.

  5. С помощью смещений DEPTH и OFFSET массив обходится с конца, а через XOR с параметром DEPTH вычисляется 16-битное число MEM.

  6. Итоговый SERIAL компилируется формулой unlock = ((reverse7(GAME_ID) + MEM + 0x18) & 0x7F) + 0x83 * ((MEM ^ 0x1EA3) + 0x1700A1) и дополняется префиксом «B».

Беспечность и спешка при сборке

Погружение в структуру диска оставляет стойкое ощущение катастрофического цейтнота у разработчиков инсталлятора.

Никогда не объясняйте злым умыслом то, что вызвано обычной глупостью. И никогда не объясняйте глупостью то, что стало следствием банальной нехватки времени.

Бритва Фабьена

Детальный анализ диска Quake Shareware вскрыл массу курьёзных огрехов:

  • Систему практически не тестировали перед отправкой на завод. Из-за банальной опечатки легальные покупатели Final DOOM вообще не могли активировать игру по телефону. Игре был присвоен GAME-ID 12, которому в SKU.17 соответствовало значение “Final” с заглавной буквы вместо строчной “final”. В результате скрипт запрашивал несуществующий DOC-файл и выдавал ошибку. Парадокс: взломанная версия работала безупречно, а добросовестные клиенты остались ни с чем.

  • Хотя алгоритм опирается на шифрованный файл SKU.17, прямо в папке FLOWDIR разработчики забыли открытый исходный файл SKU.TXT. Рядом лежали и другие текстовые дубликаты защищённых баз: PRODUCT.TXT и EXE.TXT.

  • В состав релиза попали временные файлы сборки (DM.TMP), резервные копии редактора (FLOWWORK.BAK) и неиспользуемые бинарники (ENCRYPT.EXE).

  • Сам контейнер библиотек лишен шифрования: разобрав простой заголовок .DIR, любой желающий мог без труда извлечь необходимые файлы конфигураций DOC.

Источники

  1. Коллекция MediaPack 10-CD Roms

  2. MediaPack: Влажные тропические леса

  3. MediaPack: Дикая природа

  4. Обзор релиза Quake (SFGate)

  5. Сроки появления дисков в рознице (rec.games.computer.quake.misc)

  6. Релизный файл gnomon.nfo

  7. Обсуждение Quake Shareware CD (rec.games.computer.quake.misc)

  8. Разбор алгоритмов Quake, TestDrive и Qcrack

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов