Это старая версия документа!
Содержание
FreePSXBoot
Эксплойт, позволяющий выполнить на PlayStation произвольный код, используя только специально отформатированую карту памяти, без аппаратной модификации консоли.
https://github.com/brad-lin/FreePSXBoot
При помощи FreePSXBoot обычно запускается утилита Unirom, но может быть выполнен любой зарузочный образ, который уместится в объем карты памяти (128 KiB) вместе с данными самого FreePSXBoot. Под полезную нагрузку остается ориентировочно около 100 KiB. Это позволяет тестировать простейшие homebrew-игры.
Образ карты памяти собирается под определенную версию BIOS консоли и под запуск через определенный слот.
Эксплойт работает также и в большинстве эмуляторов, при использовании дампа оригинального BIOS соответствующей версии.
Описание
Эксплойт использует неочевидный баг в функции BIOS ReadMemCardDirectory (0xbfc08b3c в ROM SCPH-9002). Эта функция отвечает за чтение структуры каталога карты памяти.
Оболочка (пользовательский интерфейс BIOS, который загружается, если в консоль не вставлен диск) имеет функцию управления картами памяти - копирования и удаления сохранений. Когда она читает индекс файловой системы карты, она копирует первые 32 байта каждой каталожной записи в память и проверяет данные на предмет ошибок. Функция не проверяет границы данных в записи: она предполагает, что размер файла и индекс следующего блока в каждой записи корректны. Манипулируя этими индексами, можно заставить BIOS читать с карты произвольные данные. FreePSXBoot формирует запись так, чтобы при чтении в BIOS произошло переполнение буфера. В результате управление перехватывает 128-байтовый код из буфера (stage 1), который считывает с карты основной загрузчик (stage 2), а тот, в свою очередь, - полезную нагрузку, добавленную при создании образа.
Builder
Программа, которая используется для сборки образов карты памяти. Пример вызова:
builder -bios 4.4 -slot 2 -in program.exe -out card.mcd
В параметре -bios нужно указать версию BIOS целевой консоли. В параметре -slot - слот карты памяти, 1 или 2. Рекомендуется использовать слот 2.
Отформатировать карту памяти можно при помощи Unirom. Внимание! Это сделает карту нечитаемой для игр и BIOS! Настоятельно рекомендуется вместо настоящей карты памяти использовать устройство наподобие PSxMemCard, которое хранит данные на microSD.
