Защиту оригинальной PlayStation 2 подвергли обратной разработке
Последняя не считанная ранее часть «толстой» PS2 теперь дампирована.
Более чем через 25 лет после выхода «толстой» PlayStation 2 разработчику под ником DiscoStarslayer удалось извлечь прошивку из неподатливого чипа SPC970 MechaCon, который отвечает за проверку дисков и большую часть системы безопасности консоли.
В публикации в Bluesky разработчик поблагодарил Libby — соавтора, который нашёл эксплойт, позволивший извлечь данные. Согласно документации к инструменту для создания дампа, эксплойт сообщал чипу, что поступающий блок данных с настройками будет пустым, а затем отправлял данных больше, чем тот мог вместить. До этого, в ходе работы, продолжавшейся около четырёх лет, безуспешно пытались использовать более медленный метод: снимать корпус чипа и считывать его содержимое. Этот способ давал лишь неполные дампы.
Все материалы выложили на GitHub вместе с 22 образами прошивок для «толстых» PS2 — от японской модели SCPH-15000 2000 года до моделей серии 39000 2002 года. В них также вошли аркадные платы Namco System 246 и 256, в которых использовался тот же чип. Эти ранние модели были одними из последних непрочитанных вариантов PS2: прошивку MechaCon «Dragon» 2003 года считали в 2021 году.
Чип SPC970 хранит код в масочном ПЗУ, которое нельзя записать или исправить, а данные калибровки и конфигурации — в отдельной EEPROM объёмом 1 КБ. Чтобы обойти это ограничение, группа энтузиастов «spc970-dumper-union» воспользовалась особенностями записи данных в эту EEPROM.
Участники группы обнаружили, что если начать сеанс записи конфигурации с нулевым числом блоков, внутренний счётчик чипа уходит в переполнение. Если отправить данных больше, чем вмещает буфер на семь блоков, излишек попадает в оперативную память, где хранится задача записи в EEPROM. Перезапись исходного адреса этой задачи направляет её уже на ПЗУ чипа, в результате чего MechaCon копирует 256 байт своей прошивки в EEPROM. После этого PS2 может считать их стандартной командой. Если повторить операцию около 1 000 раз, полный образ объёмом 256 КБ окажется на USB-накопителе.
Каждый из этих 1 000 проходов перезаписывает EEPROM, но каждый дамп сокращает срок её службы: у неё нет выравнивания износа, а ресурс записи меньше, чем у флеш-памяти. Чтобы снизить риск, инструмент создаёт резервную копию EEPROM перед началом работы, а затем восстанавливает её слово за словом и сверяет результат с контрольной суммой, которую чип вычисляет при включении. Однако риск всё равно остаётся: в первоначальном инструменте для создания дампа от Libby предупреждают, что консоль может «перестать нормально работать или потребовать ремонта на аппаратном уровне. Вы используете инструмент полностью на свой страх и риск».
Образы прошивок MechaCon Dragon выпустили ещё в 2021 году. Через месяц появился MechaPwn — эксплойт, который снимает региональные ограничения с более поздних PS2 и позволяет им читать резервные копии дисков. В README эксплойта говорится, что в старых консолях используется не MechaCon на базе Dragon, поэтому они не поддерживаются; добавлять поддержку не планируется. Речь идёт примерно о 20 моделях, выпущенных за первые три года существования PS2 — с 2000 по 2003 год. Эти консоли по-прежнему могут запускать резервные копии с помощью эксплойтов для карт памяти и жёстких дисков, но до сих пор их нельзя было разблокировать на уровне чипа, поскольку никто не мог изучить его код. Теперь такие дампы впервые позволяют заняться этим.
Одних этих образов недостаточно, чтобы создать эмулятор оптического привода, но они могут помочь разработать модчип, который заменит MechaCon, сохранив DSP привода для чтения дисков. Поскольку игры для PS2 не были зашифрованы, ничего принципиально нового теперь не становится доступно. Однако прошивка раскрывает код, отвечающий за шифрование «MagicGate» карт памяти и исполняемых файлов KELF, которые консоль загружает с дисков и карт памяти. В дальнейшем это поможет создать «низкоуровневую эмуляцию всей системы», говорит участник проекта uyjulian. PCSX2 и другие эмуляторы, способные также эмулировать менее мощную GameCube, вообще не выполняют код чипа: PCSX2 заново реализует команды MechaCon на C++ и считывает с диска файл NVRAM объёмом 1 КБ и четырёхбайтовый номер версии, которые заменяют настоящий чип. DiscoStarslayer поддерживает форк PCSX2 под названием Reliquary, ориентированный на аутентифицированные сценарии работы PS2. В README проекта авторы признают, что сгенерированные данные-заглушки не заменят аппаратные значения, когда проверка безопасности анализирует идентификатор консоли.
Что касается SPC970, первая задача после создания дампа — найти уязвимость, которая позволит разблокировать ранние консоли. Благодаря MechaPwn пользователи смогли прочитать код чипа Dragon и обнаружить слабое место в механизме обновления, предусмотренном Sony. uyjulian говорит, что одна из целей проекта — создать для SPC970 способ разблокировки по образцу MechaPwn или TonyHax, но это произойдёт не так скоро. Исследователям потребовался всего месяц, чтобы взломать Dragon: Sony изначально создала этот чип с возможностью установки патчей, что и дало исследователям зацепку. SPC970 обновить нельзя — его код был записан в чип ещё в 2000 году и с тех пор не менялся.