Jump to content
Sign in to follow this  
V3ct0r

Полная карта местности для региона

Recommended Posts

Как известно, полную карту имеют только основные регионы (Аскарон, Магический океан и Великий синий океан). В данной статье я расскажу и покажу как можно сделать полную карту для любого региона и местности:

020b54ee53bft.jpg0d3cc297594ft.jpgddc13d958c12t.jpg

 

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

f34093ad7612.png

 

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

 

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

  1. Отладчик OllyDbg v1.10;
  2. GameServer.exe (Я буду работать с GameServer из сборки PKO 1.38);
  3. Внимательность и терпение :smile:

 

Редактируем GameServer.exe:
1) Запустите GameServer.exe. Затем запустите OllyDbg. В OllyDbg выполните команду File => Attach. В окошке "Select process to attach" выберите процесс Вашего GameServer.exe.
Откроется окно "CPU" отладчика:

3e3d626d724ft.jpg

 

2) В панели инструментов нажмите кнопку "E" (b5697137603e.png) или сочетание клавиш Alt + E. Появится окно "Executable modules".
В нем выберите модуль "GameServ":

8e6c85f969f5t.jpg

 

Откроется окно "CPU" для модуля "GameServ". Правым кликом вызовите контекстное меню и выберите команду Analysis => Analyse code (сочетание клавиш ALT + A)

30546225d73bt.jpg

 

3) Перейдите по адресу 0x005B25A4.
Для этого выполните команду Go to => Expression из контекстного меню:

ffd0cb853510t.jpg

 

В появившемся окне "Enter expression to follow" введите значение "0x005B25A4" и нажмите кнопку "ОК"

c0ff7f815525.png

 

В результате Вы должны оказаться на адресе 0x005B25A4:

f25a3aa3e1cbt.jpg

 

4) Теперь Вам нужно ввести названия карт для которых требуется сделать полную карту местности.

 

Список стандартных карт:

garner — Аскарон
magicsea — Магический Океан
darkblue — Великий Синий Океан
lonetower — Одинокая башня
eastgoaf — Серебрянные шахты, заброшенные шахты, логово черного дракона, логово черного дракона 2
secretgarden — Сад Эдель
darkswamp — Темная топь
abandonedcity — Забытый Город
abandonedcity2 — Забытый Город 2
abandonedcity3 — Забытый Город 3
puzzleworld — Мир Демонов
puzzleworld2 — Мир Демонов 2
teampk — Арена
jialebi — Небеса, база флота, остров сокровищ, остров скелетов
garner2 — Серебряный Хаос
hell* — абаддоны
guildwar — Священная война
guildwar2 — Маленькая священная война
leiting2 — Мираж Громограда 
shalan2 — Мираж Шайтана 
binglang2 — Мираж Ледыни 
yschurch — Церковь 
07xmas — 2007 Новогодняя деревня 
sdBoss — Остров Боссов
07xmas2 — Снежная война
prisonisland — Тюрьма
winterland — Остров Зимы 
mjing1 — 1-ый край Аврор
mjing2 — 2-ой край Аврор
mjing3 — 1-ый край Тьмы
mjing4 — 2-ой край Тьмы
starena* — Арены
heilong — Сундук черного дракона
darkhouse — Дом тьмы 
mingyun — Комната судьбы 
PKmap — Новая арена

Для примера, я сделаю полные карты местности для Острова Зимы (winterland), Темной топи (darkswamp) и Забытого Города 1 (abandonedcity)

Выделите достаточное количество байт. Например, для того, чтобы закодировать "winterland" нужно 11 байт (10 байт символы; 1 байт - нулевой, конец строки).

de275ce81136.png

 

Затем в контекстном меню выберите команду Binary => Edit (CTRL + E)

c2cae5d13ad1.png

 

Появится окошко "Edit code at 005B25A4". В нем введите "winterland" и нажмите кнопку "ОК"

c33a798a51fc.png

 

В результате получится что-то вроде этого:

8ecd7204d37f.png

 

Проанализируйте код (Analysis => Analyse code или сочетание клавиш ALT + A):

1c6614403111.png

 

Выполните данное действие для всех требуемых карт:

03834d305a85.png

 

5) Итак, мы записали 3 строки:

winterland по адресу 0x005B25A4
darkswamp по адресу 0x005B25AF
abandonedcity по адресу 0x005B25B9

Запомните эти адреса. У Вас они могут отличаться.

 

6) Теперь Вам для каждой карты надо написать код, который добавит ее в список карт, имеющих полную карту местности:

PUSH Ширина карты (x)
PUSH Длина карты (y)
PUSH Адрес строки, в которой находится название карты
MOV ECX,DWORD PTR SS:[EBP-14]
ADD ECX,10A4
CALL 0x005551A0

(!) Ширина и длина карты в шестнадцатеричной (HEX) системе счисления.

 

Например, для Острова Зимы код будет выглядеть так:

PUSH 898
PUSH 708
PUSH 0x005B25A4
MOV ECX,DWORD PTR SS:[EBP-14]
ADD ECX,10A4
CALL 0x005551A0

Для Темной топи:

PUSH 220
PUSH 5D8
PUSH 0x5B25AF
MOV ECX,DWORD PTR SS:[EBP-14]
ADD ECX,10A4
CALL 0x005551A0

Для Забытого города:

PUSH 180
PUSH 180
PUSH 0x005B25B9
MOV ECX,DWORD PTR SS:[EBP-14]
ADD ECX,10A4
CALL 0x005551A0

Q: Как узнать размер карты?
A: Открываем клиентский .map файл в HEX-редакторе:

549d28e92a46.png

4 байта, начиная с 4-го, отвечают за ширину, а 4 байта, начиная с 8-го, - за длину.

 

0000089816 = 220010
0000070816 = 180010

 

Получается, что карта "Остров Зимы" (winterland) имеет размеры 2200 x 1800

Итак, записываем код. Я буду записывать его с адреса 0x005B25CA. Этот адрес так же надо запомнить. Щелкаем двойным кликом по строке, которая соответствует данному адресу. Появляется окошко "Assemble at 5B25CA". В него забиваем первую инструкцию:

PUSH 898

и нажимаем кнопку "ОК"

d9844acf1c98.png

 

Получаем:

6b3209e3584a.png

 

затем

PUSH 708

и так далее:

ead7683540f1.png

 

Выполняем данное действие для всех требуемых карт:

2264a94932f3.png

 

7) Затем нужно задействовать наш код. Идем по адресу 0x004ED656 и заменяем

PUSH 1000

на

JMP 0x005B25CA

Помните я просил запомнить адрес 0x005B25CA? У Вас он может отличаться.

 

Было:

6863861ba39d.png

 

Стало:

6ea6c4d00bf2.png

 

8) Далее нужно вернуться к нашему коду в конце и дописать

PUSH 1000
JMP 0x004ED65B

1a6954dea4f2.png

 

На этом редактирование GameServer.exe закончено :smile:

 

9) Теперь Вам нужно сохранить изменения. Для этого вызовите команду контекстного меню Copy to executable => All modifications:

19bb131fcb49.png

 

Появится окошко "Copy selection to executable file". В нем нажимаем кнопку "Copy all". После этого появится окно "File <Путь до Вашего GameServer.exe>". Закрываем его. В окне "File changed" нажимаем кнопку "Yes" и указываем название файла, в который нужно сохранить.

10) После этого нужно протестировать модифицированный GameServer.exe и убедиться, что все работает как надо.

  • Like 4

Share this post


Link to post
Share on other sites

Вектор, вы вдоль и поперёк изучили при помощи ольки game.exe?
Пожалуйста всё что знаете/сделали напишите мне в лс.

Share this post


Link to post
Share on other sites
21 час назад, pirate сказал:

Вектор, вы вдоль и поперёк изучили при помощи ольки game.exe?
Пожалуйста всё что знаете/сделали напишите мне в лс.

Все, что я знаю и сделал, я выкладываю здесь и выкладывал на МД


Share this post


Link to post
Share on other sites
1 час назад, V3ct0r сказал:

Все, что я знаю и сделал, я выкладываю здесь и выкладывал на МД

В нехороших целях умете использовать game.exe?

Share this post


Link to post
Share on other sites
13 часа назад, pirate сказал:

В нехороших целях умете использовать game.exe?

В "нехороших" целях это в каких? В любом случае, я не собираюсь рассказывать про уязвимости. Иначе нехорошие люди начнут портить жизнь администраторам игровых серверов и обычным игрокам.

 

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


Share this post


Link to post
Share on other sites
2 минуты назад, V3ct0r сказал:

В "нехороших" целях это в каких? В любом случае, я не собираюсь рассказывать про уязвимости. Иначе нехорошие люди начнут портить жизнь администраторам игровых серверов и обычным игрокам.

 

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

Хорошая идея.


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
12 часа назад, V3ct0r сказал:

В "нехороших" целях это в каких? В любом случае, я не собираюсь рассказывать про уязвимости. Иначе нехорошие люди начнут портить жизнь администраторам игровых серверов и обычным игрокам.

 

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

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

Share this post


Link to post
Share on other sites

@pirate не беспокойтесь, через Game.exe ничего нельзя рисовать.

 

Если что и изучать в плане безопасности, так это сервер. Например, есть пара SQL-инъекций: одна в AccountServer.exe, вторая в GroupServer.exe, но мы знаем как их исправить.

 

Мы отходим от темы топика. Все вопросы связанные с безопасностью в соответствующий топик, пожалуйста.

  • Like 1

Share this post


Link to post
Share on other sites
On 11/6/2021 at 1:43 PM, Mesut said:

how about the game.exe 1.36 pls i need offset line

What specific offset are you interested in? (Какое смещение Вас интересует?)


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.

Sign in to follow this  

×
×
  • Create New...