Home » Articles » PSX Manuals |
[ Оффлайн версия мануала yandex.disc (2,1 Мб) ] Основные инструменты PSX хакинга: Автор: Mr2 * При копировании данного материала на другие сайты, обязательно указывайте ссылку на оригинал. Мощное средство для анализа кода: Debugger - вылавливание\отслеживание нужных участков кода, выполнения кода. Дополнительные инструменты: PSX address calculator - конвертер PSX адресов. Обозначения: $ - адрес в оперативной памяти(RAM).
Поиск кода, по переменным: С помощью ArtMoney ищем адрес переменной которая хранит номера пресета управления для первого игрока. * Название игры: Millennium soldier [E] [SLES-01716] * Пресет управления - один из вариантов раскладки кнопок управления. Находим такой адрес пресета: $800A6363.
Анализ кода: Отключение инструкций\функций - патчим инструкцию\вызов, смотрим реакцию. Для начала нам нужно убедиться, ту ли инструкцию мы нашли, для этого отключаем её и смотрим реакцию.
Так как пресет управления читаться перестал, и независимо от его номера установленного в настройках, всегда работает только первый вариант раскладки управления. Мы делаем вывод, что нашли участок кода обрабатывающий кнопки управления. Анализ программного кода в IDA: Чтобы анализ кода был продуктивным, и прост в использовании в будущей модификации, мы воспользуемся мощным средством, позволяющим не только хранить записи, но и переходить по вызовам функций и строить блок схемы кода. * Программный код обычно хранится в файлах с названием SLUS, SLES, SLPS... В нашем случае это файл: SLES_017.16. * Бывают варианты с подзагрузкой, распаковкой, генерацией программного кода в процессе игры. То есть не всегда можно дизассемблировать весь код игры за раз.
* Через вкладку Functions, можно выбирать нужную функцию и переходить на неё. Параллельный анализ кода: В некоторых случаях требуется узнать результаты выполнения инструкций, их можно отслеживать в окне дебаггера, при пошаговом выполнении кода(кнопкой Step). И параллельно комментировать код в IDA. Отслеживание вызовов функций: Для того чтобы добраться до главной функции из подфункции, нужно ставить брейкпоинт на запуск. В IDA мы видим, что функция gamepad_control_8001AC34 вызывается из main(главной) функции игры. Если вы подозреваете что неизвестная функция выполняет известные вам действия, вы также можете использовать отключение вызова функции, как ранее это делалось для инструкции. Отключение вызова либо подтвердит ваши догадки, либо опровергнет. Модификация программного кода: Модификация кода(SlowR3KA+PSIG) - вырезаем код, декомпилируем, редактируем, компилируем. Поиск свободного места под дополнительный код:
* Просматривать оперативную память, можно также через хекс редактор, сдампив её. (дамп памяти сохраняется в папке эмулятора: \dump\ram.bin) Врезка прыжка с перемещением оригинальных инструкций: Имея на руках код обработки кнопок и свободное место под новый код, мы просто обязаны это использовать. Для упрощение задачи повесим на кнопку select, активацию вибрации для DUALSHOCK геймпада. Проанализировав ранее найденную функцию gamepad_control_8001AC34, мы находим удобное место врезки прыжка на наш новый код I>8001AF10, который мы запишем в ранее найденное свободное пространство f$6A678. Команду врезки, можно прописать в наш новый программный код, или врезаться вручную. Перемещение оригинальной инструкции: Затёртую оригинальную инструкцию I>8001AF10 переносим в наш новый код. С помощью ArtMoney находим адрес флага вибрации $800A0584 и пишем саму проверку кнопки select. С помощью PSIG, компилируем наш новый код в исполняемый файл игры SLES_017.16 . Код получился больше чем мог бы быть, из-за того что проверка происходит многократно, возникает эффект турбо нажатия. Для того чтобы от него избавиться была введена дополнительная проверка и флаг turbo_sel_btn_flag. * Более подробное описание работы с PSIG есть в мануале модификация кода. Подводные камни:
* Опасная проблема, эффект проявляется только на реальной консоли PS\PS2.
* Естественно при завершении функции, регистры следует загрузить обратно.
* Адрес возврата сохраняется один раз, в начале вызывающей функции. Адрес возврата загружается один раз, в конце вызывающей функции.
На самом деле качественный ромхаккинг/моддинг, это профессиональное занятие, требующее времени, сил и знаний. Большинство же думает что это обычное развлечение, как прохождение игр. Когда предвкушаемый фан не маячит при изучении хакинга, студент начинает терять запал создать свой шедевр. Но и даже те немногие, кто закончил обучение, и создал свой хак, бывают разочарованными, тем что никто не ценит их многолетний труд. Стимул: Хорошим стимулом для хакинга игры, является улучшение какого-то функционала, или дополнение игры новыми возможностями делающими её лучше оригинала. Вредность:
Мануалы: Ссылки: Знание языка программирования помогает:
Отличные книги по языку программирования, для старта и среднего уровня:
| |||||||||||||||||
Views: 2377 | | |
Total comments: 3 | |
| |