Search the Community
Showing results for tags 'защита'.
Found 2 results
-
Защита сервера от SQL-инъекций JailBreak(MAC), Game.exe(PIN). Автор программы: insider. Как работает защита? Данная защита ставиться между GateServer'ом и GroupServer'ом. В данной защите есть 2 волны фильтрации, которые проходят пакеты. Пакет авторизации → Проверка размера и валидности поля MAC. Пакет смены PIN-кода → Проверка размера и валидности поля PIN. Если одна из волн фильтрации обнаружит в пакете изменения, пакет будет заменён на безопасный, а в файл Packets.bin выведется уведомление. Скриншот: Установка: Скопируйте файлы из архива в папку с сервером Откройте файл Gemini.XFail.xml В поле group укажите следующие параметры: address - IP адрес GroupServer; port - порт из файла GroupServer.cfg в блоке [Main] (Listen_Port) В поле gate укажите следующие параметры: address - IP адрес GateServer; port - порт из файла GateServer.cfg в блоке [GroupServer] (Port) Сохраните конфигурацию, запустите все подсервера (GameServer.exe, AccountServer.exe, GroupServer.cfg, GateServer.cfg), а затем запустите SQLGuard Скачать: Яндекс Диск Проверка на вирусы: Автор программы: insider
-
Защита GM команд Привет! Предположим, Ваш сервер был взломан и злоумышленник получил доступ к GM-аккаунту. В данной статье я расскажу как обезопасить Ваш сервер от его действий, то есть сделать взлом бессмысленным. Внимание! Особое внимание уделите командам &lua и &lua_all. С их помощью злоумышленник может получить контроль над машиной, где запущен GameServer.exe, со всеми вытекающими из этого последствиями: кража Вашей сборки либо её удаление, вайп базы данных, потеря доступа к машине и так далее. Обсуждение этих команд проходит в данной теме: Все прелести команды &lua. Для обеспечения безопасности Вашего сервера, не используйте имена из примеров данной статьи на своем сервере! Способ №1. Нет GM-команд - нет проблем! Если Вы редко или вообще не пользуетесь GM-командами, то имеет смысл их отключить. Редактировать персонажей и выдавать предметы можно с помощью специальных программ или вручную в базе данных, когда персонаж не в игре. Чтобы отключить GM-команды нужно внести изменения в GameServer.exe. Версия | Размер (КБ) | Адрес --------+-------------+------------ 1.36 | 2 040 | 0x000DE1E8 1.38 | 2 088 | 0x000E6852 2.0 | 3 000 | 0x00161349 Откройте GameServer.exe в любом HEX редакторе и перейдите по адресу из таблицы. Я буду работать с 1.38 GameServer.exe в редакторе HxD. Замените 23 байта начиная с этого адреса на 0x90 Сохраните проделанные изменения и убедитесь, что в игре не работают GM-команды. Способ №2. Переименовывание GM-команд. Злоумышленник не сможет воспользоваться GM-командами, если он не будет знать их названия. Итак, Вам придется переименовать каждую команду. Чтобы изменить название GM-команды, откройте GameServer.exe в любом HEX-редакторе. Затем найдите GM-команду и измените ее название. Длина нового названия должна быть такой же, как и длина старого. Для примера, переименуем команду &make в команду &give. Обратите внимание, что длины строк "make" и "give" равны (по 4 символа). Открываем GameServer.exe в HEX-редакторе и ищем строку "make": Вам будут попадаться строки, которые содержат в себе подстроку "make" (например, "MakeItem", "make failed!", "GMmakeLog" и др.). Игнорируйте их и продолжайте поиск. Когда Вы найдете нужную строку, Вы увидите рядом названия других GM-команд: Заменяем на "give": Сохраните проделанные изменения. Повторите данные действия для каждой GM-команды. Список адресов GM-команд GameServer.exe версии 1.36 (2 040 КБ): GameServer.exe версии 1.38 (2 088 КБ): GameServer.exe версии 2.4 (3 000 КБ): Способ N3. GameServer.exe с функциями HandleChat(), GetGmLv() и SetGmLv() Для реализации данного способа Вам потребуется модифицированный GameServer.exe с функциями HandleChat(), GetGmLv() и SetGmLv(). Функция HandleChat(userdata role, string message) срабатывает, когда игрок пишет сообщение в местный чат. Так как GM-команды отправляются также в местный чат, Вы можете написать скрипт, который будет контролировать выполнение команд. Например, Вы можете сделать так, чтобы GM-команды срабатывали только при условии, что их отправляет персонаж с определенным именем или ID. Плюс ко всему, можно сделать чтобы этот персонаж должен еще состоять в определенной гильдии, в которую входят только администраторы и GM Вашего сервера. Все зависит от Вашей фантазии. Чтобы узнать, что персонаж является GM, используйте функцию GetGmLv(userdata role). С помощью функции SetGmLv(userdata role, number level) можно изменять GM-уровень аккаунта, к которому прикреплен персонаж. Например, в той же функции HandleChat() можно сбрасывать GM-уровень аккаунта в 0, если персонаж не прошел проверку. Реализуем простую систему контроля GM-команд: 1) GM-команды могут выполнять только персонажи с именами: "V3ct0r", "pkodev" и "Administrator"; 2) В случае, если персонаж GM и он не прошел проверку, сбросить GM-уровень до 0, кикнуть персонажа с сервера и отправить сообщение администратору в консоль GameServer.exe. Для начала создадим в файле variable.lua массив с именами персонажей, которые могут использовать GM-команды. Назовем его PlayerCanUseCmd: PlayerCanUseCmd = {} PlayerCanUseCmd["V3ct0r"] = 1 PlayerCanUseCmd["pkodev"] = 1 PlayerCanUseCmd["Administrator"] = 1 Затем напишем скрипт для функции HandleChat() в файле functions.lua: -- Обработчик местного чата function HandleChat(role, message) -- Проверяем что персонаж GM if (GetGmLv(role) > 0) then -- Проверяем что персонаж отправил GM-команду if (string.find(message, "&") == 1) then -- Проверяем имя персонажа local cha_name = GetChaDefaultName(role) if (PlayerCanUseCmd[cha_name] ~= nil) then -- Персонаж может использовать GM-команду return 1 end -- Персонаж не может использовать GM-команду -- Сбрасываем GM-уровень до 0 SetGmLv(role, 0) -- Кикаем персонажа с сервера KickCha(role) -- Пишем сообщение администратору в консоль сервера print("Player [" .. cha_name .."] trying to use GM command!") -- Запрещаем выполнение GM-команды return 0 end end return 1 end Для кика персонажей нам понадобится функция KickCha(), добавьте ее также в functions.lua: function KickCha(character) local pkt = GetPacket() WriteCmd(pkt, 1505) SendPacket(character,pkt) end Тема открыта для обсуждения. Пишите свои вопросы и идеи в комментариях!
- 17 replies
-
- 3