Базовая защита игрового клиента

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

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

Идеи:

  • Проверяйте разницу во времени между последним пакетом атаки, игнорируйте все, что слишком быстро. (для сервера)
  • Используйте EnumWindows проверку классов окон и остановите игру, если обнаружен известный редактор памяти. EnumWindows будет выполняться каждый раз при совершении атаки. (для клиента)
  • Используйте ReadProcessMemory для чтения запущенных процессов и поиска сигнатур для известных редакторов памяти.

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

  • Обойти ReadProcessMemory или OpenProcess и выйти при вызове? (хотя я думаю, что это не сработает, потому что эти функции вызываются редактором памяти, а не моей игрой).
  • ReadProcessMemory на себя(игру) и проверь адреса, которые они меняют. Проверьте, не находятся ли значения в пределах нормального диапазона, затем выйдите.
  • Какие-либо предложения?

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


person majidarif    schedule 10.02.2016    source источник
comment
"Check time difference between the last attack packet ignore everything that is too fast. (for server)" для меня это кажется самым простым и безопасным. Если у вас только 600 игроков, вы, скорее всего, можете позволить себе любые накладные расходы на сервер. И если это проверка на стороне сервера, вряд ли они найдут что-то, что сломает то же самое. Почему бы не сделать это?   -  person IVlad    schedule 10.02.2016
comment
@IVlad, да, это реализовано. Проблема в том, что атаки и умения имеют разную задержку анимации. Существует около 100+ различных задержек. Таким образом, текущая реализация проверяет только самую короткую задержку для всех атак. Это означает, что они все еще могут немного сократить атаки с более длительной задержкой.   -  person majidarif    schedule 10.02.2016
comment
@IVlad Я также просто проверяю другие идеи. :)   -  person majidarif    schedule 10.02.2016
comment
Сообщить серверу обо всех временах атаки?   -  person user253751    schedule 10.02.2016
comment
Задержки каким-то образом прописаны в клиентском коде. Рефакторинг, чтобы одни и те же значения использовались в клиентском и серверном коде. Должен контролировать его на стороне сервера. Забудьте о контроле на стороне клиента. Это зря потраченное время и усилия.   -  person Dialecticus    schedule 11.02.2016


Ответы (1)


Обойти ReadProcessMemory или OpenProcess и выйти при вызове?

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

Прочитайте ProcessMemory на себе (в игре) и проверьте адреса, которые они меняют. Проверьте, не находятся ли значения в пределах нормального диапазона, затем выйдите.

Вам не нужно ReadProcessMemory, вы внутри своего собственного процесса. Просто проверьте значение в обычном режиме.

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

Вы также можете добавить в свой клиент библиотеку защиты от отладки, чтобы большинство людей не могли манипулировать вашим процессом. Вот достойный

person GuidedHacking    schedule 18.04.2020