aliast

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

8 сообщений в этой теме

Всем привет. Не уверен что данную статью можно назвать полноценным уроком по взлому игр, я до сих пор не до конца понимаю как там всё работает. Может быть кто-то захочет покопаться и дать комментарии. Речь пойдет об игре 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

Поделиться сообщением


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

Aliast а не пробовал взломать этой программой что то вроде "hotline miami" ? :)

0

Поделиться сообщением


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

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, LIRW сказал:

hotline miami"

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, aliast сказал:

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

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

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

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, MasterGH сказал:

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

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

0

Поделиться сообщением


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

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

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

Изменено пользователем partoftheworlD
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, aliast сказал:

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

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

0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас