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

Высокий прыжок


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

Делаем высокий прыжок.

JumpHack


Инструменты:

1- Отладчик OLLYDBG v1.10

2- Cheat Engine 6.1

3- Игра к примеру Metro 2033

1-Запустим игру. Пока что до главного меню.

Подробнее об этом:

 

Для игр которые нельзя переключить в оконный режим в настройках самой игры.. находим файл конфигов и прописываем там вот это r_fullscreen off сохраняем и запускаем игру.

post-117-1324244835_thumb.jpg

2-Присоединим к игре отладчик. Ollydbg v1.10

Подробнее об этом:

 

 

Запускаем отладчик Ollydbg v1.10 выбираем меню File и там Attach.

post-117-1324245203,22_thumb.jpg

и в открывшемся окне выбираем наш процесс в данном случае Metro 2033.

post-117-1324245411,84_thumb.png

И нажимаем Attach ( Присоединится ).

post-117-1324245653,26_thumb.png

Как отладчик присоединится к игре он поставит игру на паузу ( в правом нижнем углу будет )

post-117-1324246011,69_thumb.jpg

Нажимаем клавишу F9 и снимаем игру с паузы продолжаем выполнение кода.

post-117-1324246186,08.jpg

3-Приступим к поиску и взлому.

Подробнее об этом:

 

 

Для начала выберем нужный нам модуль ( а нам нужно metro2033.exe ). В меню Veiw выбираем Executable modules

post-117-1324246744,55_thumb.png

в открывшимся окне выбираем требуемый нам модуль ( а нам нужно metro2033.exe ).

post-117-1324246904,93_thumb.jpg

После тока как выбрали нужный нам модуль двойным щелчком.. нужно проверить выбрался ли он... Если нет то повторить выбор заново...В заголовке главного окна должно появиться имя нашего модуля.

post-117-1324247148,88_thumb.jpg

Мы собираемся ломать высоту прыжка... для этого нам нужно найти соответствующею текстовую метку.. это будет нашей отправной точкой.. Часто разработчики в играх высоту прыжка помечают как "jump_speed" вот ее и будем искать.

Правой клавишей мыши в окне кода нашего модуля и выбираем Search for и там All referenced text strings

post-117-1324248131,51_thumb.png

Отладчик начнет искать все текстовые метки и по завершению поиска откроется новое окно с результатом...

post-117-1324248266,87_thumb.jpg

В этом окне правой клавишей мыши и в открывшемся меню Search for text

post-117-1324252219,82_thumb.png

Откроется поле для ввода текста.. вводим jump_speed без кавычек ( с кавычками не найдет ) ставим обе галочки и нажимает Ок. Отладчик найдет строчку с jump_speed... в игре она может быть не одна.. перемещение по списку в пределах найденного значения клавиши Ctrl+L.

post-117-1324248917,52_thumb.jpg post-117-1324248932,2_thumb.jpg

Как нашли нужную текстовую метку... двойной щелчок левой клавишей мыши по ней и переходим в код нашего модуля..

post-117-1324249170,75_thumb.jpg

Нам нужно поймать момент когда игра считывает параметры прыжка игрока.. а это происходит при загрузке...

Ставим бряк на наш код ( Простая точка остановки ставится клавишей F2 ) как сделали это наш адрес выделился другим цветом это и значит то что точка остановки поставлена...

post-117-1324249475,78_thumb.jpg

Что бы она сработала нужно начать загружать игру.. я просто выберу продолжить игру.. И практически сразу срабатывает наш бряк и отладчик ставит игру на паузу... и наш адрес еще раз выделяется...

post-117-1324250667,64_thumb.jpg

Когда произойдет остановка, нажимая клавишу F8 (но без фанатизма, не нужно жать 1000 раз, обычно то что нас интересует происходит рядом, в ближайших 10-15 инструкций, по крайней мере в большинстве случаев)

При прохождении по коду в ручную с помощью клавиши F8 находим вот это

post-117-1324250891,18_thumb.jpg

и обратите внимание на секцию которая находится слева по центру, между секциями №1 и №2, это информационная секция, которая упрощает жизнь, в ней часто видны цифры и не только, в удобоваримом виде. Так вот, как только вы в ней увидите SS=6.0000000 (это значение высоты прыжка заданное конфигурацией, в данном случае интересует именно это), нажмите на этой строчке правой кнопкой мыши, и выбирите "Modify value", в открывшемся окошке введите например 20.

После этого снимите бряк ( Простая точка остановки ставится клавишей F2 ) снимается этой же клавишей которой и ставилась..И нажмите F9 что бы отладчик снял игру с паузы и игра смогла продолжить загрузку...

Как игра загрузилась... пробуем прыгнуть... Оооо чудо мы стали прыгать высоко... Мы достигли нашей цели...ура...

4-Пишем скрипт. Используя Cheat Engine 6.1

Подробнее об этом:

 

 

Будем использовать инструкцию под адресом 00881B37

post-117-1324251621,83_thumb.jpg

Скрипт высокий прыжок Игра Metro 2033 v1.0.0.1

 
[ENABLE]
alloc(newmem,2048)
label(returnhere)

newmem:
mov [esi+74],(float)20
jmp returnhere

metro2033.exe+481B37:
jmp newmem
returnhere:

[DISABLE]
metro2033.exe+481B37:
movss [esi+74],xmm0
dealloc(newmem)

 

Этим скриптом мы подмениваем стандартный параметр прыжка на свой)))

P.S. Мы добились поставленной цели.. Плюсы этого метода то что функция прыжка получается как бы это сказать правильной что ли... то есть скорость набора высоты осталась прежней и обратно возвращается как раньше поменялось тока высота самого прыжка.... Минус то что работает тока при загрузке.. и сменить высоту прыжка можно будет тока при следующей загрузке... или при переходе из локации в локацию.

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

У меня есть подозрение, что ещё что-то интересное происходит в процедуре по адресу 0x00881B16, т.к. перед вызовом этой процедуры мы запихиваем в стек два аргумента, ("fp32" и "jump_speed"). [esp+C] сильно походит на [base address + offset], т.е. это какая-то структура, так что вполне вероятно, что процедура по указанному выше адресу кушает какой-то идентификатор ("fp32") и то, что ей надо сделать. А сделать ей надо "jump_speed", т.е. посчитать высоту прыжка.

А то фигня же какая-то получается - может я только в самом начале любимого уровня, хочется головой о потолок побиться, а приходится ждать загрузки следующего.

Но за труды - всё равно плюс. laugh.gif

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

Спс .. за плюс.

Неее.. Мы ловим момент когда игра считывает параметры игрока из текстовых документов в архиве игры... конфиги

Это выглядит вот так...

PUSH [перем]переменная_указывающая_на_файл
PUSH [текстовая_строка]"jump_speed"
CALL [функция]получить_параметр

По этому мы и работаем с кодом который после этих функций..

А как часто игра считывает эти параметры зависит от разработчиков... пример игра Сталкер Чистое Небо... да там еще до кучи и параметр стандартного прыжка тоже равен (float)6.0000 тк вот игра считывает этот параметр каждый раз после смерти...

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

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

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

5-Дополнение к статье.

Я вот сегодня подумал и решил дописать дополнение к статье Конечный результат хранится в esi+74))))

post-117-1324310325,71_thumb.jpg

поставим бряк на эту инструкцию movss [esi+74],xmm0 и начнем загружать игру...Сработал бряк отлично посмотрим что у нас в esi

post-117-1324310400,54_thumb.jpg

Простыми вычислениями мы получаем адрес 15D59920.. смотрим дамп там то что нам нужно...float 6.0000. Отлично снимаем бряк нажимаем ran=F9 До-загружаем игру и смотрим опять дамп... все ок .. по нашему адресу наше значение... Заходим в игру и ставим бряк на адрес ( на чтение ).. Срабатывает одна инструкция.. movss xmm1,[eax+000000A0]

post-117-1324310786,38_thumb.jpg post-117-1324310772,45_thumb.jpg

Пишем скрипт...


alloc(newmem,2048)
label(returnhere)

newmem:
push [eax]
mov [eax],(float)20
movss xmm1,[eax]
pop [eax]
jmp returnhere

metro2033.exe+4EE59B:
jmp newmem
nop
nop
nop
returnhere:

[DISABLE]
metro2033.exe+4EE59B:
movss xmm1,[eax+000000A0]
dealloc(newmem)
[ENABLE]

Скрипт пишется именно так... потому что в [eax+000000A0] хранится стандартный параметр прыжка float 6.00000.. и его трогать не надо .. так как если изменить его... то в стандарт привести его сможет тока загрузка .. но нам это не нужно...

Не правильно


movss xmm1,[eax+000000A0]
mov [eax+000000A0],(float)20

Правильно


mov [eax],(float)20
movss xmm1,[eax]
pop [eax]
push [eax]

P.S. Keng все ок ... теперь можно биться головой об потолок в любой момент.. когда захочется...))) B) B)

Спс.

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

Хорошее дополнение иногда игрок должен получить по голове чтоб придти в себя, а то бывает игрок играет полчаса не может проходить миссию к примеру раз по потолку перезагрузка мозга и всё.

Grom-Skynet в Олай перехватить такие фуНкции легче чем CE?

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

Хорошее дополнение иногда игрок должен получить по голове чтоб придти в себя, а то бывает игрок играет полчаса не может проходить миссию к примеру раз по потолку перезагрузка мозга и всё.

Grom-Skynet в Олай перехватить такие фуНкции легче чем CE?

CE ты просто не найдешь где и что ловить... вот как то так....)))

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

В Олай я еще не разобрался может на днях попробую подключить игру какую нибудь попробую юзать как раз твои статьи по Олай мне понадобится. :)

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

Grom-Skynet, твой пятый пост довольно хорош :):) Чем чаще будешь использовать подобные "витиеватые приемы" по установке определённых типов бряков на определённые адреса, тем больше ты овладеешь интуицией в создании очень сложных читов. Поздравляю B)

Как и Xipho я тоже сходу подумал про поток на АА-скриптах createthread("метка в выделенной памяти") и совсем забыл, что адрес из структуры может постоянно или с другой периодичностью читаться для установки прыжка при инициализации "person controller". Действительно надо ставить бряк на чтение и экспериментировать, что ты в принципе успешно сделал.

"person controller" это название условного класса кода по управлению 3D-моделью героя. Модель героя и этот класс инициализируются вместе с новой сценой. Данные прыжка, позиции 3D-модели, позиции камеры и другие устанавливаются из данных в ресурсах в структуру героя. Когда пользователь пытается прыгать, то читается адрес со значением высоты прыжка из этой структуры. Как-то так...

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

  • 5 месяцев спустя...

Прошел по статье Grom-Skynet_а (Статья оч. хорошая) загрузил игру в Ollydbg сделал высокий прыжок для MaxPayne и Max Payne 2, 8-) 8-)

Самое интересное, при выстреле по врагам враги улетают.

post-1568-0-29676000-1339682175_thumb.jp

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

  • 11 месяцев спустя...

что то не получается оконный режим.

r_fullscreen on изменил на r_fullscreen off.

В общем win8

после запуска возвращается on, в свойствах установил только чтение не помогает, и еще как выйти в меню, по умолчание не помогает.

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

  • 3 недели спустя...
  • 5 лет спустя...

функцию movement ищем и на на дмамп прыг пишем..... как ? 

superjumpHook:
copucodesuperjump:
lea rcx,[rbx + $12345678]
movss [rcx],xmm0
cmp [ksuperjump],0
jz @f
fld [pJump]
fmul dword[rcx]
fstp dword[rcx]
fld [pJump]
fmul dword[rcx - $4]
fstp dword[rcx - $4]
fld [pJump]
fmul dword[rcx - $8]
fstp dword[rcx - $8]
@@:
ret               

хоть так... через... movss чуть по другому будет......ток мой код не мореть.... там с копи офсета

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

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

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

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