====== FreePSXBoot ====== Эксплойт (софтмод), позволяющий выполнить на PlayStation произвольный код, используя только специально отформатированую [[memory_card|карту памяти]], без аппаратной модификации консоли. https://github.com/brad-lin/FreePSXBoot Образ карты памяти собирается под определенную версию [[BIOS]] консоли и под запуск через определенный слот. Эксплойт работает также и в большинстве эмуляторов, при использовании дампа оригинального BIOS соответствующей версии. При помощи FreePSXBoot обычно запускается утилита [[Unirom]], но может быть выполнен любой [[psx_exe|зарузочный образ]], который уместится в объем карты памяти (128 KiB) вместе с данными самого FreePSXBoot. Для максимальной совместимости с разными версиями BIOS размер образа не должен превышать 64 KiB. ===== Описание ===== Эксплойт использует неочевидный баг в функции [[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.