Перейти к содержанию

Бессмертие в играх со смертями в одно касание


Рекомендуемые сообщения

Всем привет. Не уверен что данную статью можно назвать полноценным уроком по взлому игр, я до сих пор не до конца понимаю как там всё работает. Может быть кто-то захочет покопаться и дать комментарии. Речь пойдет об игре I Wanna Be The Boshy. Это такой сверхсложный платформер, где смерть наступает от одного касания персонажа, врагом, различными шипами и даже от курсора мышки :-D Никаких бонусов в плане +1 касание до смерти в игре не предусмотрено. Как делать бессмертие непонятно. Но вот случилось чудо!

Все мы давно слышали про жутко глючную прогу Function Hacker, которая мало того что не фурычит с современными x64 играми, так ещё и в 32 битах любит вылетать и всяко разно глючить. Сколько я ни пытался её использовать для взлома, всё всякая ерунда получалась. Вроде бы как удалось с помощью неё сделать бессмертие в старой игрушке Commandos, но там бессмертие проще было сделать другим путём. И вот наконец прога впервые себя оправдала.

Ищем функции, срабатывающие в момент смерти игрока. Стоит ли здесь подробно останавливаться на том, как пользваться прогой? Пожалуй, не буду. Кому будет интересно, могу расписать более подробно. В общем нашлось у меня всего-ничего, три функции (Рис. 1).

death_func.thumb.jpg.85f857c3547da3ba8df

Сделать бессмертие мне помогла последняя из них  I Wanna Be The Boshy.exe + 0x49C50. Если я не ошибаюсь, именно эта функция была в списке на вкладке Call List на первом месте. Функция короткая, но я не разобрался что она делает. Дальше я сделал трассировку на два уровня вверх. I Wanna Be The Boshy.exe + 0x49C50 вызывалась с адреса I Wanna Be The Boshy.exe + 0x104DB. Кстати говоря, немного ниже функция I Wanna Be The Boshy.exe + 0x48FF0 отвечает за анимацию брызг крови в момент смерти, из чего я сделал предположение что данный код срабатывает уже ПОСЛЕ смерти игрока. В свою очередь функция I Wanna Be The Boshy.exe + 0x104D0 вызывалась с адреса I Wanna Be The Boshy.exe + 0x481B1. Занопив вызов этой фунции (Опция в Cheat Engine "Replace with code that does nothing") я получил очень странный глюк, когда экран игры темнеет, мельтешит и ничего не разобрать. Ничего не разобрать, но если приглядеться, то можно заметить надпись Game Over, хотя в игре я не умирал! Вот тут я воспрянул духом и стал думать (Рис. 2).

code1.thumb.jpg.77b12127577dbf35437dde29

Если это функция смерти, значит нужно ее перепрыгнуть или обмануть. Перепрыгивается функция на проверке cmp ebp,ebx. Ставим бряк и видим, что проверка происходит ежесекундно, а не только в момент смерти (т.е. Function Hacker нам не должен был помочь, но ведь помог! Пусть и косвенно, найдя зацепку для бэк-трейсинга кода). Когда игрок жив, ebp=ebx=0. Условие je срабатывает и мы перепрыгиваем Game Over. В момент смерти в ebp записывается нечто типа 0x0B4FD528 (адрес этот меняется, на что ссылается я не разобрался) и в результате мы попадаем на Game Over. Значит нам нужно принудительно писать в ebp нуль, чтобы игра всегда перепрыгивала функцию Game Over. Проверил - работает! Можно прыгать прямо на шипы и радоваться выживанию B) Также бессмертие работает и на курсоре мышки, пауке, птичке на 1-ом уровне. Других врагов не проверял, но подозреваю что и них всё будет гуд.

Update: Обнаружился неприятный баг чита - чит не дает подбирать сундучки, но это не такая большая проблема. Можно либо не подбирать их, либо перед взятием сундука временно отключать чит.

 

ВИДЕО СМОТРЕТЬ С УБАВЛЕННЫМ ЗВУКОМ, ТАМ ГРОМКО ОРУЩИЙ СКРИМЕР-ПАУК ВЫЛЕЗЕТ!!!!

Считаю что мне крупно повезло со взломом этой игры, но возможно кто-то что-то и вынесет для себя из этой статьи.

 

Изменено пользователем aliast
  • Плюс 3
Ссылка на комментарий
Поделиться на другие сайты

Интересно.  В CE есть еще поиск строк. По строке можно найти что-то типа game over, поставить брейкпоинт на чтение и найти откуда вызывается.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, LIRW сказал:

hotline miami"

А эта игра не 64-битная? Я помню как вы тут все ломали ее и так и не сломали, но сам не пробовал. Хочу для начала Limbo попинать. А Майами меня отпугивает тем фактом, что вы её всей толпой не сломали :(

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, aliast сказал:

А Майами меня отпугивает тем фактом, что вы её всей толпой не сломали :(

Майами я не помню точно какая версия x32 или x64  

Посмотрел характеристики системные - там P4 стоит, а значит x32!  Но мы так и не сделали бессмертие, когда смотрели :lol: там слишком резкие типы. Я знаешь как хотел найти бессмертие ? В игре есть жирный мужик, так он выдерживает много ударов или даже выстрелов, так хотел в него пострелять и по отсеивать, а потом от его жизни оттолкнуться на свою уже. Но там как и писал, такие резкие все, что этот бочонок тоже бегает не хило и просто не успевал даже в замедленном режиме найти его жизнь... В общем убивал он меня :( 

Кстати в игре есть маска - которая выдерживает 2 удара противника. Но с 2_ух отсевов тоже надо быть хорошим телепатом. Даже не с двух, а с одного, потому что после смерти адрес уже будет не активен, а при загрузке игра его перепишет скорее всего.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, MasterGH сказал:

В CE есть еще поиск строк. По строке можно найти что-то типа game over, поставить брейкпоинт на чтение и найти откуда вызывается.

Строку Game over я не нашёл, но можно пойти более простым путем. Ищем "1" когда игрок жив, "0" когда умер. Находим условие появления Game Over. Находим инструкцию, работающую только с этим адресом. Сделать код прямо здесь не выходит, но ниже по коду видим call. Нопим его и... Game over появляется, но игрок продолжает ходить в пределах одного экрана, дальше не пускают. Восстанавливаем call и спокойно выходим на другой экран. Надпись Game Over при этом не исчезает :( В таком виде чит неудобен, но можно от этого места ещё поплясать...

Ссылка на комментарий
Поделиться на другие сайты

Делал бессмертие на Super Meat Boy, через координаты можно выйти на функцию в классе героя. Используя адрес класса в просмотре структур ce будет таблица виртуальных методов. В одном из них были характеристики и состояние гг

P.s инструкция должна работать только с нашим гг, иначе выйдем не на ту функцию

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, aliast сказал:

Ищем "1" когда игрок жив, "0" когда умер. Находим условие появления Game Over.

То на то и выходит. Если от этой инструкции, работающей с 0/1 подняться на те же два уровня вверх по ретам, выйдем в то же самое место кода, что я описывал выше. Так что такой способ должен быть проще, Function Hacker становится не нужен.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.