Jump to content
Sign in to follow this  
Graf

Защита CheatEngine

Recommended Posts

Защита CheatEngine

Добрый день, дорогие товарищи!

Думаю многие сталкаваются с проблемой проброса тысяч пакетов через программу CheatEngine.

С учетом, что не знаю никого, кроме Виктора, кто моб бы помочь...

@V3ct0r прошу выложить мод, который будет запрещать использование Cheat Engine. Судя по поим данным, игроки с этой программой губят последние живые сервера.

  • Like 1

Share this post


Link to post
Share on other sites

Привет, @Graf!

 

Есть информация каким именно образом Cheat Engine влияет на игровой процесс? Может быть, как воспроизвести проблемы, которые вызывает эта программа?


Share this post


Link to post
Share on other sites

@V3ct0r К примеру у нас есть N сундуков. Запускаем Cheat Engine, увеличиваем скорость игры. И открываем +- 1000 сундуков за минуту. В 2-3 окна можно положить GameServer.exe.

Share this post


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

@V3ct0r К примеру у нас есть N сундуков. Запускаем Cheat Engine, увеличиваем скорость игры. И открываем +- 1000 сундуков за минуту. В 2-3 окна можно положить GameServer.exe.

https://github.com/pkodev/proxy

  • Like 1

Share this post


Link to post
Share on other sites
14 часов назад, Graf сказал:

@V3ct0r К примеру у нас есть N сундуков. Запускаем Cheat Engine, увеличиваем скорость игры. И открываем +- 1000 сундуков за минуту. В 2-3 окна можно положить GameServer.exe.

Привет @Graf.  Защищаться надо от пакетов, а не от CheatEngine.
Слать большое кол-во пакетом можно и без CheatEngine - например сняв ограничение на использование на стороне клиента.

Share this post


Link to post
Share on other sites

@Де-Компанье Поэтому я и попросил Виктора что-нибудь придумать, если у него будет время. Многим поможет. Я сам сейяас не имею своего сервера, но жалко оставшиеся приватки. 

 

Share this post


Link to post
Share on other sites

Новая версия 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 by Kst
  • Like 2

Работаем над портированием пиратии под все платформы (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
16 часов назад, mangojkee сказал:

оно многопоточное?


Работаем над портированием пиратии под все платформы (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
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 сказал:

оно многопоточное?

Нет, оно не многопоточное, крайне необходимо его переписать.

 

Один очень крутой человек, благополучно его переписал для нас (если ты это читаешь, брат, спасибо!).

e3d596a07bb3.png

 

Опыт показывает, что во время дудоса прокси-сервер благополучно ложится, а после его рестарта всех игроков кикнет из игры.

Так же этот прокси-сервер не должен работать в соло, есть ряд необходимых настроек в самом ядре, а так же необходимо грамотно настроить iptables.

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

 

Никакие сетивики вам не помогут, никакие программно-прикладные приложения вас не спасут, только прослойка из linux машины (овх за 20 долларов не поможет, мы юзаем игровые впски, защита от ддос атаки там работает чуть иначе), а так же грамотная работа с фаерволлом.

Нам заливали 150к ботов, которые с легкостью обходили прокси-сервер, и пытались авторизоваться в игре, полностью подделывая пакет авторизации, и все это дело доходило до гейт-сервера, и просто на-просто заканчивались локальные порты.

 

По этому, мой совет, оплачивайте долларов за 50 стресстестер, и просто изучайте, читайте рекомендации других людей, благо в гугле их полно, 50% успеха лежит напрямую в линукс-машине, которая будет форвардить вам трафик.

  • Like 1
  • Confused 1

Share this post


Link to post
Share on other sites
9 часов назад, e1mer сказал:

На уровне программы, от этого защищаться бесполезно, просто для экономии твоего времени скажу, что это пройденный этап в моей жизни.

Если вы начнете юзать это, что-же, первые результаты не заставят себя долго ждать.

 

Нет, оно не многопоточное, крайне необходимо его переписать.

 

Один очень крутой человек, благополучно его переписал для нас (если ты это читаешь, брат, спасибо!).

e3d596a07bb3.png

 

Опыт показывает, что во время дудоса прокси-сервер благополучно ложится, а после его рестарта всех игроков кикнет из игры.

Так же этот прокси-сервер не должен работать в соло, есть ряд необходимых настроек в самом ядре, а так же необходимо грамотно настроить iptables.

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

 

Никакие сетивики вам не помогут, никакие программно-прикладные приложения вас не спасут, только прослойка из linux машины (овх за 20 долларов не поможет, мы юзаем игровые впски, защита от ддос атаки там работает чуть иначе), а так же грамотная работа с фаерволлом.

Нам заливали 150к ботов, которые с легкостью обходили прокси-сервер, и пытались авторизоваться в игре, полностью подделывая пакет авторизации, и все это дело доходило до гейт-сервера, и просто на-просто заканчивались локальные порты.

 

По этому, мой совет, оплачивайте долларов за 50 стресстестер, и просто изучайте, читайте рекомендации других людей, благо в гугле их полно, 50% успеха лежит напрямую в линукс-машине, которая будет форвардить вам трафик.

Круто! Хорошие и очень нужные советы (нет). 👍

 

P.s любая Anti-DDos система даже на ваших машинах и есть программно-прикладное приложение написанное на C++ с задачей анализом траффика. 🙂

  • Like 1

Работаем над портированием пиратии под все платформы (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 все-таки речь идет о защите от конкретной программы, которая позволяет флудить пакетами в рамках сетевого протокола игры, а не от полномасштабного DDoS с использованием специализированного софта и ботнетов. Я не думаю что у обычного игрока, который решил побаловаться, будут соответствующие знания и ресурсы. 

 

Соглашусь с @Kst, если есть конкретные советы и методы по защите от CheatEngine, то с радостью выслушаем опытного человека. Поскольку мы тут и так знаем одного "брата", который любит переписывать чужие "прокси-сервера", что DDoS отбивается аппаратными средствами и даже поиском в Google пользоваться умеем.

 

Что касается сабжа, @Graf, у меня мало опыта в области решения подобных проблем. Нужно придумать хорошую методику защиты.

 

Первое, что приходит в голову - это ввести проверку на количество пакетов со стороны клиента за единицу времени. Например, если ты говоришь что для падения сервера достаточно открыть 1000 сундуков в течение минуты, то клиент должен посылать соответствующий пакет с периодом 60 мс. Значит нужно проверять, что между получениями пакетов (действиями игрока) проходит более 60 мс. Эта величина 60 мс - экспериментальная и может подбираться эмпирически. Нужно понять, с какой частотой игрок может заставить клиент отправлять пакеты на сервер используя клавиатуру и мышь в качестве устройств ввода. От этой частоты и будет зависеть контрольная дельта времени между пакетами. 

 

Помимо измерения числа пакетов в единицу времени, можно проверять количество принятых байт за единицу времени. Например, при нормальной игре обмен клиента с сервером происходит со скоростью 100 байт в секунду (значение взято с "потолка"), а чтобы открыть 1000 сундуков за минуту, клиенту придется обмениваться со скоростью 255 байт в секунду, если взять в расчет что размер пакета "открыть сундук" составляет 15 байт.

 

Кроме того, можно попробовать поискать изменения, которые CheatEngine вносит в процесс игрового клиента, заставляя его ускориться. При обнаружении этих изменений необходимо, например, закрывать клиент, как это было реализовано в защите на стороне клиента от WPE Pro, либо отключаться от сервера. Так же можно встроить измерение числа отправляемых пакетов/байт в единицу времени непосредственно в игровой клиент.

  • Like 1

Share this post


Link to post
Share on other sites

@Graf @V3ct0r на самом деле, администрация сервера сама поставила себя в подобные условия, когда игроки вынуждены использовать CheatEngine для открытия сундуков/свитков. 
Первое самое важное решение - ввести проверки на стороне LUA, и реализовать открытие сундуков и использование свитков пачками. То есть, при использовании предмета мы должны проверить свободное место в инвентаре и разом открыть Н сундуков, если это возможно. 

Это костыльная защита, но для решения локальной проблемы здесь и сейчас, без специалиста, который справится с этой проблемы - идеальный вариант исправления ошибки. 

 

Второе решение - изменить баланс и избавиться от такого большого количества предметов. Меняем логику получения предметов и не страдаем от игроков, которые пытаются автоматизировать способ добычи тех или иных предметов.  

 

Конечно же, это не поможет именно с атаками при использовании стороннего ПО. Но игроки не будут вынуждены использовать это стороннее ПО для решения проблем именно с атаками нужно искать специалистов, которые помогут решить проблемы с валидными пакетами в секунду на стороне GateServer/GameServer. 

Edited by Kara Online

Контакты:
Сайт: 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

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

 

По моему мнению, самой идеальной защитой является не превенция использования данных приложений типа CheatEngine, а изменение пакетов. Например, вместо того, чтобы отсылать:

 

клиент -> сервер: персонаж пошёл по координатам (2200, 2700)

 

отправлять:

клиент -> сервер: персонаж хочет пойти по координатам (2200, 2700)

 

Дальше парсить этот пакет на сервере, делать какие-то проверки и отправлять ответ клиенту.

 

^ Это просто концепция и моё видение решения данной проблемы :) 

  • Like 1

Share this post


Link to post
Share on other sites
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-м компьютере.

Share this post


Link to post
Share on other sites
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 создал эту тему, это по какой-то причине не работает.

  • Like 1

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...