partoftheworlD

[Bloodrayne 2 Demo] Cохранение/Восстановление(Телепорт)

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

Автор статьиWhitey

Перевел: partoftheworlD специально для gamehacklab.ru

Оригинальная cтатья

 

Необходимые инструменты:

  • Сканер памяти(Cheat Engine)
  • Отладчик(x32dbg)

 

Оглавление

  • Введение
  • Шаг 1 Поиск здоровья и получение нашей структуры
  • Шаг 2 Поиск координат нашего игрока
  • Шаг 3 Инъекция кода
  • Шаг 4 Код в трейнере

 

Введение:

В этом уроке мы собираемся сохранять/восстанавливать значения в Bloodrayne 2 Demo.

Такая опция предполагает, что пользователь, нажав на одну кнопку мог сохранить текущую позицию, а при нажатии на другую телепортировался в ранее сохраненную позицию. У вас должны быть хорошие навыки в поиске и отладке, если хотите выполнить этот урок. Я стараюсь вдаваться в подробности как могу, если вы будите следовать всем шагам, то у вас не возникнет никаких проблем.

 

Шаг 1 Поиск здоровья и получение нашей структуры

Ладно, я уверен вы знаете как искать значение здоровья. То, что мы хотим сделать это получить все указатели, потому что мы будем использовать один из них для нашей инъекции.

 

Открываем x32dbg...

Видим снизу консоль и вводим в неё bpm адрес, нажимаем Enter

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

 

Это те адреса, которые нам нужны, на самом деле их на много больше.

5BE285 : PUSH [EBX+39C4]
5BE2B5 :
5BE2D1 :
5BF30A :

Теперь ставим бряки на этих адресах по одному и смотрим на структуру внутри указателя, для того чтобы убедиться, что структура никогда не изменяется, так мы узнаем, что указатель работает только со здоровьем игрока.

 

Пишем в консоле: 

bpx 5BE285

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

 

5BE285 : PUSH [EBX+39C4]

Вы должны знать, как работает большинство игр. У вашего игрока, оружия, предметов есть свои структуры, таким образом в структуре вашего игрока будет все что использует ваш персонаж. Так, теперь получим координаты.

 

Шаг 2 Поиск координат нашего игрока

 

Есть много способов найти их, многие будут использовать долгий способ с поиском координат, но это не всегда работает. Быстрой и простой способ - использовать структуру игрока.

Этот указатель PUSH [EBX+39C4], EBX является началом структуры игрока, всякий раз, когда игра должна какую-нибудь информацию от игрока, она добавляет к EBX какое-нибудь смещение.

Например, ваше здоровье хранится в [EBX+39C4], сила в [EBX+34] и т.д. Надеюсь вы понимаете.

 

Так, теперь получим координаты, нам нужно установить бряк на выполнение на указатель здоровья и дамп нашей структуры.

 

 

Пишем в консоле:

bpx 5BE285 
d EBX

Теперь в окне дампа первым адресом будет наша структура. Будем наблюдать за байтами, которые изменяются в окне дампа во время движения. В окне данные будут выглядеть так.

600001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
600002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Координаты хранятся так:

600001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
600002 00 00 11 11 11 11 22 22 22 22 33 33 33 33 00 00

1 = X(первая координата)
2 = Y(вторая координата)
3 = Z(третья координата)

И так, проделав эти шаги мы нашли 3 DWORD значения в 2 строка которые изменяются, когда наш герой двигается. Получили следующие смещения. 34,38,3C.

 

[PlayerStructure+34]  = первая координата
[PlayerStructure+38]  = вторая координата
[PlayerStructure+3C] = третья координата

 

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

 

 

Шаг 3 Инъекция кода

 

Что нам нужно для инъекции.

  • Место под код
  • 2 пустых адрес для установки 2-х флагов
  • 3 пустых адрес для хранения сохраненных координат.

 

Ладно, для начала найдем большое место под код  т.к .у нас будет большая инъекция.

 

5BE285: JMP CODE CAVE        | ---------- Оригинальная инструкция для прыжка в наш код
NOP                          | ---------- балансировка байт
PUSHAD                       | ---------- сохраняем регистры
CAVE: PUSH [EBX+39C4]        | ---------- Оригинальная инструкция сохраняющая регистр
CMP [FLAG1],1                | ---------- проверка, если наша кнопка сохранения позиции нажата
JNE SHORT                    | ---------- если кнопка не нажата, прыгает восстановленной оригинальной инструкции, если нажата пропускаем.
MOV [FLAG1],0                | ---------- устанавливаем 0 нашему флагу, чтобы код не повторялся
MOV ECX,3                    | ---------- Установим значение счетчика 3
LEA EDI,[STATIC1]            | ---------- Загрузим начальное значение в EDI
LEA ESI,[EBX+34]             | ---------- Загрузим первую координату в ESI
REP MOVSD                    | ---------- Цикл пока ecx не будет равно 0
CMP [FLAG2],1                | ---------- Сравниваем, если кнопка восстановления нажата
JNE TO END                   | ---------- если нет прыгаем в конец скрипта
MOV [FLAG2],0                | ---------- устанавливаем 0 нашему флагу, чтобы код не повторялся 
MOV ECX,3                    | ---------- Установим значение счетчика 3
LEA EDI,[EBX+34]             | ---------- Загрузим начальное значение в EDI
LEA ESI,[STATIC1]            | ---------- Загрузим первую координату в ESI
REP MOVSD                    | ---------- Цикл пока ecx не будет равно 0
END:                         | ---------------------
POPAD                        | ---------- восстанавливаем регистры
                             | ---------- И возвращаемся в игровой цикл 

 

Очень просто, хех?

 

Шаг 4 Код в трейнере

 

Ладно все что вам нужно сделать это,

Для кнопки сохранения, инжектировать весь код и установить первому флагу 1.

Для кнопки восстановления, инжектировать весь код и установить второму флагу 1.

 

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

4

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


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

Пока лучше пользоваться старым тегом кода (<>), так как новый еще не доработан, и на фронтенде не работает, только в редакторе пока.

0

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


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

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

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

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

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


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

Войти

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


Войти сейчас