V3ct0r 2,117 Report post Posted October 14, 2016 Видимость названий объектов и их жизней без нажатой клавиши Shift Всем привет! В данном гайде я расскажу как сделать отображение названий монстров, NPC и ников персонажей, а также их жизней без нажатой клавиши Shift или взятия в цель: Вам понадобится: 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). Break Point сразу же срабатывает. Смотрим на стек и видим что функция была вызвана из библиотеки MindPower3D_D8R.dll. Это библиотека движка игры. Переходим по адресу 0x101290D4 (адрес возврата из функции GetKeyState) и видим следующий код: 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(). Далее смотрим где эта функция вызывается: Ставим 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] Переходим в игру и видим, что название монстров/персонажей и их жизни отображаются без нажатого Shift'a, чего мы и хотели добиться. Теперь осталось сохранить изменения в Game.exe. Щелкаем правой кнопкой мыши по коду в отладчике, в контекстном меню выбираем Copy to executable -> All modifications и сохраняем Game.exe. 2 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites