22

Ромхакинг for fun. #1

Многие в детстве видели игры для "Dendy" типа Super Mario Bros с бесконечными жизнями или где Марио мог одним прыжком долететь до финиша, или "Черный плащ 2" (!) который был хаком Super C с измененными тайлами. В 90х мало кто мог сам "хакнуть" игру, а теперь есть куча инструментов для этого и можно попробовать сделать это самому.


Для этого нам понадобится эмулятор FCEUX 2.2.2 ( в этом эмуляторе полно инструментов типа встроенного хекс редактора, дебагера , просмоторщика тайлов которые в данный момент в видеопямати и тд) и ром игры, например Super Mario Bros.


Запустим Марио в эмуляторе запустим игру и зайдем в поиску в памяти ( RAM Search)

Например мы хотим бесконечные жизни. Изначально у нас 3 жизни ( но отсчет идет с 0). Сделаем поиск в памяти как на картинке , и найдем все значения "2". Те значения которые меняются (красные) можно сразу же отсеивать опять делая "Search".

Дальше например добежим до скрытого блока с жизнью о котором все знают, возьмем его и сделаем поиск опять но уже предварительно изменив фильтр , выставим "Greater Than" (больше чем) и "Previous Value" (предыдущее значение). У нас останется один адрес  где хранится количество жизней

Дальше кликаем правой кнопкой на адресе и откроется хексредактор с уже помеченным значением в памяти приставки , кликаем на него правой кнопкой и выбираем "Add Write Breakpoint".

Теперь откроется дебагер и он будет эмуляцию ставить на паузу каждый раз когда в ячейку жизней будет происходить запись (чтоб продолжить эмуляцию жмем Run) и будет показывать команды процессора которые выполняются при этом.

Вернемся в игру не закрывая ничего пока. И спрыгнем в пропасть потратив 1 жизнь. И сразу увидим что сработал наш "breakpoint" фильтр в дебагере. И в этой строке видно что происходит уменьшение (DEC)  значения по адресу 075A и слева так же показана эта функция в хекс виде , а не в виде опкода процессора NES. Скопируем "CE 5A 07" .

Откроем окно с хекс редактором и выберем отображение содержимого рома, а не содержимого памяти приставки и сделаем поиск по "CE 5A 07".

Изменим "5A 07" на "00 00" и сохраним ром File -> Save Rom . Закроем эмулятор и все окна уже нам ненужные и запустим этот ром опять. И теперь при смерти у нас не будут отниматься жизни, тк вместо адреса значение которого должно уменьшаться у нас стоят нули.Это конечно все очень поверхностно и очень уж простой пример. Не все игры или параметры игры получиться так легко хакнуть без знания процессора 6502, но ради развлечения сойдет.


Хотел еще показать как графику можно поменять, но слишком длинно получается и сделаю другой пост .

Эмулятор - http://www.fceux.com/web/home.html

Опкоды NES процессора и их описание - http://www.thealmightyguru.com/Games/Hacking/Wiki/index.php?...

Ромы - http://www.emu-russia.net , http://www.emu-land.net

Лига Геймеров

54.8K постов91.7K подписчиков

Правила сообщества

Ничто не истинно, все дозволено, кроме политоты, за нее пермач, идите на ютуб
Помни!
- Новостные/информационные публикации постим в pikabu GAMES
- Развлекательный контент в
Лигу Геймеров



Нельзя:

Попрошайничать;

Рекламировать;

Оскорблять участников сообщества;

Нельзя оценивать Toki Tori ниже чем на 10 баллов из 10;

Выкладывать ваши кулвидосы с только что зареганных акков - пермач

За неэтичное использование сообщества - тоже бан. Если ты выкладываешь пост в наше сообщество и получаешь стартовые плюсы от наших подписчиков, не думай, что вытаскивать потом пост в своё личное сообщество будет умным поступком.

0
Автор поста оценил этот комментарий

Блин ну просто огромное спасибо!

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
еще нашел баг)) урон от последнего босса тоже записан походу в другое место) Точней от пистолета Джокера, но от него легко уклониться тупо держась к Джокеру поближе


все короче типа финальная версия)) https://yadi.sk/d/en2ytjPvtAtuL

теперь от выстрелов Джокера не умереть, полоска тратится , но сразу заполняется и умереть нельзя
показать ответы
0
Автор поста оценил этот комментарий

Блин ну просто огромное спасибо!

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
еще нашел баг)) урон от последнего босса тоже записан походу в другое место) Точней от пистолета Джокера, но от него легко уклониться тупо держась  к Джокеру поближе
0
Автор поста оценил этот комментарий

Да не заморачивайся и так прекрасно проходится. Может дело у меня в эмуляторе? Я то на псп играю.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
нет не в эмуляторе дело, просто там урон от врагов и урон от окружения раздельно прописан
0
Автор поста оценил этот комментарий

Все таки отнимаются жизни, но не от злодеев а от окружения, кислота или электричество. Но все равно огромное спасибо.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
теперь не отнимаются
проверил на паре уровней, типа кислоты, капель падающих, электро труб , от остального тоже должно теперь не отниматься по идее https://yadi.sk/d/k8OrLENktAqrS
показать ответы
0
Автор поста оценил этот комментарий

Все таки отнимаются жизни, но не от злодеев а от окружения, кислота или электричество. Но все равно огромное спасибо.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

ща проверю, мож удастся быстро исправить

показать ответы
0
Автор поста оценил этот комментарий

Попробуй. Будем результата ждать.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Вроде получилось, багов не заметил. Днем я чет затупил вообще не то там делал, адреса попутал.
https://yadi.sk/d/bDOIOUY-tAnUB
показать ответы
0
Автор поста оценил этот комментарий

Попробовал сейчас с игрушкой Batman. Ничего не получилось. То есть он находит шесть адресов я их меняю, в итоге косяк со звуком, не появляется оружие. Но жизни не отнимает. Можешь показать на моем примере? Давно хотел ее пройти, купил недавно псп и теперь на эмуляторе играюсь. Вот такой батман

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
кстати сам его сейчас пытаюсь пройти , дошел до ласта он вообще жесть особеннов NTSC версии слишком быстро


тоже пытался его хакнуть( ради интереса, а так в эмулеяторе просто можно заморозить значение ), там система другая тк мапер другой, в марио все просто там тупо команда "DEC" при старте игры в память по тому адресу записывается 3 жизни потом при помощи DEC или INC тупо отнимается или прибавляется

а в бетмане все не так и сложней намного , при каждом полученном ударе или поднятии сердца, он читает значение потом сравнивает его со значением "08" ( 8 хит поинтов) и потом уже делает манипуляции , завтра попробую похимичить

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Наконец-то я смогу пройти Mario полностью и таки спасу эту принцессу!!!

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Можно вообще сделать чтоб при касании врага марио не умирал , а наоборот вырастал, своего рода бесмертие. Но это сложней в несколько раз и там несколько значений, а если еще и палитру ему менять и значение в котором храниться не внешнее состояние а сам факт "мелкий/большой/стреляющий" то еще пару значений
показать ответы
0
Автор поста оценил этот комментарий

Вот тут ВСЕ РОМЫ


http://www.romnation.net/

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

http://www.emuparadise.me/ тогда уж

1
Автор поста оценил этот комментарий

В марио по адресу 00 00 ничего важного не лежит, но в другой игре может не повезти.

Не проще ли заменить CE 5A 07 на EA EA EA (три команды "нет операции").

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

можно и так