Безопасность сетевой игры: предотвращение читерства и т д..

Сеть в Unity3D

Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение Nolex 10 май 2011, 18:27

Здравствуйте!
Хотел бы задеть один важный вопрос любой сетевой игры, а именно защиту от читерства.

Ситуация такая, есть гоночный симулятор(хотя, это не очень важно, в бродилке похожие проблемы), я пока остановился на сетевом решении от Photon. Все примеры, которые мне попадались с решений от SmartFox/Photon и прочих, юзают неочень защищенную систему — вся механика рассчитывается у клиента, который посылает свои координаты серверу. По сути, никакой проверки нету.

Вот, например, если игрок каким-то образом заюзал какой-нить спидхак или что-то подобное, то сервер это схавает. Вот были координаты игрока (0.0.0) и тут, хоп! — резко стали (10000.10000.10000).

Пока вижу несколько решений:
- проверка скорости на стороне сервера. Если скорость игрока, которую получил сервер, выше максимально допустимой — банить игрока.
- проверка координат на стороне сервера. Если координаты игрока, за последние N-секунд резко увеличились — банить.
Ну вот пока всё, что пришло в голову.. Проверки конечно, хорошо, но только частично могут обезопасить(в большинстве случаев).

И еще, каким макаром внедряют читы? Сразу говорю, я не очень хорошо представляю, как это происходит. Но думаю примерно так — когда юнити шлёт серверу инфу, взломщик перехватывает эти инфу и вносит свои вредоносные правки.

Ну вот вроде пока всё, хочется услышать Ваше мнение по поводу безопасности и использованию читов!

Заранее спасибо!
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 10 май 2011, 19:21

Nolex писал(а):Пока вижу несколько решений:
- проверка скорости на стороне сервера. Если скорость игрока, которую получил сервер, выше максимально допустимой — банить игрока.
- проверка координат на стороне сервера. Если координаты игрока, за последние N-секунд резко увеличились — банить.
Ну вот пока всё, что пришло в голову.. Проверки конечно, хорошо, но только частично могут обезопасить(в большинстве случаев).

И еще, каким макаром внедряют читы? Сразу говорю, я не очень хорошо представляю, как это происходит. Но думаю примерно так — когда юнити шлёт серверу инфу, взломщик перехватывает эти инфу и вносит свои вредоносные правки.

Проверка на перемещение - одна из самых ненужных... Правильно переместить персонажа в конкретную точку, не так просто как кажется, потому данный метод читерства - очень слабо распространен...
Да и проверка передвижений на сервере - больно емкая штука... Проще как у Вас во втором варианте - проверять на большие изменения значений...
По поводу взлома - правильно представляете, но это только один вариант... Есть варианты с взломом самого сервера или клиента...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение Ert Donuell 10 май 2011, 23:08

Можно организовать p2p сеть и проверять игроков на, так называемых, "Доверенных Клиентах". Т.е. На одной или нескольких машинах Вы запускаете специальные клиенты, которые производят проверки. Но вариант с проверкой скорости лучше) На мой взгляд, по крайней мере.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение Guyver 11 май 2011, 07:46

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

не будет никаких читов + коррекция при лагах и пингах, подвисаниях и тд

мне это так видится.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 11 май 2011, 09:12

Guyver писал(а):мне это так видится.

А нагрузку на сервер и сеть пробовали просчитать?
Для того чтобы сервер мог учитывать передвижение, он также должен знать полную карту по которой происходит перемещение, далее, он должен будет обрабатывать запросы достаточно часто, чтобы клиент не тормозил при движении... Здесь желательна синхронизация чуть не каждый кадр... Или придется, как в lineage - забыть про прямое управление...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение gnoblin 11 май 2011, 12:55

mentors писал(а):
Guyver писал(а):мне это так видится.

А нагрузку на сервер и сеть пробовали просчитать?
Для того чтобы сервер мог учитывать передвижение, он также должен знать полную карту по которой происходит перемещение, далее, он должен будет обрабатывать запросы достаточно часто, чтобы клиент не тормозил при движении... Здесь желательна синхронизация чуть не каждый кадр... Или придется, как в lineage - забыть про прямое управление...


Да ладно - зачем каждый кадр-то? :ymsmug:

Я с Guyver согласен, правда единственный нормальный вариант для симуляции мира который мне видится - это запускать на стороне сервера инстанс юнити с упрощенной сценой :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 11 май 2011, 13:35

gnoblin писал(а):Да ладно - зачем каждый кадр-то? :ymsmug:
Я с Guyver согласен, правда единственный нормальный вариант для симуляции мира который мне видится - это запускать на стороне сервера инстанс юнити с упрощенной сценой :)

Ну смотря для какой игры... Для РПГ аля Lineage - подойдет, а вот симуляторы и шутеры - уже не потянет, слишком большие накладки в управлении будут, особенно там где не самая большая скорость у клиентов... Представьте, жмешь клавишу вперед, и сразу прыжок, а он тебе движение с задержкой в 1/10 секунды возвращает (потери времени на прохождение пакетов в обе стороны+накладные расходы при обработке на сервере)... Кажется не много, но на самом деле - очень заметно будет...
Ну и соответственно представьте что у Вас 2000-3000 клиентов... Нагрузка на канал будет тоже не слабой...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение gnoblin 11 май 2011, 14:09

для этого существует предсказание
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 11 май 2011, 15:12

gnoblin писал(а):для этого существует предсказание

Предсказание чего в данном случае? Пользовательского ввода? Так Вы попробуйте его предсказать... Предсказания хороши для отображения перемещений других игроков, а для персонажа под управлением клиента - только усугубите глючность управления...
Пример: Игрок жмет W - бежим вперед, впереди препятствие, предсказываем что игрок скорее всего прыгнет (передаем перемещение в прыжке), а игрок перед препятствием присел и начал вести огонь... Конечно это все в упрощенном виде, но попробуйте реализовать КС приложение и обработать реалтайм ввод через сервер... Думаю Вам так играть не понравится (да и не забудьте соединение через сторонний прокси пустить, на локалхосте заметно почти не будет)...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение Toshik 11 май 2011, 16:35

mentors писал(а):
gnoblin писал(а):для этого существует предсказание

Предсказание чего в данном случае? Пользовательского ввода? Так Вы попробуйте его предсказать... Предсказания хороши для отображения перемещений других игроков, а для персонажа под управлением клиента - только усугубите глючность управления...
Пример: Игрок жмет W - бежим вперед, впереди препятствие, предсказываем что игрок скорее всего прыгнет (передаем перемещение в прыжке), а игрок перед препятствием присел и начал вести огонь... Конечно это все в упрощенном виде, но попробуйте реализовать КС приложение и обработать реалтайм ввод через сервер... Думаю Вам так играть не понравится (да и не забудьте соединение через сторонний прокси пустить, на локалхосте заметно почти не будет)...


Предсказание работает немного по-другому.
Рассмотрим весьма упрощенный вариант с серверным подтверждением перемещений:
1. Игрок жмет "Вперед"
2. Клиент проверяет геометрию.
3a. В случае успеха в шаге 2 клиент отправляет пакет "Вперед" серверу.
3b. В случае неуспеха в шаге 2 клиент либо ничего не отправляет, либо отправляет только информацию о смене анимации (игрок бежит в стену).
3c. В случае успеха в шаге 2 клиент начинает визуальное перемещение игрока по игровой сцене (собственно этот шаг и есть предсказание)
4. Сервер получает пакет "Вперед"
5. Сервер считает геометрию.
6a. В случае успеха шага 5 сервер отправляет подтверждение (можно уже с новыми координатами игрока) клиенту
6b. В случае неуспеха шага 5 сервер шлет клиенту пакет а-ля "не звиздите, вас тут не стояло" (с реальными координатами игрока)
7. Клиент получает ответ от клиента и синхронизирует положение игрока на сцене с полученными данными (тут возможен визуальный "лаг" в случае, если с момента шага 3a прошло значительно времени, либо игрок просто пытался считерить и пройти сквозь стену)

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

А вообще есть довольно много описаний алгоритмов предсказаний...
Аватара пользователя
Toshik
UNец
 
Сообщения: 36
Зарегистрирован: 17 июн 2010, 20:25
Откуда: Питер

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 11 май 2011, 17:58

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

Почитайте там длинная дискуссия на данную тему... Решения как такового - так и не найдено. Но повторюсь еще раз, алгоритмы (хоть с предсказанием, хоть без) на основе расчета положения персонажа сервером - допустимы для игр с низкой или средней динамикой... Попробуйте хоть раз реализовать то, что описали выше и запустить на сервере пакет к которому идет от 100 до 300 мс, и все это для гонок или шутера. Поверьте, даже при 100мс - играть будет практически невозможно (ну наверное на 100 - всетаки будет более менее нормально, но от 200 и выше - лунная походка или бег на беговой дорожке, которая сама движется в рандомном направлении)...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение Toshik 11 май 2011, 18:08

mentors писал(а):
Toshik писал(а):При реализации данного способа предсказания честный игрок с быстрым каналом не заметит никаких визуальных рывков.
А вообще есть довольно много описаний алгоритмов предсказаний...
алгоритм работы предсказаний я более или менее представляю, но у Вас больше не предсказание описано, а синхронизация. Предсказание, это когда сервер посылает данные о будущем положении игрока, на основании полученного ввода, у Вас же - просто проверка.

Почитайте там длинная дискуссия на данную тему... Решения как такового - так и не найдено. Но повторюсь еще раз, алгоритмы (хоть с предсказанием, хоть без) на основе расчета положения персонажа сервером - допустимы для игр с низкой или средней динамикой... Попробуйте хоть раз реализовать то, что описали выше и запустить на сервере пакет к которому идет от 100 до 300 мс, и все это для гонок или шутера. Поверьте, даже при 100мс - играть будет практически невозможно (ну наверное на 100 - всетаки будет более менее нормально, но от 200 и выше - лунная походка или бег на беговой дорожке, которая сама движется в рандомном направлении)...


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

PS Посмотрите, для примера, игры от Valve. Взять хоть тот же пресловутый Counter Strike: не хочу вас расстраивать, но в нем клиент вообще не начнет движение игрока, пока не получит положительный ответ от сервера. И даже не важно что именно там сервер у себя считает/проверяет, но при значительных задержках игрок получит дерготню.
Аватара пользователя
Toshik
UNец
 
Сообщения: 36
Зарегистрирован: 17 июн 2010, 20:25
Откуда: Питер

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 11 май 2011, 18:29

Toshik писал(а):PS Посмотрите, для примера, игры от Valve. Взять хоть тот же пресловутый Counter Strike: не хочу вас расстраивать, но в нем клиент вообще не начнет движение игрока, пока не получит положительный ответ от сервера. И даже не важно что именно там сервер у себя считает/проверяет, но при значительных задержках игрок получит дерготню.
Угу, потому-то сервера CS и вмещают всего по несколько игроков... а при 2000-3000 онлайн?
Toshik писал(а):Вы уж определитесь чего желаете - либо быстрого отклика, либо минимум читерства. Эти две цели находятся на разных полюсах.
Хм, я ничего не желаю, я просто предостерегаю топикпастера от слепого следования советам вроде расчетов всего и вся на сервере...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение Toshik 11 май 2011, 18:37

mentors писал(а):
Toshik писал(а):PS Посмотрите, для примера, игры от Valve. Взять хоть тот же пресловутый Counter Strike: не хочу вас расстраивать, но в нем клиент вообще не начнет движение игрока, пока не получит положительный ответ от сервера. И даже не важно что именно там сервер у себя считает/проверяет, но при значительных задержках игрок получит дерготню.
Угу, потому-то сервера CS и вмещают всего по несколько игроков... а при 2000-3000 онлайн?

Ну, тут скорее вопрос надо ставить так - а может ли быть ММО шибко динамичной :)

mentors писал(а):
Toshik писал(а):Вы уж определитесь чего желаете - либо быстрого отклика, либо минимум читерства. Эти две цели находятся на разных полюсах.
Хм, я ничего не желаю, я просто предостерегаю топикпастера от слепого следования советам вроде расчетов всего и вся на сервере...

Сорри, попутался. Перепутал вас с ТС...
Аватара пользователя
Toshik
UNец
 
Сообщения: 36
Зарегистрирован: 17 июн 2010, 20:25
Откуда: Питер

Re: Безопасность сетевой игры: предотвращение читерства и т д..

Сообщение mentors 11 май 2011, 18:44

Toshik писал(а):Ну, тут скорее вопрос надо ставить так - а может ли быть ММО шибко динамичной :)
Про ММО изначально ничего не говорилось... Говорилось про сервер и клиент, без упоминания жанра игры. Вот отсюда и мои замечания...
Про ММО - согласен, обработка перемещения на сервере - реализуемо и вполне работоспособно...
Для более динамичных игр - нет (ну или почти нет, все зависит от масштабов)...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

След.

Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1