Jump to content

V3ct0r

Administrators
  • Content Count

    1,539
  • Joined

  • Days Won

    255

Everything posted by V3ct0r

  1. You need specify the correct path to library utild.lib in project settings (VC++ directories -> Library directories). Before doing this, make sure you have this library at all. If it is missing, then it should be compiled first.
  2. Hello, @xEvo7! Your website is down. Does the server still operating?
  3. Hello friends! I want to show you some interesting things that I have done recently. 1. Numeric skill bar 1 - 0 Expands the set of shortcuts for activating skills and items: together with the F1-F12 keys, you can use the number keys 1 - 0. 2. Chat server and chat client My task was to develop an interface in the form of a chat server for exchanging messages with a game server. The chat server receives information from the client about the game server (address, port, version) and about the user account (login, password). Then it connects to the game server and logs into the account, after which it sends the client a list of characters. The client should select a character and send it to the chat server so that the chat server can enter the game world with it. After these actions, the chat server starts receiving messages from the client and forwarding messages received from the game world to it. The chat client can be any application that transmits data over TCP: Windows application, website, Android application, and so on. To test the interface, a lightweight client was developed with which you can exchange messages with the game world from Windows desktop environment: With the help of such a system, you can, for example, create real-time chat with the game on your website or develop Android and iOS clients for communication between players. 3. Setting to display the names of characters, monsters, NPC A checkbox is added to the game settings menu to enable or disable the display names of game objects. 4. Additional characteristics of the character In the character window, you can display various characteristics that are hidden, for example, movement speed, chance of a critical hit, luck and others. 5. Respawn of bosses There is a problem when after killing a boss like Black Dragon the server restarts. Despite the fact that it takes a long time to revive the boss, the boss appears immediately after the server starts, which allows some players to gain an advantage. That is, in a short period of time, the boss can be killed several times. A modification has been developed for GameServer.exe that fixes the problem. 6. Discord integration A new chat channel is added to the game to communicate with other players on Discord. The game client connects to a special program, which, on the one hand, is a server for game clients, receives messages from them to be sent to the Discord server and sends them messages received from the Discord server, and on the other, a client-bot that interacts with the Discord API. On the Discord server, messages from the game world are displayed on behalf of the bot.
  4. Всем привет! Хочу показать Вам некоторые интересные вещи, которые я недавно сделал. 1. Цифровая панель умений 1 - 0 Расширяет набор быстрых клавиш для активации навыков и предметов: вместе с клавишами F1-F12 можно использовать клавиши цифр 1 - 0. 2. Чат-сервер и чат-клиент Передо мной была поставлена задача написать интерфейс в виде чат-сервера для обмена сообщениями с игровым сервером. Чат-сервер принимает от клиента информацию об игровом сервере (адрес, порт, версию) и об аккаунте пользователя (логин, пароль). Далее он подключается к игровому серверу и входит в аккаунт, после чего отправляет клиенту список персонажей. Клиент должен выбрать персонажа и отправить его чат-серверу, чтобы последний вошел с его помощью в игровой мир. После этих действий чат-сервер начинает принимать сообщения от клиента и пересылать ему сообщения, полученные из игрового мира. Клиентом чат-сервера может быть любое приложение, которое передает данные по протоколу TCP: приложение Windows, веб-сайт, приложение Android и так далее. Для тестирования интерфейса был разработан легкий клиент, с помощью которого можно обмениваться сообщениями с игровым миром из окружения рабочего стола Windows: С помощью такой системы можно, например, создать чат c игрой в реальном времени на Вашем сайте или разработать Android- и iOS-клиенты для общения между игроками. 3. Настройка для отображения имен персонажей, монстров, NPC В меню настроек игры добавляется флажок, который позволяет включать и отключать отображение названий игровых объектов. 4. Отображение дополнительных характеристик персонажа В окне персонажа можно отображать различные характеристики, которые скрыты, например, скорость бега, шанс критического попадания, удачу и другие. 5. Возрождение боссов Существует проблема, когда после убийства босса, например, Черного дракона, происходит перезапуск сервера. Несмотря на то, что воскрешение босса занимает продолжительное время, босс появляется сразу после запуска сервера, что позволяет некоторым игрокам получить преимущество. То есть, за короткий интервал времени босс может быть убит несколько раз. Была разработана модификация для GameServer.exe, которая исправляет эту проблему. 6. Канал чата Discord В игру добавляется новый канал чата для общения с другими игроками в Discord. Игровой клиент подключается к специальной программе, которая, с одной стороны является сервером для игровых клиентов, принимает от них сообщения для отправки на сервер Discord и передает им сообщения, полученные от сервера Discord, а с другой - клиентом-ботом, который взаимодействует с API Discord. На сервере Discord сообщения из игрового мира отображаются от имени бота.
  5. GameServer.exe перезапустил? Я тестировал этот код, у меня работает. Как вариант, вместо скрипта в functions.lua, добавить код: if (id == 1 or id == 2 or id == 3) then SetChaAttr(character, ATTR_LIFETP, 24) RefreshCha(character) end В начало функции ObligeCompleteMission() из файла GameServer\resource\script\MisSdk\MissionSdk.lua
  6. Hello! The user group system has been updated. The "Advanced user" group was introduced, which has the same access rights to the forum and its functionality as the "Users" group until recently. To get into the "Advanced user" group, you must fulfill several conditions: 0) Register on the forum; 1) Confirm email address after registration; 2) At least 10 days must pass from the moment of registration on the forum; 3) The user must have at least 10 posts. If these conditions are met, the user is automatically transferred from the "User" group to the "Advanced user" group. For the changes to take effect for already registered users, you need to re-enter the forum. Restrictions are introduced for the "User" group: 1) You cannot send private messages; 2) You can not write posts in the profile (status updates); 3) You cannot edit posts; 4) You cannot attach attachments; 5) Only 10 reactions per day can be given. Thank you for your attention!
  7. Привет! Система групп пользователей обновлена. Была введена группа "Продвинутый пользователь", которая обладает теми же правами доступа к форуму и его функционалу, что и группа "Пользователи" до недавнего времени. Чтобы попасть в группу "Продвинутый пользователь" необходимо выполнить несколько условий: 0) Зарегистрироваться на форуме; 1) Подтвердить email-адрес после регистрации; 2) С момента регистрации на форуме должно пройти не менее 10 дней; 3) У пользователя должно быть не менее 10 постов. При соблюдении данных условий пользователь автоматически переводится из группы "Пользователь" в группу "Продвинутый пользователь". Чтобы изменения вступили в силу для уже зарегистрированных пользователей необходимо перезайти на форум. Для группы "Пользователь" вводятся ограничения: 1) Нельзя отправлять личные сообщения; 2) Нельзя писать посты в профиле (обновления статуса); 3) Нельзя редактировать посты; 4) Нельзя прикреплять вложения; 5) Можно давать только 10 реакций в день. Благодарю за внимание!
  8. Hello friends! There have been changes in the system of user groups: 1) "Moderators" group is returned. The forum is currently recruiting moderators; 2) "Community" group no longer has moderation rights. User groups have been updated: Moderators These guys are keeping order on the forum: @Snowfall, @Dan, @patrick13. Server administrator They are currently have game projects and thanks to them our game lives on: @Faller, @estrangulador, @Fisal Moha, @Phai, @Sultan, @Hard Wood, @xEvo7, @emofc, @Дракан, @Buccaneers Online, @V1k1NGO, @noanshadow, @luamaster, @Pirate X-Z, @NobleNutz, @[email protected], @Kraken Online, @Awatawa, @K1D0, @Chudik, @Kara Online, @HappinessMAPKO, @Tempest, @Vehd, @kiberhack, @Dimasik, @jordan. Community Made a great contribution to the development of the forum and the community as a whole: @Graf, @BETEP/macs509, @Fomin, @NMS3RR, @1g0rS1lv4, @small666, @yagura2k, @Snre3n, @wolfenx, @Duduf, @Angelix, @aleksandr, @mkhzaleh, @Lua, @patrick13, @Danny, @Eviles, @Greaux, @Engrain, @GustavoHMA, @cpworkerz, @xSeth, @e1mer, @Tera, @Kovu, @Spidpex, @Madwizard, @DangThao, @Ximboliex, @Jap, @Totoka, @Billy, @Foxseiz, @Rinor, @Vasil, @FapFap, @Shako, @blazi10, @Lucky, @Darling, @Home, @Nobre, @Jones, @Onioni, @OldHero, @Anthoni, @x3w0r, @flamyman1412, @BlackBarba, @J0k3r, @iZae, @RedMAN, @saa0d, @DevMorgan, @Knight, @XXD, @Xeon, @Wrexor, @deguix, @Blanquitoh, @mangojkee, @Gamez Pirates, @Masuka00, @Silfro, @MonkeyCode. Thank you for attention!
  9. Всем привет! В системе групп пользователей произошли изменения: 1) Возвращена группа "Модераторы". В данный момент на форуме идет набор модераторов; 2) Группа "Комьюнити" более не обладает модераторскими правами. Группы пользователей были обновлены: Модераторы Эти парни охраняют порядок на форуме: @Snowfall, @Dan, @patrick13. Администраторы сервера Они в данный момент держат игровые проекты и благодаря им наша игра живет: @Faller, @estrangulador, @Fisal Moha, @Phai, @Sultan, @Hard Wood, @xEvo7, @emofc, @Дракан, @Buccaneers Online, @V1k1NGO, @noanshadow, @luamaster, @Pirate X-Z, @NobleNutz, @[email protected], @Kraken Online, @Awatawa, @K1D0, @Chudik, @Kara Online, @HappinessMAPKO, @Tempest, @Vehd, @kiberhack, @Dimasik, @jordan. Комьюнити Внесли большой вклад в развитие форума и сообщества в целом: @Graf, @BETEP/macs509, @Fomin, @NMS3RR, @1g0rS1lv4, @small666, @yagura2k, @Snre3n, @wolfenx, @Duduf, @Angelix, @aleksandr, @mkhzaleh, @Lua, @patrick13, @Danny, @Eviles, @Greaux, @Engrain, @GustavoHMA, @cpworkerz, @xSeth, @e1mer, @Tera, @Kovu, @Spidpex, @Madwizard, @DangThao, @Ximboliex, @Jap, @Totoka, @Billy, @Foxseiz, @Rinor, @Vasil, @FapFap, @Shako, @blazi10, @Lucky, @Darling, @Home, @Nobre, @Jones, @Onioni, @OldHero, @Anthoni, @x3w0r, @flamyman1412, @BlackBarba, @J0k3r, @iZae, @RedMAN, @saa0d, @DevMorgan, @Knight, @XXD, @Xeon, @Wrexor, @deguix, @Blanquitoh, @mangojkee, @Gamez Pirates, @Masuka00, @Silfro, @MonkeyCode. Благодарю за внимание!
  10. Hello friends! Section with servers advertising was cleaned again. Abandoned threads and servers with broken website links have been removed. If you have created a topic with an advertisement for your server on our forum, then I ask you to keep the topic updated from time to time. Thank you for your attention!
  11. Всем привет! Раздел с рекламой серверов был снова очищен. Удалены заброшенные темы и сервера с неработающими сайтами. Если Вы создали тему с рекламой Вашего сервера на нашем форуме, то прошу время от времени держать форум в курсе событий. Благодарю за внимание!
  12. Meet another moderator @Perseus!
  13. V3ct0r

    Game.exe Info

    Updated the program. Returned the graphical user interface, fixed incorrect reading of some versions of Game.exe and now, in addition to viewing, you can also edit parameters in Game.exe: startup parameter, version and port. Download @Graf, @Billie, @cpworkerz, @dominic363
  14. Обновил программу. Вернул графический интерфейс пользователя, исправил некорректное чтение некоторых версий Game.exe и теперь кроме просмотра также можно редактировать параметры в Game.exe: параметр запуска, версию и порт. Скачать
  15. @Snowfall and @Dan are now moderators.
  16. Привет, @patrick13! Поскольку администрация In-PKO тщательно скрывает свою личность под неизвестными в нашем сообществе именами, мы можем только догадываться кто они и предполагать, что в прошлом эти люди (или один человек) были неоднократно заблокированы на нашем форуме по ряду весомых причин, поэтому они решили открыть новый форум, где смогли бы развиваться. Тогда это так же объясняет их агрессивное поведение по отношению к PKODev.NET, которое подтверждает правильность принятого мною решения их заблокировать.
  17. Исправление SQL-инъекции в AccountServer MAC-адрес — уникальный идентификатор, присваиваемый каждой единице активного оборудования или некоторым их интерфейсам в компьютерных сетях Ethernet. Википедия - Свободная энциклопедия Привет! В данной статье я хочу поговорить об уязвимости в AccountServer.exe, которая позволяет злоумышленникам проводить внедрение вредоносного SQL-кода и редактировать базу данных AccountServer по их усмотрению. Таким образом, злоумышленник может, например, заблокировать все аккаунты на сервере, из-за чего игроки не смогут попасть в игровой мир, либо вообще удалить все учетные записи пользователей. 1. Суть и причины уязвимости После того, как игрок успешно вошел в свою учетную запись используя логин и пароль, AccountServer.exe выполняет SQL-запрос к одноименной базе данных AccountServer, чтобы обновить IP- и MAC-адреса клиента, время входа пользователя, название экземпляра GroupServer, от которого был получен пакет аутентификации, и установить флаг по которому можно определить авторизован ли пользователь в данный момент времени или нет: UPDATE account_login SET login_status = %d, login_group = '%s', enable_login_time = getdate(), last_login_time = getdate(), last_login_mac = '%s', last_login_ip = '%s' WHERE id = %d Уязвимость заключена в параметре last_login_mac, которому с помощью строкового маркера %s может присваивается любая текстовая строка: last_login_mac = '%s' В базе данных AccountServer в таблице аккаунтов account_login хранятся MAC-адреса всех клиентов. Поскольку через сеть Интернет нельзя узнать MAC-адрес сетевого адаптера пользователя, в отличие от IP-адреса, то, по идее разработчиков, игровой клиент, запущенный на пользовательском компьютере, должен получить MAC-адрес сетевого интерфейса и записать его в пакет аутентификации (ID: 431), после чего отравить MAC вместе с пакетом аутентификации на сервер. Далее адрес передается в AccountServer.exe и сохраняется в базе данных. Проблема в том, что в AccountServer.exe принятая строка с MAC-адресом никак не проверяется на соответствие формату MAC (XX-XX-XX-XX-XX-XX-XX-XX, где X символы 0 - 1 или A - F), то есть на сервер можно отправить любую строку и она будет вставлена в вышеприведенный SQL-запрос вместо маркера %s и сохранена в базе данных, что, в свою очередь, предоставляет возможность внедрения произвольного SQL-кода в запрос. В качестве примера внедрим в SQL-запрос вредоносный код, который заблокирует все учетные записи пользователей. Для этого вместо MAC-адреса необходимо отправить на сервер следующую строку: 1'; update account_login set ban=1;-- Далее она будет подставлена в изучаемый SQL-запрос и в результате будет сформирован новый запрос: UPDATE account_login SET login_status = %d, login_group = '%s', enable_login_time = getdate(), last_login_time = getdate(), last_login_mac = '1'; update account_login set ban=1;--', last_login_ip = '%s' WHERE id = %d Проанализируем что делает с базой данных SQL-запрос с внедренным вредоносным кодом: 1) Обновляет поля login_status. login_group, enable_login_time, last_login_time для ВСЕХ пользователей, что некорректно, так как эти поля должны обновляться только для текущего пользователя; 2) Присваивает значение "1" MAC-адресам ВСЕХ пользователей, что во-первых, так же некорректно в соответствии с пунктом (1), во-вторых, значение "1" не отражает какой-либо реальный MAC-адрес; 3) Присваивает значение "1" полям ban ВСЕХ пользователей, что означает блокировку всех учетных записей; 4) Поле last_login_ip не обновляется, так как часть запроса, в том числе с условием обновления данных только текущего пользователя, была закомментирована и не обрабатывается SQL Server. В итоге, после исполнения такого SQL-запроса, базе данных аккаунтов будет нанесен определенный ущерб. Последствия рассмотренного примера вполне обратимы, но злоумышленнику ничего не мешает использовать во внедряемом SQL-коде оператор DELETE, который служит для удаления записей из таблиц. В таком случае Вы можете безвозвратно потерять все учетные записи пользователей. 2. Эксплойт Для проверки наличия уязвимости в AccountServer.exe я разработал специальную программу-эксплойт, с помощью которой можно провести атаку на базу данных AccountServer. Также эксплойт понадобится для тестирования защиты, которую мы разработаем в будущем. Скачать эксплойт Исходный код эксплойта (в архиве идет проект Visual Studio 2019 Community) ВНИМАНИЕ! Данная программа не предназначена для взлома игровых серверов и должна использоваться только в учебных и испытательных целях. Автор не несет никакой ответственности за совершенные Вами действия и понесенный кем-либо ущерб. Используйте на свой страх и риск! Чтобы провести попытку внедрения SQL-инъекции запустите программу accountexploit.exe со следующими параметрами: accountexploit ip:<IP-адрес сервера> port:<Порт сервера> login:<Логин> password:<Пароль> version:<Версия сервера> Например: accountexploit ip:127.0.0.1 port:1973 login:V3ct0r password:112233 version:136 Эксплойт запустится и, при условии корректности информации, необходимой для подключения к серверу, начнется процесс тестирования Вашего сервера на уязвимость. В результате Вы должны увидеть одно из двух сообщений. 1. SQL INJECTION SUCCESFULLY DONE! ALL ACCOUNTS ARE BANNED. YOU NEED TO TAKE CARE OF THE SECURITY OF YOUR ACCOUNTSERVER! - В Вашем AccountServer.exe обнаружена уязвимость и Вам необходимо предпринять меры для её устранения; 2. SQL INJECTION FAILED! YOUR ACCOUNTSERVER IS SECURED! - Уязвимость не обнаружена. Ваш AccountServer.exe защищен. Если уязвимость была обнаружена, то нужно её незамедлительно исправить. Как это сделать будет рассмотрено далее. 3. Исправление уязвимости в AccountServer.exe Существует несколько методов исправления уязвимости: 1) Использовать специальные программы-посредники между GateServer и GroupServer, например, Gemini.X.Fail, SQLGuard, Filterserver, которые анализируют пакеты аутентификации на наличие SQL-инъекций; 2) Написать заплатку ("патч") и внедрить её в AccountServer.exe; 3) Разработать библиотеку динамической компоновки (.dll), исправляющую уязвимость, и подключить её к AccountServer.exe. В рамках данной статьи я выберу вариант (2) с написанием и внедрением заплатки как самый оптимальный ввиду относительной простоты исправления уязвимости. Вариант (1) требует разработки и применения дополнительного серверного программного обеспечения, а вариант (3) порождает дополнительные зависимости для AccountServer.exe. По моему мнению, оба последних варианта избыточны. Для заплатки потребуется разработать функцию, которая будет проверять корректность полученной от клиента строки с MAC-адресом. На вход функции будет подаваться строка, MAC-адрес для проверки соответственно, а на выходе функция будет выдавать логическое значение true в случае, если строка корректна, или false, если строка не прошла проверку и вероятно содержит вредоносный код. Чтобы разработать такую функцию, необходимо определить правила валидации. Поскольку в базе данных MAC-адреса хранятся в формате XX-XX-XX-XX-XX-XX-XX-XX, где X символы 0 - 1 или A - F, то будем использовать такой же формат для проверки: 1) Длина строки должна быть ровно 23 символа; 2) Каждый третий символ должен быть дефисом (-); 3) Каждый байт адреса должен быть представлен шестнадцатеричным значением (символы 0 - 1 и A - F). Теперь можно написать функцию проверки MAC-адресов на соответствие установленным правилам. Я применю язык C++: /* Функция для проверки MAC-адреса 1) Длина строки должна быть ровно 23 символа; 2) Каждый третий символ должен быть дефисом(-); 3) Каждый байт адреса должен быть представлен шестнадцатеричным значением(символы 0 - 1 и A - F). */ bool check_mac_address(const char* mac) { // Длина строки MAC-адреса unsigned int length = 0; // Скопируем указатель на строку const char* p = mac; // Получим длину строки MAC-адреса while (*p++) { // Увеличиваем счетчик символов length++; // Проверим длину строки if (length > 23) { // Слишком длинная строка return false; } } // Проверим длину строки if (length != 23) { // Слишком короткая строка return false; } // Проверим каждый символ в строке for (unsigned int i = 0; i < length; i++) { // Берем текущий символ unsigned char c = static_cast<unsigned char>(mac[i]); // Каждый 3-й символ должен быть дефисом (-) if (((i + 1) % 3 == 0) && c != '-') { // Некорретный формат MAC! return false; } // Остальные символы могут принимать значения // 0 - 1 // A - F if ( ((i + 1) % 3 != 0) && ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) == false) { // Некорретный формат MAC! return false; } } // Строка прошла проверку return true; } Скомпилируем разработанную функцию с помощью Microsoft Visual Studio 2019 Community и получим код на языке ассемблера, который можно внедрить в AccountServer.exe: 00F51000 >/$ 55 PUSH EBP 00F51001 |. 8BEC MOV EBP,ESP 00F51003 |. 83EC 18 SUB ESP,18 00F51006 |. B8 CCCCCCCC MOV EAX,CCCCCCCC 00F5100B |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX 00F5100E |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX 00F51011 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX 00F51014 |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX 00F51017 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX 00F5101A |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00F5101D |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0 00F51024 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 00F51027 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX 00F5102A |> 8B4D F8 /MOV ECX,DWORD PTR SS:[EBP-8] 00F5102D |. 0FBE11 |MOVSX EDX,BYTE PTR DS:[ECX] 00F51030 |. 8955 EC |MOV DWORD PTR SS:[EBP-14],EDX 00F51033 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8] 00F51036 |. 83C0 01 |ADD EAX,1 00F51039 |. 8945 F8 |MOV DWORD PTR SS:[EBP-8],EAX 00F5103C |. 837D EC 00 |CMP DWORD PTR SS:[EBP-14],0 00F51040 |. 74 18 |JE SHORT 00F5105A 00F51042 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4] 00F51045 |. 83C1 01 |ADD ECX,1 00F51048 |. 894D FC |MOV DWORD PTR SS:[EBP-4],ECX 00F5104B |. 837D FC 17 |CMP DWORD PTR SS:[EBP-4],17 00F5104F |. 76 07 |JBE SHORT 00F51058 00F51051 |. 32C0 |XOR AL,AL 00F51053 |. E9 B0000000 |JMP 00F51108 00F51058 |>^EB D0 \JMP SHORT 00F5102A 00F5105A |> 837D FC 17 CMP DWORD PTR SS:[EBP-4],17 00F5105E |. 74 07 JE SHORT 00F51067 00F51060 |. 32C0 XOR AL,AL 00F51062 |. E9 A1000000 JMP 00F51108 00F51067 |> C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0 00F5106E |. EB 09 JMP SHORT 00F51079 00F51070 |> 8B55 F4 /MOV EDX,DWORD PTR SS:[EBP-C] 00F51073 |. 83C2 01 |ADD EDX,1 00F51076 |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX 00F51079 |> 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 00F5107C |. 3B45 FC |CMP EAX,DWORD PTR SS:[EBP-4] 00F5107F |. 0F83 81000000 |JNB 00F51106 00F51085 |. 8B4D 08 |MOV ECX,DWORD PTR SS:[EBP+8] 00F51088 |. 034D F4 |ADD ECX,DWORD PTR SS:[EBP-C] 00F5108B |. 8A11 |MOV DL,BYTE PTR DS:[ECX] 00F5108D |. 8855 F3 |MOV BYTE PTR SS:[EBP-D],DL 00F51090 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C] 00F51093 |. 83C0 01 |ADD EAX,1 00F51096 |. 33D2 |XOR EDX,EDX 00F51098 |. B9 03000000 |MOV ECX,3 00F5109D |. F7F1 |DIV ECX 00F5109F |. 85D2 |TEST EDX,EDX 00F510A1 |. 75 0D |JNZ SHORT 00F510B0 00F510A3 |. 0FB655 F3 |MOVZX EDX,BYTE PTR SS:[EBP-D] 00F510A7 |. 83FA 2D |CMP EDX,2D 00F510AA |. 74 04 |JE SHORT 00F510B0 00F510AC |. 32C0 |XOR AL,AL 00F510AE |. EB 58 |JMP SHORT 00F51108 00F510B0 |> 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C] 00F510B3 |. 83C0 01 |ADD EAX,1 00F510B6 |. 33D2 |XOR EDX,EDX 00F510B8 |. B9 03000000 |MOV ECX,3 00F510BD |. F7F1 |DIV ECX 00F510BF |. 85D2 |TEST EDX,EDX 00F510C1 |. 74 3E |JE SHORT 00F51101 00F510C3 |. 0FB655 F3 |MOVZX EDX,BYTE PTR SS:[EBP-D] 00F510C7 |. 83FA 30 |CMP EDX,30 00F510CA |. 7C 09 |JL SHORT 00F510D5 00F510CC |. 0FB645 F3 |MOVZX EAX,BYTE PTR SS:[EBP-D] 00F510D0 |. 83F8 39 |CMP EAX,39 00F510D3 |. 7E 1B |JLE SHORT 00F510F0 00F510D5 |> 0FB64D F3 |MOVZX ECX,BYTE PTR SS:[EBP-D] 00F510D9 |. 83F9 41 |CMP ECX,41 00F510DC |. 7C 09 |JL SHORT 00F510E7 00F510DE |. 0FB655 F3 |MOVZX EDX,BYTE PTR SS:[EBP-D] 00F510E2 |. 83FA 46 |CMP EDX,46 00F510E5 |. 7E 09 |JLE SHORT 00F510F0 00F510E7 |> C745 E8 000000>|MOV DWORD PTR SS:[EBP-18],0 00F510EE |. EB 07 |JMP SHORT 00F510F7 00F510F0 |> C745 E8 010000>|MOV DWORD PTR SS:[EBP-18],1 00F510F7 |> 837D E8 00 |CMP DWORD PTR SS:[EBP-18],0 00F510FB |. 75 04 |JNZ SHORT 00F51101 00F510FD |. 32C0 |XOR AL,AL 00F510FF |. EB 07 |JMP SHORT 00F51108 00F51101 |>^E9 6AFFFFFF \JMP 00F51070 00F51106 |> B0 01 MOV AL,1 00F51108 |> 8BE5 MOV ESP,EBP 00F5110A |. 5D POP EBP 00F5110B \. C3 RETN Далее открываем AccountServer.exe в OllyDbg v1.10, переходим в модуль AccountServer.exe и ищем участок нулей в памяти приложения, который никогда не используется им во время исполнения - так называемый Code Cave. В AccountServer.exe из сборки Pirate King Online 1.38 (на его примере я рассмотрю процесс внедрения заплатки) Code Cave начинается с адреса 0x00452B8B. Скопируйте байты функции check_mac_address() и вставьте их в Code Cave. 55 8B EC 83 EC 18 B8 CC CC CC CC 89 45 E8 89 45 EC 89 45 F0 89 45 F4 89 45 F8 89 45 FC C7 45 FC 00 00 00 00 8B 45 08 89 45 F8 8B 4D F8 0F BE 11 89 55 EC 8B 45 F8 83 C0 01 89 45 F8 83 7D EC 00 74 18 8B 4D FC 83 C1 01 89 4D FC 83 7D FC 17 76 07 32 C0 E9 B0 00 00 00 EB D0 83 7D FC 17 74 07 32 C0 E9 A1 00 00 00 C7 45 F4 00 00 00 00 EB 09 8B 55 F4 83 C2 01 89 55 F4 8B 45 F4 3B 45 FC 0F 83 81 00 00 00 8B 4D 08 03 4D F4 8A 11 88 55 F3 8B 45 F4 83 C0 01 33 D2 B9 03 00 00 00 F7 F1 85 D2 75 0D 0F B6 55 F3 83 FA 2D 74 04 32 C0 EB 58 8B 45 F4 83 C0 01 33 D2 B9 03 00 00 00 F7 F1 85 D2 74 3E 0F B6 55 F3 83 FA 30 7C 09 0F B6 45 F3 83 F8 39 7E 1B 0F B6 4D F3 83 F9 41 7C 09 0F B6 55 F3 83 FA 46 7E 09 C7 45 E8 00 00 00 00 EB 07 C7 45 E8 01 00 00 00 83 7D E8 00 75 04 32 C0 EB 07 E9 6A FF FF FF B0 01 8B E5 5D C3 Запомните адрес, начиная с которого Вы вставили байты. Это будет адрес функции check_mac_address(). В моем случае это адрес 0x00452B90 (1). Задействуем внедренную функцию для проверки MAC-адресов. Найдите последовательность байт: 8B 8D C4 FC FF FF 89 81 9C 00 00 00 6A 00 8D 4D 08 Вы должны увидеть следующие инструкции: MOV ECX,DWORD PTR SS:[EBP-33C] MOV DWORD PTR DS:[ECX+9C],EAX PUSH 0 LEA ECX,DWORD PTR SS:[EBP+8] CALL 0041C410 PUSH EAX MOV ECX,DWORD PTR SS:[EBP-33C] ADD ECX,0A4 Инструкцию PUSH EAX (1) необходимо заменить на инструкцию безусловного перехода JMP <Адрес Code Cave> в Code Cave, например, после внедренной функции check_mac_address() (1). В моем случае это адрес 0x00452C9E. Также запомните адрес инструкции ADD ECX, 0A4 (2) - программа будет возвращаться сюда при успешной проверке MAC-адреса. В примере это адрес 0x00403EB3. Далее нужно найти адрес инструкций (1), на которые программа будет переходить при некорректном MAC-адресе. Найдите последовательность байт: 8B 85 C4 FC FF FF C6 40 14 00 C7 45 FC FF FF FF FF 8D 4D 08 В AccountServer.exe из серверных файлов Pirate King Online 1.38 они будут записаны по адресу 0x00403E4E (1). В результате мы получили 5 адресов: 1. Адрес функции check_mac_address() в Code Cave (0x00452B90); 2. Адрес инструкций проверки MAC-адреса в Code Cave (0x00452C9E); 3. Адрес перехода на инструкции проверки MAC-адреса в Code Cave из обработчика пакета аутентификации (0x00403EAC); 4. Адрес перехода из Code Cave на инструкции продолжения процесса обработки пакета аутентификации (0x00403EB3); 5. Адрес перехода из Code Cave на инструкции завершения процесса обработки пакета аутентификации (0x00403E4E); Осталось записать в Code Cave инструкции для проверки MAC-адреса и подставить в них требуемые адреса: PUSHAD PUSH EAX CALL <Адрес функции check_mac_address()> ADD ESP,4 TEST AL,AL JE SHORT <FAIL> POPAD PUSH EAX MOV ECX,DWORD PTR SS:[EBP-33C] JMP <Адрес перехода при успешной проверке MAC-адреса> <FAIL> POPAD JMP <Адрес перехода при неккоректном MAC-адресе> Сохраните проделанные изменения в файле AccountServer.exe. На этом внедрение заплатки и исправление уязвимости в AccountServer.exe завершено. Перейдем к процессу тестирования. Скачать исправленный AccountServer.exe из серверных файлов Pirate King Online 1.38 4. Проверка AccountServer.exe После того, как Вы внедрили заплатку в AccountServer.exe, необходимо убедиться что она работает, а уязвимость к внедрению вредоносного SQL-кода исчезла. Чтобы это проверить примените эксплойт к исправленному AccountServer.exe по инструкции, приведенной в разделе "Эксплойт". Вы должны увидеть сообщение: SQL INJECTION FAILED! YOUR ACCOUNTSERVER IS SECURED! Благодарю за внимание!
  18. Привет! Можно использовать этот файл sceneffectinfo.txt в качестве исходника:
  19. Привет, @DeiLyred! Помести следующий код в конец файла GameServer\resource\script\calculate\functions.lua: ObligeAcceptMission_Oiriginal = ObligeAcceptMission ObligeAcceptMission = function(role, id) if (id == 1 or id == 2 or id == 3) then SetChaAttr(role, ATTR_LIFETP, 24) RefreshCha(role) end ObligeAcceptMission_Oiriginal(role, id) end Число очков мирных навыков задается строкой: SetChaAttr(role, ATTR_LIFETP, 24) В данном примере после создания персонажу будет выдано 24 очка мирных навыков.
  20. Эффекты с ID более 240 не отображаются в игре. В чем причина - неизвестно.
  21. Hello! Open Microsoft SQL Server Management Studio and open connection with your MSSQL Server. Then press button "New query" (CTRL + N) and put in the editor your SQL query to create tradedb database. After that execute the query (F5).
  22. Hello @noanshadow! Add a new rule in Windows Firewall for TCP port 1973
  23. Hello @ratonter! The right address for skilleff limit will be 0x00091379 In my case limit is 40 1F = 0x1F40 = 8000 effects
  24. Hello @alimo! These topics can help you: Also look for Saeed's antidupe in the Simple Archive:
  25. New forum In-PKO "Welcome to the Pirate King Online family! The purpose of creating this community is the desire to unite the Eng & Ru audience, exchange experience and оf course communication, we want to unite Players, Administrators and Developers in one big family. Each of you is a big contribution to the family, and without each of you it's just a forum, we want to build warmth relations between all participants and joint work on your favorite game, development and transfer of experience. Each of your contributions to the community accelerates its development, in the near future we plan to gather an audience and fill out the forum if you are not indifferent to the life of the project - we encourage you to take part in it, to be part of it." Hello friends! I want to tell you about a new forum in our community of developers and administrators of Tales of Pirates (Pirate King Online) servers - in-pko.com, which was opened on June 2, 2020. Enter to the In-PKO The subject of the in-pko.com forum is similar to the subject of the PKODev.NET forum - it is about development and administration of Tales of Pirates (Pirate King Online) servers. The forum is represented by two main sections: Russian and English. Each section contains guides and articles on the technical side of the game, useful files for server and client (server files, websites, special programs), and discusses the problems that arise during the development and administration processes of game projects. The development and exploring of the source codes of the game is underway. On the new forum, you can also find people for your team to develop a project, or join an existing one. An opportunity is offered to make money on the provision of services or to quickly find a contractor. The latest news of the project is published in the corresponding section "News". In addition to sections for developers and administrators, sections for players are also being developed on the forum, in particular, advertising of Russian- and English-speaking game projects. The section with servers advertising has a convenient classification and is divided into the categories: "Stable", "Testing", "Opening soon", "In developing", "Server archive". Each category is divided into servers based on rates: "Low rates", "Average rates", "High rates". Through these sections, game server administrators can find an audience, and players can find a suitable server for the game. To clearly identify the roles of users when communicating, the forum has a system of user groups: 1. Administrators; 2. Moderators; 3. Gold members; 4. Servers owners; 5. Developers 6. Gamers; 7. Members. The general statistics of the In-PKO forum for 1.5 months of work allows us to estimate the pace of its growing. Of the negative aspects, unfortunately, it is worth highlighting the fact that the representatives of this project behave extremely aggressively and use unscrupulous methods to grow their forum. For example, during the last month you could repeatedly see the following picture on our forum: PKODev.NET was spammed with advertisement of the In-PKO forum. In your private messages, you could have received one of these messages. Obviously, this is aimed at luring PKODev.NET users away to the new forum. At the same time, the In-PKO forum does not hesitate to use materials from the PKODev.NET forum without the consent of the authors of the publications and without back links to the originals of the topics. For example, here you can find there the following materials from our forum: "Server Protection for TOP 1.3x", "IP Changer", "Model viewer (.lmo, .lgo, .lab)", ".txt Tables compiling", "In Game Shop 1.35 - 2.0", "Change Server Rate", "How to increase temporary bag capacity", "Create Account", "Change cost of the World / Trade message" and others. To be fair, we emphasize that the forum also contains original content. All these actions bring discomfort to PKODev.NET users and raise questions. One of our users, @Angelix, in his topic "Spamming pkoDev" asks an open question to the In-PKO administration after another attack. In-PKO administration, in turn, denies involvement in spam attacks on PKODev and does not take responsibility for them. I do not know what justifies this behavior and who is involved in this, perhaps the guys want to attract attention to themselves in this way, so I ask you to support the In-PKO forum and register there. There is also a content hiding system on the forum, which can be inconvenient. To view links, scripts, text, you are forced to register and enter the forum. Despite the noted negative points, the new forum is of some interest to the community and deserves attention. Thank you for your attention and have a nice day!
×
×
  • Create New...