Jump to content
V3ct0r

Видимость названий объектов и их жизней без нажатой клавиши Shift

Recommended Posts

Видимость названий объектов и их жизней без нажатой клавиши Shift

 

Всем привет! В данном гайде я расскажу как сделать отображение названий монстров, NPC и ников персонажей, а также их жизней без нажатой клавиши Shift или взятия в цель:

 

797b3c2df42e.png

 

Вам понадобится:

1) Game.exe из папки system Вашего клиента;

2) Отладчик OllyDbg. Я буду работать в версии 1.10.

 

Чтобы сделать данную модификацию, необходимо пропатчить Game.exe.

Примечание: В этой статье я показываю лишь принцип того, как произвести такую модификацию. Иными словами, инструкции и их адреса у Вас могут отличаться от тех, что я привожу в гайде. Я буду работать с Game.exe из 1.39 ру. оф. клиента.

 

Итак, нам нужно найти в Game.exe код, который обрабатывает нажатие клавиши Shift. У данной клавиши есть код 16 (0x10 в шестнадцатеричной системе счисления). Также нам известно, что в WinAPI есть функция GetKeyState(int nVirtKey), с помощью которой можно узнать, нажата ли клавиша с кодом nVirtKey. Заходим в игру (на карту) и открываем Game.exe в OllyDBG и начинаем искать вызовы функции GetKeyState(). Функция находится в библиотеке USER32.DLL, ставим на нее Break Point (F2).

bcab8e57ae3e.jpg

 

Break Point сразу же срабатывает. Смотрим на стек и видим что функция была вызвана из библиотеки MindPower3D_D8R.dll. Это библиотека движка игры.

da0ad31fb53f.jpg

 

Переходим по адресу 0x101290D4 (адрес возврата из функции GetKeyState) и видим следующий код:

d865c67e2604.jpg

 

101290C0 PUSH EBP
101290C1 MOV EBP,ESP
101290C3 SUB ESP,44
101290C6 PUSH EBX
101290C7 PUSH ESI
101290C8 PUSH EDI
101290C9 MOV DWORD PTR SS:[EBP-4],ECX
101290CC PUSH 10
101290CE CALL DWORD PTR DS:[<&USER32.GetKeyState>>
101290D4 MOVSX EAX,AX
101290D7 AND EAX,0FF00
101290DC POP EDI
101290DD POP ESI
101290DE POP EBX
101290DF MOV ESP,EBP
101290E1 POP EBP
101290E2 RETN

Видим, что в качестве параметра GetKeyState() передается 0x10 - код клавиши Shift. Возможно, данная функция по адресу 0x101290C0 проверяет, нажата ли клавиша Shift. Назовем ее IsShiftPress().

Далее смотрим где эта функция вызывается:

d18482897d11.jpg

Ставим Break Point на каждый вызов и видим, что функция IsShiftPress() постоянно вызывается по адресам 0x004CC3E2, 0x004D7DE4 и 0x004D7E41. Начинаем с адреса 0x004CC3E2. Переходим на него и видим следующий код:

004CC3E2  CALL DWORD PTR DS:[IsShiftPress]
004CC3E8  TEST EAX,EAX
004CC3EA  MOV EBP,2
004CC3EF  JE SHORT 004CC45D
004CC3F1  MOV EAX,DWORD PTR DS:[ESI+124]
004CC3F7  XOR EDI,EDI
004CC3F9  TEST EAX,EAX
004CC3FB  JLE 004CC62A
004CC401  MOV EAX,DWORD PTR DS:[6705C8]

Если Shift не нажат, то происходит прыжок на адрес 0x004CC45D (TEST EAX,EAX - сравнение регистра EAX с 0). Затираем этот прыжок с помощью инструкций NOP, чтобы данный код выполнялся независимо от того, нажат Shift или нет:

004CC3E2  CALL DWORD PTR DS:[IsShiftPress]
004CC3E8  TEST EAX,EAX
004CC3EA  MOV EBP,2
004CC3EF    NOP
004CC3F0    NOP
004CC3F1  MOV EAX,DWORD PTR DS:[ESI+124]
004CC3F7  XOR EDI,EDI
004CC3F9  TEST EAX,EAX
004CC3FB  JLE 004CC62A
004CC401  MOV EAX,DWORD PTR DS:[6705C8]

52c512bc0e73.jpg

Переходим в игру и видим, что название монстров/персонажей и их жизни отображаются без нажатого Shift'a, чего мы и хотели добиться. Теперь осталось сохранить изменения в Game.exe. Щелкаем правой кнопкой мыши по коду в отладчике, в контекстном меню выбираем Copy to executable -> All modifications и сохраняем Game.exe.
 

  • Like 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...