Всем привет. Не уверен что данную статью можно назвать полноценным уроком по взлому игр, я до сих пор не до конца понимаю как там всё работает. Может быть кто-то захочет покопаться и дать комментарии. Речь пойдет об игре I Wanna Be The Boshy. Это такой сверхсложный платформер, где смерть наступает от одного касания персонажа, врагом, различными шипами и даже от курсора мышки Никаких бонусов в плане +1 касание до смерти в игре не предусмотрено. Как делать бессмертие непонятно. Но вот случилось чудо!
Все мы давно слышали про жутко глючную прогу Function Hacker, которая мало того что не фурычит с современными x64 играми, так ещё и в 32 битах любит вылетать и всяко разно глючить. Сколько я ни пытался её использовать для взлома, всё всякая ерунда получалась. Вроде бы как удалось с помощью неё сделать бессмертие в старой игрушке Commandos, но там бессмертие проще было сделать другим путём. И вот наконец прога впервые себя оправдала.
Ищем функции, срабатывающие в момент смерти игрока. Стоит ли здесь подробно останавливаться на том, как пользваться прогой? Пожалуй, не буду. Кому будет интересно, могу расписать более подробно. В общем нашлось у меня всего-ничего, три функции (Рис. 1).
Сделать бессмертие мне помогла последняя из них 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).
Если это функция смерти, значит нужно ее перепрыгнуть или обмануть. Перепрыгивается функция на проверке cmp ebp,ebx. Ставим бряк и видим, что проверка происходит ежесекундно, а не только в момент смерти (т.е. Function Hacker нам не должен был помочь, но ведь помог! Пусть и косвенно, найдя зацепку для бэк-трейсинга кода). Когда игрок жив, ebp=ebx=0. Условие je срабатывает и мы перепрыгиваем Game Over. В момент смерти в ebp записывается нечто типа 0x0B4FD528 (адрес этот меняется, на что ссылается я не разобрался) и в результате мы попадаем на Game Over. Значит нам нужно принудительно писать в ebp нуль, чтобы игра всегда перепрыгивала функцию Game Over. Проверил - работает! Можно прыгать прямо на шипы и радоваться выживанию Также бессмертие работает и на курсоре мышки, пауке, птичке на 1-ом уровне. Других врагов не проверял, но подозреваю что и них всё будет гуд.
Update: Обнаружился неприятный баг чита - чит не дает подбирать сундучки, но это не такая большая проблема. Можно либо не подбирать их, либо перед взятием сундука временно отключать чит.
ВИДЕО СМОТРЕТЬ С УБАВЛЕННЫМ ЗВУКОМ, ТАМ ГРОМКО ОРУЩИЙ СКРИМЕР-ПАУК ВЫЛЕЗЕТ!!!!
Считаю что мне крупно повезло со взломом этой игры, но возможно кто-то что-то и вынесет для себя из этой статьи.