Graf 210 Report post Posted January 4, 2022 Защита CheatEngine Добрый день, дорогие товарищи! Думаю многие сталкаваются с проблемой проброса тысяч пакетов через программу CheatEngine. С учетом, что не знаю никого, кроме Виктора, кто моб бы помочь... @V3ct0r прошу выложить мод, который будет запрещать использование Cheat Engine. Судя по поим данным, игроки с этой программой губят последние живые сервера. 1 Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted January 4, 2022 Привет, @Graf! Есть информация каким именно образом Cheat Engine влияет на игровой процесс? Может быть, как воспроизвести проблемы, которые вызывает эта программа? 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
Graf 210 Report post Posted January 4, 2022 @V3ct0r К примеру у нас есть N сундуков. Запускаем Cheat Engine, увеличиваем скорость игры. И открываем +- 1000 сундуков за минуту. В 2-3 окна можно положить GameServer.exe. Quote Share this post Link to post Share on other sites
mangojkee 47 Report post Posted January 4, 2022 37 минут назад, Graf сказал: @V3ct0r К примеру у нас есть N сундуков. Запускаем Cheat Engine, увеличиваем скорость игры. И открываем +- 1000 сундуков за минуту. В 2-3 окна можно положить GameServer.exe. https://github.com/pkodev/proxy 1 Quote Share this post Link to post Share on other sites
Де-Компанье 3 Report post Posted January 5, 2022 14 часов назад, Graf сказал: @V3ct0r К примеру у нас есть N сундуков. Запускаем Cheat Engine, увеличиваем скорость игры. И открываем +- 1000 сундуков за минуту. В 2-3 окна можно положить GameServer.exe. Привет @Graf. Защищаться надо от пакетов, а не от CheatEngine. Слать большое кол-во пакетом можно и без CheatEngine - например сняв ограничение на использование на стороне клиента. Quote Share this post Link to post Share on other sites
Graf 210 Report post Posted January 5, 2022 @Де-Компанье Поэтому я и попросил Виктора что-нибудь придумать, если у него будет время. Многим поможет. Я сам сейяас не имею своего сервера, но жалко оставшиеся приватки. Quote Share this post Link to post Share on other sites
Kst 45 Report post Posted January 5, 2022 (edited) Новая версия GateServer'a сурсы которой в шаре, решают данную проблему, там установлена зашита от флуда пакетами. // DDOS Protection if (g_ddos && l_cmd != CMD_CM_BEGINACTION) { //Player *l_ply = (Player*)datasock->GetPointer(); //if (l_ply) //{ uLong l_tick = GetCurrentTick(); if (l_tick - datasock->m_lashTick < 1000 * m_checkSpan) { datasock->m_cmdNum++; if (datasock->m_cmdNum > m_checkError) { printf("[%s] ddos suspected... ", datasock->GetPeerIP()); dbc::WPacket l_wpk = GetWPacket(); l_wpk.WriteCmd(CMD_MC_LOGIN); l_wpk.WriteShort(ERR_MC_NETEXCP); SendData(datasock,l_wpk); C_PRINT("disconnected!\n"); this->Disconnect(datasock, 100, -31); } else if (datasock->m_cmdNum > m_checkWaring) { datasock->m_waringNum++; if (datasock->m_waringNum > 2) { printf("[%s] ddos suspected... ", datasock->GetPeerIP()); dbc::WPacket l_wpk = GetWPacket(); l_wpk.WriteCmd(CMD_MC_LOGIN); l_wpk.WriteShort(ERR_MC_NETEXCP); SendData(datasock,l_wpk); C_PRINT("disconnected!\n"); this->Disconnect(datasock, 100, -31); } } else if (datasock->m_recvbyteps > 1024){ printf("[%s] ddos suspected... ", datasock->GetPeerIP()); dbc::WPacket l_wpk = GetWPacket(); l_wpk.WriteCmd(CMD_MC_LOGIN); l_wpk.WriteShort(ERR_MC_NETEXCP); SendData(datasock, l_wpk); C_PRINT("disconnected!\n"); this->Disconnect(datasock, 100, -31); } } else { if (datasock->m_cmdNum < m_checkWaring) datasock->m_waringNum = 0; datasock->m_cmdNum = 0; datasock->m_lashTick = l_tick; } //} } Также для более "деревянного" фикса можно поработать с сетевым интерфейсом оборудования, любой начинающий сетевик может проанализировать и ввести правила, который не дадут сильно зафлудить Edited January 5, 2022 by Kst 2 Quote Работаем над портированием пиратии под все платформы (win, linux, android, macos, ios) We are developing the tales of pirates to all platform (win, linux, android, macos, ios) telegram: https://t.me/magicsea_online Share this post Link to post Share on other sites
Kst 45 Report post Posted January 5, 2022 16 часов назад, mangojkee сказал: https://github.com/pkodev/proxy оно многопоточное? Quote Работаем над портированием пиратии под все платформы (win, linux, android, macos, ios) We are developing the tales of pirates to all platform (win, linux, android, macos, ios) telegram: https://t.me/magicsea_online Share this post Link to post Share on other sites
e1mer 102 Report post Posted January 5, 2022 55 минут назад, Graf сказал: @Де-Компанье Поэтому я и попросил Виктора что-нибудь придумать, если у него будет время. Многим поможет. Я сам сейяас не имею своего сервера, но жалко оставшиеся приватки. На уровне программы, от этого защищаться бесполезно, просто для экономии твоего времени скажу, что это пройденный этап в моей жизни. 49 минут назад, Kst сказал: Новая версия GateServer'a сурсы которой в шаре, решают данную проблему, там установлена зашита от флуда пакетами. // DDOS Protection if (g_ddos && l_cmd != CMD_CM_BEGINACTION) { //Player *l_ply = (Player*)datasock->GetPointer(); //if (l_ply) //{ uLong l_tick = GetCurrentTick(); if (l_tick - datasock->m_lashTick < 1000 * m_checkSpan) { datasock->m_cmdNum++; if (datasock->m_cmdNum > m_checkError) { printf("[%s] ddos suspected... ", datasock->GetPeerIP()); dbc::WPacket l_wpk = GetWPacket(); l_wpk.WriteCmd(CMD_MC_LOGIN); l_wpk.WriteShort(ERR_MC_NETEXCP); SendData(datasock,l_wpk); C_PRINT("disconnected!\n"); this->Disconnect(datasock, 100, -31); } else if (datasock->m_cmdNum > m_checkWaring) { datasock->m_waringNum++; if (datasock->m_waringNum > 2) { printf("[%s] ddos suspected... ", datasock->GetPeerIP()); dbc::WPacket l_wpk = GetWPacket(); l_wpk.WriteCmd(CMD_MC_LOGIN); l_wpk.WriteShort(ERR_MC_NETEXCP); SendData(datasock,l_wpk); C_PRINT("disconnected!\n"); this->Disconnect(datasock, 100, -31); } } else if (datasock->m_recvbyteps > 1024){ printf("[%s] ddos suspected... ", datasock->GetPeerIP()); dbc::WPacket l_wpk = GetWPacket(); l_wpk.WriteCmd(CMD_MC_LOGIN); l_wpk.WriteShort(ERR_MC_NETEXCP); SendData(datasock, l_wpk); C_PRINT("disconnected!\n"); this->Disconnect(datasock, 100, -31); } } else { if (datasock->m_cmdNum < m_checkWaring) datasock->m_waringNum = 0; datasock->m_cmdNum = 0; datasock->m_lashTick = l_tick; } //} } Также для более "деревянного" фикса можно поработать с сетевым интерфейсом оборудования, любой начинающий сетевик может проанализировать и ввести правила, который не дадут сильно зафлудить Если вы начнете юзать это, что-же, первые результаты не заставят себя долго ждать. 44 минуты назад, Kst сказал: оно многопоточное? Нет, оно не многопоточное, крайне необходимо его переписать. Один очень крутой человек, благополучно его переписал для нас (если ты это читаешь, брат, спасибо!). Опыт показывает, что во время дудоса прокси-сервер благополучно ложится, а после его рестарта всех игроков кикнет из игры. Так же этот прокси-сервер не должен работать в соло, есть ряд необходимых настроек в самом ядре, а так же необходимо грамотно настроить iptables. Как вариант - можно его установить, и самому начать лупить в него, чтобы найти все огрехи (их там не мало, и они обязательно доставят вам неудобства). Никакие сетивики вам не помогут, никакие программно-прикладные приложения вас не спасут, только прослойка из linux машины (овх за 20 долларов не поможет, мы юзаем игровые впски, защита от ддос атаки там работает чуть иначе), а так же грамотная работа с фаерволлом. Нам заливали 150к ботов, которые с легкостью обходили прокси-сервер, и пытались авторизоваться в игре, полностью подделывая пакет авторизации, и все это дело доходило до гейт-сервера, и просто на-просто заканчивались локальные порты. По этому, мой совет, оплачивайте долларов за 50 стресстестер, и просто изучайте, читайте рекомендации других людей, благо в гугле их полно, 50% успеха лежит напрямую в линукс-машине, которая будет форвардить вам трафик. 1 1 Quote Share this post Link to post Share on other sites
Kst 45 Report post Posted January 5, 2022 9 часов назад, e1mer сказал: На уровне программы, от этого защищаться бесполезно, просто для экономии твоего времени скажу, что это пройденный этап в моей жизни. Если вы начнете юзать это, что-же, первые результаты не заставят себя долго ждать. Нет, оно не многопоточное, крайне необходимо его переписать. Один очень крутой человек, благополучно его переписал для нас (если ты это читаешь, брат, спасибо!). Опыт показывает, что во время дудоса прокси-сервер благополучно ложится, а после его рестарта всех игроков кикнет из игры. Так же этот прокси-сервер не должен работать в соло, есть ряд необходимых настроек в самом ядре, а так же необходимо грамотно настроить iptables. Как вариант - можно его установить, и самому начать лупить в него, чтобы найти все огрехи (их там не мало, и они обязательно доставят вам неудобства). Никакие сетивики вам не помогут, никакие программно-прикладные приложения вас не спасут, только прослойка из linux машины (овх за 20 долларов не поможет, мы юзаем игровые впски, защита от ддос атаки там работает чуть иначе), а так же грамотная работа с фаерволлом. Нам заливали 150к ботов, которые с легкостью обходили прокси-сервер, и пытались авторизоваться в игре, полностью подделывая пакет авторизации, и все это дело доходило до гейт-сервера, и просто на-просто заканчивались локальные порты. По этому, мой совет, оплачивайте долларов за 50 стресстестер, и просто изучайте, читайте рекомендации других людей, благо в гугле их полно, 50% успеха лежит напрямую в линукс-машине, которая будет форвардить вам трафик. Круто! Хорошие и очень нужные советы (нет). P.s любая Anti-DDos система даже на ваших машинах и есть программно-прикладное приложение написанное на C++ с задачей анализом траффика. 1 Quote Работаем над портированием пиратии под все платформы (win, linux, android, macos, ios) We are developing the tales of pirates to all platform (win, linux, android, macos, ios) telegram: https://t.me/magicsea_online Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted January 6, 2022 @e1mer все-таки речь идет о защите от конкретной программы, которая позволяет флудить пакетами в рамках сетевого протокола игры, а не от полномасштабного DDoS с использованием специализированного софта и ботнетов. Я не думаю что у обычного игрока, который решил побаловаться, будут соответствующие знания и ресурсы. Соглашусь с @Kst, если есть конкретные советы и методы по защите от CheatEngine, то с радостью выслушаем опытного человека. Поскольку мы тут и так знаем одного "брата", который любит переписывать чужие "прокси-сервера", что DDoS отбивается аппаратными средствами и даже поиском в Google пользоваться умеем. Что касается сабжа, @Graf, у меня мало опыта в области решения подобных проблем. Нужно придумать хорошую методику защиты. Первое, что приходит в голову - это ввести проверку на количество пакетов со стороны клиента за единицу времени. Например, если ты говоришь что для падения сервера достаточно открыть 1000 сундуков в течение минуты, то клиент должен посылать соответствующий пакет с периодом 60 мс. Значит нужно проверять, что между получениями пакетов (действиями игрока) проходит более 60 мс. Эта величина 60 мс - экспериментальная и может подбираться эмпирически. Нужно понять, с какой частотой игрок может заставить клиент отправлять пакеты на сервер используя клавиатуру и мышь в качестве устройств ввода. От этой частоты и будет зависеть контрольная дельта времени между пакетами. Помимо измерения числа пакетов в единицу времени, можно проверять количество принятых байт за единицу времени. Например, при нормальной игре обмен клиента с сервером происходит со скоростью 100 байт в секунду (значение взято с "потолка"), а чтобы открыть 1000 сундуков за минуту, клиенту придется обмениваться со скоростью 255 байт в секунду, если взять в расчет что размер пакета "открыть сундук" составляет 15 байт. Кроме того, можно попробовать поискать изменения, которые CheatEngine вносит в процесс игрового клиента, заставляя его ускориться. При обнаружении этих изменений необходимо, например, закрывать клиент, как это было реализовано в защите на стороне клиента от WPE Pro, либо отключаться от сервера. Так же можно встроить измерение числа отправляемых пакетов/байт в единицу времени непосредственно в игровой клиент. 1 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
Magicsea Online 121 Report post Posted January 6, 2022 (edited) @Graf @V3ct0r на самом деле, администрация сервера сама поставила себя в подобные условия, когда игроки вынуждены использовать CheatEngine для открытия сундуков/свитков. Первое самое важное решение - ввести проверки на стороне LUA, и реализовать открытие сундуков и использование свитков пачками. То есть, при использовании предмета мы должны проверить свободное место в инвентаре и разом открыть Н сундуков, если это возможно. Это костыльная защита, но для решения локальной проблемы здесь и сейчас, без специалиста, который справится с этой проблемы - идеальный вариант исправления ошибки. Второе решение - изменить баланс и избавиться от такого большого количества предметов. Меняем логику получения предметов и не страдаем от игроков, которые пытаются автоматизировать способ добычи тех или иных предметов. Конечно же, это не поможет именно с атаками при использовании стороннего ПО. Но игроки не будут вынуждены использовать это стороннее ПО для решения проблем именно с атаками нужно искать специалистов, которые помогут решить проблемы с валидными пакетами в секунду на стороне GateServer/GameServer. Edited January 6, 2022 by Kara Online Quote Контакты: Сайт: https://magicseaonline.com/ Telegram: https://t.me/magicsea_online - здесь мы публикуем последние новости по разработке Discord: https://discord.gg/nqkv76YVbj Группа VK: https://vk.cc/chjbzd Чат VK: https://vk.cc/chjc8L YouTube: https://www.youtube.com/@magicsea_online Форум: https://forum.magicseaonline.com Служба поддержки: https://magicseaonline.com/support База знаний: https://magicseaonline.com/knowledge Рейтинг: https://magicseaonline.com/rating Финансовая помощь проекту: https://magicseaonline.com/donate С уважением, Magicsea Team Share this post Link to post Share on other sites
champ 147 Report post Posted January 6, 2022 Не уверен, насколько это хорошее решение, но можно сделать лунчер, который будет работать на стороне и без которого игра не будет работать. Лаунчер же будет проверять хеш игры и дллок и так же смотреть, чем занимается пользователь в то время как игра открыта. Однако это дело вряд ли остановит опытного программиста или инженера, скорее просто замедлит процесс. По моему мнению, самой идеальной защитой является не превенция использования данных приложений типа CheatEngine, а изменение пакетов. Например, вместо того, чтобы отсылать: клиент -> сервер: персонаж пошёл по координатам (2200, 2700) отправлять: клиент -> сервер: персонаж хочет пойти по координатам (2200, 2700) Дальше парсить этот пакет на сервере, делать какие-то проверки и отправлять ответ клиенту. ^ Это просто концепция и моё видение решения данной проблемы 1 Quote Share this post Link to post Share on other sites
Де-Компанье 3 Report post Posted January 6, 2022 7 часов назад, Kara Online сказал: @Graf @V3ct0r на самом деле, администрация сервера сама поставила себя в подобные условия, когда игроки вынуждены использовать CheatEngine для открытия сундуков/свитков. Первое самое важное решение - ввести проверки на стороне LUA, и реализовать открытие сундуков и использование свитков пачками. То есть, при использовании предмета мы должны проверить свободное место в инвентаре и разом открыть Н сундуков, если это возможно. Это костыльная защита, но для решения локальной проблемы здесь и сейчас, без специалиста, который справится с этой проблемы - идеальный вариант исправления ошибки. Второе решение - изменить баланс и избавиться от такого большого количества предметов. Меняем логику получения предметов и не страдаем от игроков, которые пытаются автоматизировать способ добычи тех или иных предметов. Конечно же, это не поможет именно с атаками при использовании стороннего ПО. Но игроки не будут вынуждены использовать это стороннее ПО для решения проблем именно с атаками нужно искать специалистов, которые помогут решить проблемы с валидными пакетами в секунду на стороне GateServer/GameServer. Отличные советы , а ещё можно удалить сервер или вообще убрать все используемые предметы в надежде, что проблема исчезнет. От этих проверок нагрузка на гейт и в конечном итоге на гс никуда не денется (последний конечно можно спасти за счет первого). Суть в том, что конкретно с cheat engine бороться не имеет смысла, ибо всегда есть аналоги. По факту вы пытаетесь бороться не с cheat engine а со speedhack, однако, единственный вред, который несет speedhack - это ускоренная отправка пакетов со стороны клиента (то есть простой флуд). Что бы защититься от простого игрока достаточно фиксировать и обрабатывать кол-во трафика поступаемого от клиента, как уже было написано выше - это вполне поможет, чтобы хоть как-то минимизировать нагрузку нужно отключать такого клиента. Более того в игре уже все реализовано, если подключить speedhack и воткнуть скорость побольше - клиент будет отключен, то есть все, что нужно - это найти нужное место и закрутить гайки так, как потребуется. 20 часов назад, Kst сказал: Круто! Хорошие и очень нужные советы (нет). P.s любая Anti-DDos система даже на ваших машинах и есть программно-прикладное приложение написанное на C++ с задачей анализом траффика. За Anti-DDos системами стоят люди, огромный ресурс в виде железа и мощности трафика, сравнивать такие системы с программами - это сильно, программа эффективна до тех пор, пока не исчерпает свой ресурс, а он не особо большой, ни одна нормальная защита от Ddos не строится на 1-м компьютере. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted January 6, 2022 4 hours ago, patrick13 said: Не уверен, насколько это хорошее решение, но можно сделать лунчер, который будет работать на стороне и без которого игра не будет работать. Лаунчер же будет проверять хеш игры и дллок и так же смотреть, чем занимается пользователь в то время как игра открыта. Однако это дело вряд ли остановит опытного программиста или инженера, скорее просто замедлит процесс. Идея хорошая, это уже получается некий "античит". Видел подобное в некоторых онлайн играх и FPS. 4 hours ago, patrick13 said: По моему мнению, самой идеальной защитой является не превенция использования данных приложений типа CheatEngine, а изменение пакетов. Например, вместо того, чтобы отсылать: клиент -> сервер: персонаж пошёл по координатам (2200, 2700) отправлять: клиент -> сервер: персонаж хочет пойти по координатам (2200, 2700) Дальше парсить этот пакет на сервере, делать какие-то проверки и отправлять ответ клиенту. ^ Это просто концепция и моё видение решения данной проблемы По сути клиент и сервер игры уже так и работают, что клиент отправляет именно: "персонаж хочет пойти по координатам (2200, 2700)", а сервер решает возможно это или нет. Поэтому не совсем понял твою идею. 1 hour ago, Де-Компанье said: Отличные советы , а ещё можно удалить сервер или вообще убрать все используемые предметы в надежде, что проблема исчезнет. От этих проверок нагрузка на гейт и в конечном итоге на гс никуда не денется (последний конечно можно спасти за счет первого). Оптимизация геймплея? Почему нет? Если игроку не нужно будет открыть 1000 сундуков за раз, то он не задумается об автоматизации этого процесса. 1 hour ago, Де-Компанье said: Более того в игре уже все реализовано, если подключить speedhack и воткнуть скорость побольше - клиент будет отключен, то есть все, что нужно - это найти нужное место и закрутить гайки так, как потребуется. Судя по тому, что @Graf создал эту тему, это по какой-то причине не работает. 1 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