[Перевод] Как взломали защиту от копирования консоли Sega Dreamcast
![[Перевод] Как взломали защиту от копирования консоли Sega Dreamcast [Перевод] Как взломали защиту от копирования консоли Sega Dreamcast](https://habrastorage.org/webt/75/nh/l3/75nhl327vyzpklsanxeb3yb9tsw.png)
После выпуска книги DOOM Black Book я отправился в отпуск в Японию, где мне удалось поиграть в Ikaruga на настоящем аркадном автомате в игровом зале Taito HEY токийского квартала Акихабара. Этот опыт снова возродил во мне интерес к последней видеоигровой консоли SEGA — Dreamcast.
В сети можно найти множество документов, сильно облегчающих процесс изучения вопроса. Есть два превосходных ресурса, способных быстро ввести в курс дела любого: замечательный веб-сайт Маркуса Комштедта, на котором описывается всё, вплоть до регистров GPU, и ресурс пользователя Jockel «Давайте создадим игру для Sega Dreamcast с нуля».
При изучении машины я обнаружил восхитительную историю о том, как хакеры быстро взломали защиту копий игр и разрушили последние аппаратные надежды SEGA.
Первый уровень защиты: GD-ROM
На бумаге механизм защиты копий игр для SEGA Dreamcast выглядел очень сильным. Игры поставлялись на специальном носителе под названием GD-ROM, который могла производить только SEGA. GD расшифровывается как «Gigabyte Disc» («гигабайтный диск»), то есть его повышенная плотность записи обеспечивала максимальный объём в 1 ГБ, что было намного больше возможностей обычного CD-ROM (700 МБ).

GD-ROM имел те же физические размеры, что и CD-ROM, но на макроуровне он состоял из двух областей, различимых невооружённым глазом.
Первая (тёмная) зона — это совместимая с CD-ROM область низкой плотности, содержащая до 35 МБ. В ней содержалась голосовая аудиодорожка, напоминающая пользователю, что содержимое диска предназначено для SEGA Dreamcast, а не для CD-проигрывателя[1]. Также разработчик добавлял туда дорожку с текстовыми файлами, например информацией об авторском праве, а иногда и промоматериалы, например, арты из игры.
Область высокой плотности (светлая) хранила до 984 МБ[2] и на ней располагался весь контент игры.
Хакерам казалось невозможным извлечь игру с диска и прожечь её заново для распространения.
Загрузка с GD-ROM: IP.BIN и 1ST_READ.BIN
Прежде чем рассказывать о том, как пиратам удавалось копировать игры, нам нужно понять последовательность загрузки. У Dreamcast не было операционной системы. Есть популярное заблуждение о том, что в ней использовалась Windows CE, но на самом деле ОС Microsoft была всего лишь дополнительной статической библиотекой, которую разработчики Dreamcast могли подключать для использования DirectX, DirectInput и DirectSound[3]. В некоторых играх WinCE использовалась[4], но в большинстве (например в Ikaruga) она не применялась. Вне зависимости от того, что использовал разработчик, игра с полностью подключенной ОС и Dreamcast запускались всегда одинаково.
При обычном использовании и запуске официальной игры на только что включенной Dreamcast запускался BOOTROM, загружая с GD-ROM в ОЗУ программу начальной загрузки (bootstrap). Эта крошечная программа, расположенная на последней дорожке GD-ROM и известная сообществу под названием «IP.BIN», отображала лицензионный экран SEGA и выполняла два уровня начальной загрузки для настройки аппаратных регистров, создания стека ЦП и инициализации VBR[5].
Более важно то, что IP.BIN содержал название исполняемого файла игры. Это название искалось в файловой системе GD-ROM и загружалось в ОЗУ по адресу 0x8C010000, после чего выполнение программы переносилось туда. Обычно исполняемый файл имел название «1ST_READ.BIN».
После того, как ЦП переходил по адресу 0x8C010000, игра запускалась, как и положено.
Второй уровень защиты: шифровальщик-скрэмблер
Теоретическая возможность взлома возникла благодаря казалось бы малозначимой способности Dreamcast загружаться не с GD-ROM, а с CD-ROM. Изначально этот функционал под названием «MIL-CD» задумывался для добавления в музыкальные CD мультимедийных функций, но практически не использовался, за исключением семи караоке-приложений.
Инженеры SEGA понимали, что загрузка MIL-CD может использоваться в качестве вектора атаки, поэтому добавили защиту. Когда консоль распознавала CD-ROM, то BOOTROM загружал IP.BIN обычным образом, но шифровал 1ST_READ.BIN, на первый взгляд случайным образом. Рабочий исполняемый файл превращался в хаотическую мешанину, которая приводила к зависанию консоли.
С такой точки зрения казалось, что консоль надёжно защищена. Dreamcast мог распознавать пиратскую копию игры, портить исполняемый файл в процессе загрузки и побеждать пиратов.
Подайте длинный меч мой!
Проблема с испорченным файлом была решена, когда в конце 1999 года командой хакеров «Utopia» был украден Katana SDK (официальный SDK Sega для Dreamcast)[6]. Оказалось, что скрэмблер был ни чем иным, как реализацией принципа «security through obscurity». SDK содержал реверс-скрэмблер, который превращал правильный исполняемый файл в «обратную мешанину», которая снова становилась исполняемым файлом после загрузки и скрэмблинга консолью Dreamcast при загрузке с CD-ROM.
Извлечение игры с её GD-ROM
Украденный SDK — это всё, что было нужно пиратам. Благодаря возможности запуска кода на машине теперь Dreamcast можно было использовать не как игровую консоль, а как привод GD-ROM. «Кабель для кодера» из SDK [7] позволял подключить консоль к PC и установить физическое соединение. Для того, чтобы консоль могла создать дамп содержимого GD-дорожек, был написан специальный исполняемый файл. Затем его реверс-скрэмблировали и записали на CD-ROM, чтобы вывести весь 1 ГБ данных через последовательный порт консоли. Это был подверженный ошибкам процесс, занимавший до 18 часов[8][9]. Результат сохранялся в специально созданном формате «.gdi».
ikaruga.gdi 153 байта track01.bin 13 982 640 байт track02.raw 2 088 576 байт track03.bin 1 185 760 800 байт
Интересный факт: можно заметить, что общий объём данных составляет не 1 ГБ, как говорилось выше, а 1,2 ГБ. Так получилось потому, что 2352-байтные сектора GD-ROM следуют формату «Red Book», в котором 12 байт используется для синхронизации, 4 байта для заголовка, 2048 байт для полезной нагрузки и 288 байт для Error Detection Code/Error Correcting Code[10].
$ cat ikaruga.gdi 3 1 0 4 2352 track01.bin 0 2 5945 0 2352 track02.raw 0 3 45000 4 2352 track03.bin 0
Как уместили 1000-мегабайтный GD-ROM на 700-мегабайтный CD-ROM
Чтобы уместить игру на 700-мегабайтный CD-ROM, перерабатывались ресурсы игры. Файловая система ISO-9660, используемая в GD-ROM, позволяла с лёгкостью изменять дискретизацию видеороликов и музыки, а также полностью их удалять. Однако для большинства игр такой сложный процесс не требовался, потому что они не занимали весь 1 ГБ. Например, Ikaruga компании Treasure занимала всего 150 МБ, а большая часть её контента была заполнена нулями. В подобных случаях достаточно было простого редактирования заполняющих данных.
На самом деле ISO-9660 — это такой известный формат, что для изучения содержимого архивов .gdi даже были написаны простые скрипты на Python (например gditools.py).
Упаковка и распространение
Последние два этапа процесса заключались в обратном скрэмблинге 1ST_READ.BIN и упаковке всей информации в архив .cdi, чтобы DiscJuggler мог записать образ на CD-R. Полученный результат без проблем работал на любой ванильной Dreamcast без необходимости чипа модификации.
Реакция SEGA и последствия
SEGA быстро выпустила вторую версию консоли DC с полностью отключенным MIL-CD, но ущерб уже был нанесён. После катастрофического падения доходов и выпуска конкурирующей PS2 разработчики забросили Dreamcast и SEGA ушла из разработки оборудования, целиком сосредоточившись на создании ПО.
Справочные материалы
[1] Источник: SEGA GD Workshop
[2] Источник: segaretro.org: GD-ROM
[3] Источник: Microsoft Announces Windows CE Toolkit for Dreamcast
[4] Источник: Dreamcast games utilising Windows CE
[5] Источник: IP.BIN and 1ST_READ.BIN
[6] Источник: Let’s build a Sega Dreamcast game from scratch
[7] Источник: PC Serial Adaptor
[8] Источник: A more accurate and in-depth look at the Dreamcast’s security
[9] Источник: Faster ways were designed latter, using the DC’s broadband connector
[10] Источник: Dreamcast Myth: GD-ROM Storage Capacity
Источник
Студия GamesVoice опубликовала первый дневник локализации русской озвучки для Cyberpunk 2077 Phantom Liberty
На съемках «Народа против Гориллы Гродда» заметили намеки на появление Короля Соломона
Premium Collectibles Studio открыла предзаказ на статую ксеноморфа из фильма Чужой высотой 124 сантиметра
Серии Crash Bandicoot исполнилось 30 лет, но Xbox практически никак не отметила юбилей
Градостроительный симулятор XIRI Oasis Cities посвящен выживанию города будущего
Разработчики Moss закрыли студию после релиза игры на всех платформах
Авторы Fable пообещали сделать боевую систему глубокой вместо копирования старых RPG
По данным СМИ, Sony забрала у студии Kojima Productions движок Decima