| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| freepsxboot [2026/10/16 09:39] – gecko | freepsxboot [2026/10/16 14:59] (текущий) – gecko |
|---|
| ====== FreePSXBoot ====== | ====== FreePSXBoot ====== |
| |
| Эксплойт, позволяющий выполнить на PlayStation произвольный код, используя только специально отформатированую карту памяти, без аппаратной модификации консоли. | Эксплойт (софтмод), позволяющий выполнить на PlayStation произвольный код, используя только специально отформатированую [[memory_card|карту памяти]], без аппаратной модификации консоли. |
| |
| https://github.com/brad-lin/FreePSXBoot | https://github.com/brad-lin/FreePSXBoot |
| |
| При помощи FreePSXBoot обычно запускается утилита [[Unirom]], но может быть выполнен любой [[psx_exe|зарузочный образ]], который уместится в объем карты памяти (128 KiB) вместе с данными самого FreePSXBoot. Под полезную нагрузку остается ориентировочно около 100 KiB. Это позволяет тестировать простейшие homebrew-игры. | Образ карты памяти собирается под определенную версию [[BIOS]] консоли и под запуск через определенный слот. Эксплойт работает также и в большинстве эмуляторов, при использовании дампа оригинального BIOS соответствующей версии. |
| |
| Образ карты памяти собирается под определенную версию [[BIOS]] консоли и под запуск через определенный слот. | При помощи FreePSXBoot обычно запускается утилита [[Unirom]], но может быть выполнен любой [[psx_exe|зарузочный образ]], который уместится в объем карты памяти (128 KiB) вместе с данными самого FreePSXBoot. Для максимальной совместимости с разными версиями BIOS размер образа не должен превышать 64 KiB. |
| | |
| Эксплойт работает также и в большинстве эмуляторов, при использовании дампа оригинального BIOS соответствующей версии. | |
| |
| ===== Описание ===== | ===== Описание ===== |
| |
| Эксплойт использует неочевидный баг в функции BIOS ReadMemCardDirectory (0xbfc08b3c в ROM SCPH-9002). Эта функция отвечает за чтение структуры каталога карты памяти. | Эксплойт использует неочевидный баг в функции [[BIOS]] ReadMemCardDirectory (0xbfc08b3c в ROM SCPH-9002). Эта функция отвечает за чтение структуры каталога карты памяти. |
| |
| Оболочка (пользовательский интерфейс BIOS, который загружается, если в консоль не вставлен диск) имеет функцию управления картами памяти - копирования и удаления сохранений. Когда она читает индекс файловой системы карты, она копирует первые 32 байта каждой каталожной записи в память и проверяет данные на предмет ошибок. Функция не проверяет границы данных в записи: она предполагает, что размер файла и индекс следующего блока в каждой записи корректны. Манипулируя этими индексами, можно заставить BIOS читать с карты произвольные данные. FreePSXBoot формирует запись так, чтобы при чтении в BIOS произошло переполнение буфера. В результате управление перехватывает 128-байтовый код из буфера (stage 1), который считывает с карты основной загрузчик (stage 2), а тот, в свою очередь, - полезную нагрузку, добавленную при создании образа. | Оболочка (пользовательский интерфейс BIOS, который загружается, если в консоль не вставлен диск) имеет функцию управления картами памяти - копирования и удаления сохранений. Когда она читает индекс файловой системы карты, она копирует первые 32 байта каждой каталожной записи в память и проверяет данные на предмет ошибок. Функция не проверяет границы данных в записи: она предполагает, что размер файла и индекс следующего блока в каждой записи корректны. Манипулируя этими индексами, можно заставить BIOS читать с карты произвольные данные. FreePSXBoot формирует запись так, чтобы при чтении в BIOS произошло переполнение буфера. В результате управление перехватывает загруженный в память 128-байтовый код из буфера (stage 1), который считывает с карты основной загрузчик (stage 2), а тот, в свою очередь, - полезную нагрузку, добавленную при создании образа. |
| |
| |
| В параметре -bios нужно указать версию BIOS целевой консоли. В параметре -slot - слот карты памяти, 1 или 2. Рекомендуется использовать слот 2. | В параметре -bios нужно указать версию BIOS целевой консоли. В параметре -slot - слот карты памяти, 1 или 2. Рекомендуется использовать слот 2. |
| |
| Отформатировать карту памяти можно при помощи [[Unirom]]. **Внимание! Это сделает карту нечитаемой для игр и BIOS!** Настоятельно рекомендуется вместо настоящей карты памяти использовать устройство наподобие PSxMemCard, которое хранит данные на microSD. | Отформатировать карту памяти можно при помощи [[Unirom]]. **Внимание! Это сделает карту нечитаемой для игр и оболочки BIOS!** Настоятельно рекомендуется вместо настоящей карты памяти использовать устройство наподобие PSxMemCard, которое хранит данные на microSD. |
| |