Модификация клиента Jade Dynasty
Инструкция по модификации игрового клиента Jade Dynasty
multi hack, unfreeze, jump etc.
English variant here.
Как обычно, всю работу будем проделывать при помощи отладчика OllyDbg (конечно же, можно использовать любой дебаггер, принцип работы от этого не измениться).
Note: Адреса функций и участки кода взяты из клиента с апдейтом 22 (в любом случае, основной исполняемый файл меняется не так часто)
1. Убираем надоедливую надпись «снимок экрана был сделан и бла-бла-бла» при нажатии Print Screen
Открываем исполняемый файл клиента Jade Dynasty «elementclient.exe» в дебаггере (или просто присоединяем отладчик к уже запущенному процессу). В окне CPU “контекстное меню -> Search for -> Referenced string”
В открывшемся окне “Text strings referenced”, опять через контекстное меню вызываем поиск текста “правая кнопка -> Search for text” и вводим “screenshot” в диалоговом окнеinto.
Ищем данное выражение, т.к. знаем, что клиент всегда сохраняет снимки экрана в папке “Screenshot”.
Выбираем найденную строку и нажимаем Enter для перехода к соответствующей инструкции в окне CPU.
И так, чуть выше мы видим формирование имени файлы со снимком экрана (что тоже можно изменить), значит мы нашли нужную нам функцию, отвечающую за скриншоты. Для проверки, можно перейти к самому началу данной функции, поставить точку останова (break point, BP), вернуться в игру и нажать Print Screen. Отладчик должен остановить выполнение кода клиента в том месте, где установлена BP
Идем дальше. Проследив за работой, отмечаем, что в самом конце, когда файл создан, есть еще одно обращение к функции.
Выделяем данную инструкцию и нажимаем Enter (переходим к началу вызываемой функции)
Вот и нашелся ненужный нам кусок. Инструкция JE в самом начале нам совсем не нужна, мы должны полностью пропустить последующий код. Посему, вместо JE пишем JMP
004192A3 |. 0F84 31010000 JE 004193DA
->
004192A3 /E9 32010000 JMP 004193DA
2. Убираем здания
Данная модификация полностью отключит отрисовку зданий. В ранних версиях данного движка, подобное действие давало возможностью спокойно ходить через все препятствия, но данный баг закрыли (он не работает ни в JD, ни в PW).
Процедура поиска нижеследующего кода долгая, поэтому, можно воспользоваться либо приведенными адресами (для русского клиента), либо, при использовании клиентов других версий или серверов, вызвать поиск бинарной строки: 51 56 8B F1 57 33 FF D9
00432940 /$ 51 PUSH ECX ; elementclient.00432940(guessed Arg1)
00432941 |. 56 PUSH ESI
00432942 |. 8BF1 MOV ESI,ECX
00432944 |. 57 PUSH EDI
00432945 |. 33FF XOR EDI,EDI
00432947 |. D946 10 FLD DWORD PTR DS:[ESI+10]
0043294A |. D80D B84AA000 FMUL DWORD PTR DS] ; FLOAT 0.5000000
00432950 |. D95C24 08 FSTP DWORD PTR SS:[LOCAL.0]
00432954 |> D94424 08 FLD DWORD PTR SS]
00432958 |. D804BD 103EAA FADD DWORD PTR DS:[EDI*4+0AA3E10]
0043295F |. D85C24 10 FCOMP DWORD PTR SS:[ARG.1]
00432963 |. DFE0 FSTSW AX
00432965 F6C4 01 TEST AH,01
--> 00432968 75 65 JNE SHORT 004329CF
0043296A D94424 10 FLD DWORD PTR SS:[ESP+10]
0043296E |. D81CBD 103EAA FCOMP DWORD PTR DS:[EDI*4+0AA3E10]
00432975 |. DFE0 FSTSW AX
00432977 |. F6C4 41 TEST AH,41
0043297A |. 0F84 6E010000 JE 00432AEE
Меняем инструкцию JNE на JMP
00432968 75 65 JNE SHORT 004329CF
->
00432968 EB 65 JMP SHORT 004329CF
И больше мы не увидим здания.
3. Убрать ограничение для расстояния между камерой и игроком
Тоже простая вещь. Можно, используя Cheat Engine, отыскать текущее значение положения камеры относительно чара. Максимальная дистанция будет равна 12. Далее, возвращаемся к дабаггеру и отыскиваем все значения с плавающей запятой = 12 (т.е. 00 00 40 41). Можно поставить на каждой найденной инструкции BP, вернуться в игру и покрутить скроллом.
В целом, будет найден следующий код
00409DB8 |. 885E 06 MOV BYTE PTR DS:[ESI+6],BL
00409DBB |. D985 F7000000 FLD DWORD PTR SS]
00409DC1 |. D846 40 FADD DWORD PTR DS:[ESI+40]
00409DC4 |. D956 40 FST DWORD PTR DS:[ESI+40]
00409DC7 |. D81D F04CA000 FCOMP DWORD PTR DS] ; FLOAT 12.00000
00409DCD |. DFE0 FSTSW AX
00409DCF |. F6C4 41 TEST AH,41
--> 00409DD2 |. 75 03 JNE SHORT 00409DD7
00409DD4 |. 894E 40 MOV DWORD PTR DS:[ESI+40],ECX
00409DD7 |> 8B07 MOV EAX,DWORD PTR DS:[EDI]
00409DD9 |. 3BC3 CMP EAX,EBX
00409DDB |. 0F85 EB000000 JNE 00409ECC
00409DE1 |. 8957 14 MOV DWORD PTR DS:[EDI+14],EDX
00409DE4 |. D947 18 FLD DWORD PTR DS:[EDI+18]
00409DE7 |. D947 14 FLD DWORD PTR DS:[EDI+14]
00409DEA |. D947 10 FLD DWORD PTR DS:[EDI+10]
где FCOMP DWORD PTR DS] производит сравнение величин с плавающей запятой.
Остается изменить JNE на JMP
00409DD2 |. 75 03 JNE SHORT 00409DD7
->
00409DD2 EB 03 JMP SHORT 00409DD7
и получить неограниченное движение камеры.
4. Jump hack, или прыгаем сколько будет угодно
5. Размораживание видео
(c) Dwar
копирование материала разрешено только с указанием автора и адреса источника