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

С точки зрения разработчиков видеоигр, CD‑ROM был странным носителем. Его ёмкость намного превосходила качество ресурсов, которые они могли создать. Некоторые игры, например, 7th Guest (1993 год), Wing Commander III: Heart of the Tiger (1994 год) и Phantasmagoria (1995 год), познакомили игроков с Full Motion Video (в мире, где анимированной могла быть только часть экрана). В других играх появилась высококачественная музыка. Самым запомнившимся мнением по этой теме стало высказывание ведущего разработчика id Software Джона Кармака.

Люди ожидают, что в CD‑играх будет куча оцифрованной речи и видео [...] Смешно то, что если мы когда‑нибудь выпустили бы CD‑версию DOOM, то там была бы только игра и часовой фильм «Как мы делали DOOM» с участием разработчиков.

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

Хорошо в теории, плохо на CD

К июню 1996 года, спустя три года упорного труда, id Software завершила свой новый проект — Quake. Как и в случае с Doom, компания собиралась выпустить и shareware‑версию, и полную версию игры. Так как она занимала всего 22 МиБ, люди из id Software решили попробовать занять оставшееся свободным место на CD‑ROM. Почему бы не записать туда зашифрованные версии всего каталога игр id? Это позволит не только избавиться от посредников, но и мгновенно покупать игры, совершив лишь один телефонный звонок и воспользовавшись кредитной картой.

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

Эксперимент с розничной shareware‑версией Quake оказался катастрофой. Теоретически, id избавилась бы от розничных продавцов, позволив игрокам купить shareware, позвонить по указанному номеру, совершить покупку и получить пароль, разблокирующий остальную часть игры.

Но игроки сразу же принялись взламывать shareware, чтобы получить полную версию игры бесплатно. Хуже того: все скучные аспекты распространения и проведения оплаты вышли из‑под контроля. В качестве жеста отчаяния id попыталась приостановить продажу shareware в рознице, но было уже слишком поздно. В итоге на складе осталось почти 150 тысяч CD.

Дэвид Кушнер (Masters of Doom)

Что же произошло? Давайте разбираться!

Находим розничный CD shareware‑версией Quake

Благодаря архивам Usenet на rec.games.computer.quake.misc сохранились подробные обсуждения [7] того, как всё это было устроено. Игрок мог зайти в один из сотен магазинов CompUSA/Computer City и купить CD за $9,95.

Магазин CompUSA (1998 год) (source)
Магазин CompUSA (1998 год) (source)
Магазин Computer City (1994 год)
Магазин Computer City (1994 год)
Quake Shareware CD
Quake Shareware CD

Для shareware‑продукта качество упаковки было довольно высоким. Стикер на моём экземпляре уточняет, что это «Shareware version» с предложением позвонить на номер 1–800-669-9342 (или 1–800-ID‑GAMES) для разблокировки всей игры.

Этот номер телефона действует и сегодня, но дозвониться по нему до центра разблокировки уже невозможно, потому что сеть магазинов CompUSA закрылась. Сеть Superstore закрылась где‑то в 2007–2008 году. Вместо оператора, помогающего разблокировать игру, вы услышите автоматическое сообщение о продаже товаров для пожилых людей.

Любопытный факт: Созвонившись с оператором, пользователи должны были сообщить и «код источника» (SOURCE CODE). Он никак не участвовал в генерации кода разблокировки. Возможно, с его помощью розничные сети доказывали оплату транзакции. На eBay я нашёл множество кодов, связанных с розничными магазинами прошлого/настоящего. 12-BSTBY — BestBuy, 24-CCITY — Computer City, 22-CUSA — CompUSA, 88, 11–1111, 38-EB — Electronic Boutique, 44-FTRSP — Future Shop (Канада), 34-EGGH — Egghead Software и 56-MCTR — Media Play/ Musicland.

Как это должно было работать

Покупателю всё было понятно с первого взгляда — GUI реализован очень хорошо. Пользователи могли сразу запустить Quake Shareware, но также можно было нажать на QUAKE UNLOCK.

Также на CD‑ROM присутствует раздел ID STUFF, позволяющий просмотреть каталог игр id Games и разблокировать любые из них. Там есть множество разных версий DOOM, а также HEXEN и HERETIC.

После запуска процесса разблокировки GUI генерировал CODE NUMBER (который я буду называть CHALLENGE); его нужно было сообщить агенту службы разблокировки по телефону. После оплаты покупатель получал UNLOCK CODE NUMBER (который я буду называть SERIAL). Контрольные суммы обоих чисел позволяли избежать проблем, связанных с подобным примитивным способом передачи данных.

Чтобы защититься от атак повторного воспроизведения, CHALLENGE меняется при каждом запуске программы и каждые пять минут, пока активен GUI.

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

На первый взгляд, процесс выглядел защищённым: для получения пароля пользователям нужно было позвонить в службу разблокировки. И только с этим паролем можно было завершить окончательную разблокировку. Что же пошло не так?

Внутри TestDrive

Инструмент, управлявший блокировкой/разблокировкой, был разработан TestDrive Corp (см. архивную версию www.testdrive.com). Он позволял игрокам попробовать программу, а затем сразу же купить её полную версию.

Программа шифрования умела «денатурировать» исполняемый файл .EXE. Она заменяла первые 32 КиБ специальным заголовком (при попытке запуска денатурированного исполняемого файла отображалось сообщение «Это приложение отключено»), переименовывала файл в .MJ3, зашифровывала исходный заголовок в файл .ST3 и генерировала порождающее значение (seed).

Давайте взглянем внутрь shareware CD Quake при помощи сгенерированного мной списка файлов (рекомендую открывать его в режиме параллельного просмотра браузера). В этом дереве мы видим по одному файлу MJ3 для каждой игры. Также в архиве PAGEMKR можно увидеть файлы ST3. Здесь есть всё необходимое для восстановления MJ3 в установщик игры EXE, за исключением секретного seed, который вроде бы должен вычисляться на основе SERIAL.

При таком описании в процессе нет никаких изъянов. Секретный seed берётся у службы разблокировки, он привязан CHALLENGE/SERIAL, которые нельзя использовать повторно. Однако команда хакеров GNOMON нашла способ обхода защиты.

Как работает QCRACK.EXE

Файл QCRACK.EXE, выпущенный 08.10.96 (gnomon.nfo), спустя всего 39 дня после попадания в магазины розничного shareware CD Quake — это инструмент для автоматической генерации SERIAL на основании CHALLENGE.

Члены группы GNOMON разобрались, что получаемый по телефону SERIAL вообще не содержит секрета. Он просто был доказательством оплаты.

Находящаяся на CD программа разблокировки QUAKE FLOW.EXE сама способна генерировать SERIAL из CHALLENGE. Всё, что она проверяет — это совпадение между локально сгенерированным SERIAL и SERIAL, введённым пользователем! Весь механизм защит основан на принципе security by obscurity.

Процесс превращения CHALLENGE в SERIAL сложен, но в 2016 году rmolina[8] выполнил его реверс‑инжиниринг.

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

  2. GAME‑ID используется в качестве индекса зашифрованной базы данных SKU.17, дающей CODENAME (например, doom2).

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

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

  5. При помощи DEPTH и OFFSET выполняется обход этой таблицы в обратном порядке; при помощи XOR с DEPTH генерируется одно 16-битное значение MEM.

  6. Затем SERIAL вычисляется как unlock = ((reverse7(GAME_ID) + MEM + 0x18) & 0x7F) + 0x83 * ((MEM ^ 0x1EA3) + 0x1700A1) и выводится с символом B в начале.

Другие недостатки

Чем дольше я исследовал эту тему, тем сильнее казалось, что у ответственных за диск не было времени довести всё до ума.

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

Бритва Фабьена (моя)

При изучении shareware CD Quake обнаружились и другие проблемы.

  • Похоже, некоторые части системы разблокировки никогда не тестировались. Из‑за бага Final DOOM невозможно разблокировать звонком в центр разблокировки. GAME‑ID Final Doom равен 12. В SKU.17 есть опечатка, из‑за которой GAME‑ID 12 соответствует CODENAME “Final” (с заглавной F). Из‑за этого при генерации SERIAL используется не тот DOC. Правильным значением должно быть «final». Это создало знакомую многим ситуацию: пользователи‑пираты получили больше, чем те, кто заплатил.

  • В пошаговом описании алгоритма говорится о зашифрованном файле SKU.17. Внутри архива FLOWDIR есть его совершенно не зашифрованная версияSKU.TXT без всякой защиты. На диске присутствует и множество других файлов TXT, соответствующих их зашифрованным версиям .17 (PRODUCT.TXT, EXE.TXT).

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

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

Ссылки

  1. MediaPack 10-CD Roms

  2. MediaPack Tropical Rainforest

  3. MediaPack Wild Places

  4. Quake' Is Here

  5. When will it be available in stores (rec.games.computer.quake.misc)

  6. gnomon.nfo

  7. Question about Quake Shareware CD (rec.games.computer.quake.misc)

  8. Quake, TestDrive y Qcrack

Комментарии (0)