Четверг, 14 Ноября 2024, 10:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Защита от читеров - почему это так сложно?
robertonoДата: Понедельник, 21 Апреля 2014, 19:23 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
Во время разработки моей игры у меня возник вопрос о борьбе с читерами. Игра не готова, но защищаться от читеров как то надо будет.
С игрой планирую идти в стим (а значит загрузка файлов через стим). Мало ли это что то меняет.
Как вообще работают читы? Мне об этом не очень много известно.
Например aim (наводка на голову). Любой чит это изменение файлов игры? Т.е. изменяется их размер.
Почему бы просто не сверить размер файлов при запуске?
В чём подвох?
Не может быть всё так просто smile
VirtualcreatureДата: Понедельник, 21 Апреля 2014, 19:56 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
robertono, Всё зависит от самой игры - то, как в игре представлена голова, информация о голове, информация об игроке и пуле, которую он выпускает из своего оружия. Можно эту информацию научиться скрывать, или же смешивать с ненужной информацией. Можно отучить компьютер думать за человека, можно заблокировать приказы, отдаваемые серверу, но всё это всегда тесно связано с тем, как устроена игра.

Сложна защита потому что сделать игру безопасной - дорого для ресурсов. Представь себе, что ты можешь заставить сервер учитывать то, видит ли игрок противника, и на основе этого предоставлять игроку информацию: бац! - и игрок никогда не сможет видеть сквозь стены. Ты можешь сделать так, чтобы сервер сам просчитывал поведение пуль и снарядов так, чтобы компьютер игрока мог только заявлять "Я смотрю в ту сторону и жму на курок", при этом предоставляя серверу данные не о положении, а о перемещении - сразу делаем спидхак и автоаим бесполезными. Вот только для таких вычислений нужен почти нулевой пинг, мощный сервер и руки прямее самой прямой линии.


Сообщение отредактировал Virtualcreature - Понедельник, 21 Апреля 2014, 20:03
robertonoДата: Понедельник, 21 Апреля 2014, 20:02 | Сообщение # 3
Чокнутый Кот
Сейчас нет на сайте
Virtualcreature, голова коллайдер, если игрок лучем попал в голову то посылается байты на сервер хранящие в себе ID в кого попало, кто стрельнул, с чего, и в голову или нет.
Защиты ноль.
XeoDozДата: Понедельник, 21 Апреля 2014, 20:04 | Сообщение # 4
XeoDoz Games
Сейчас нет на сайте
robertono, когда-то давно увлекался читерством под Онлайн игры. И файл не обязательно изменияет размер. Допустим файл gcup.dll будет весить 136 кб и содержать в себе код "<primer>12345</primer>", профессиональный читер будет склепает на C++ файл с аналогичным названием и размером, но при этом код будет совершенно иным.

Не всегда размер файлов меняется. Может вообще ничего не меняться при включении игры, а при запуске потенциальный читер запустит тренер для игры, который внедриться в само приложение. В основном трейлеры для оффлайной клепают на програмке Cheat Engine и его многотысячных аналогах. Он внедряется в структуру кода и заменяет байты, отвечающие за количество денег, здоровья, наводку оружия, разброс, урон(он же дамаг), выпад артов, ИВ(игровой валюты) и т.д.

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



Ехал Falco через Falco, видит Falco в реке Falco, сунул Falco руку в Falco, Falco Falco Falco Falco
Очень рад плюсеГгам в репу
robertonoДата: Понедельник, 21 Апреля 2014, 20:07 | Сообщение # 5
Чокнутый Кот
Сейчас нет на сайте
XeoDoz, было бы интересно послушать)
Моя игра - онлайн шутер, на юнити (всем понятно) и сервер я использую photon server. Можно немного защитной логики на сервере написать. Изменения хп тут уже не будет smile
Изменить урон так же нельзя, сервер знает статистику каждого оружия.
EchoITДата: Понедельник, 21 Апреля 2014, 20:17 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
robertono, когда-то давно увлекался читерством под Онлайн игры. И файл не обязательно изменияет размер. Допустим файл gcup.dll будет весить 136 кб и содержать в себе код "<primer>12345</primer>", профессиональный читер будет склепает на C++ файл с аналогичным названием и размером, но при этом код будет совершенно иным.
Не всегда размер файлов меняется. Может вообще ничего не меняться при включении игры, а при запуске потенциальный читер запустит тренер для игры, который внедриться в само приложение. В основном трейлеры для оффлайной клепают на програмке Cheat Engine и его многотысячных аналогах. Он внедряется в структуру кода и заменяет байты, отвечающие за количество денег, здоровья, наводку оружия, разброс, урон(он же дамаг), выпад артов, ИВ(игровой валюты) и т.д.

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

Чет ты как-то слабо увлекался. biggrin

robertono, читы работают в основном двумя способами:
а) Подмена байтов в памяти. Так можно сделать даже аимбот, хотя морока та ещё - юзать этот способ для аимбота. В основном, через подмену памяти изменяют переменные, например, координаты игрока. Поэтому, для того, чтобы не было "телепорт-хаков" и прочей ерунды, координаты положения каждого игрока нужно просчитывать на сервере. И то место, откуда вылетает пуля, тоже просчитывать на сервере, а то я знаю одну игру, где летать античит не даёт, но можно "запустить" пулю из любого места карты. biggrin
б) "Инъекция" DLL. Используется для создания читов типа wallhack, esp и aimbot (в основном). Чаще всего работают, с рендером игры (D3D или OpenGL) и меняют, к примеру, приоритет рендера какого-либо типа моделей (wallhack) или отрисовывают квадраты вокруг определённых моделей на карте (esp). Защититься от такого гораздо сложнее, ибо никакие переменные эти взаимодействия с рендером не затрагивают.

Ну это если коротко, а так есть много нюансов, о которых можно погуглить. Только гуглить нужно не с той стороны. wink


Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Понедельник, 21 Апреля 2014, 20:19
MadDoctorДата: Понедельник, 21 Апреля 2014, 20:17 | Сообщение # 7
почетный гость
Сейчас нет на сайте
robertono, вообще (незнаю как для твоей игры) для топовых игр читы в 2013 году уже делали на уровне ПК (сам писал хаки в bf3 и pointblank). например те же популярные WH и AIM:
WH работает по принципу замены значений отрисовки моделей игрока, чтобы обмануть клиент и отрисовать модель не за стеной а перед ней.
у AIM разные принципы работы, боксовые матрицы самые популярные. никак ты не скроешь

Цитата robertono ()
информация о голове, информация об игроке и пуле, которую он выпускает из своего оружия

так как все это идет на уровне ПК игрока, а не на уровне сервера.
Самая лучшая защита это защита клиента, или лучше отдельный античит предоставляемый с игрой. Задача античита - сканировать систему на наличие изменений, которые затрагивают значения игры. Такое сейчас популярно (bf3-4, point blank и т.д), но тут тоже есть свои ньюансы, если нужно будет - обойдут. нету идеальной защиты.
robertonoДата: Понедельник, 21 Апреля 2014, 20:21 | Сообщение # 8
Чокнутый Кот
Сейчас нет на сайте
MadDoctor, мне бы хотя бы что нибудь, а то сейчас игра "голая". А есть ли способы защитить переменную?
XeoDozДата: Понедельник, 21 Апреля 2014, 20:24 | Сообщение # 9
XeoDoz Games
Сейчас нет на сайте
robertono, я, честно сказать, позабыл почти все, но могу посоветовать группу сайтов, где на все твои вопросы ответят очень убедительно и понятно:

Выбирай на свое усмотрение. Надеюсь помог smile



Ехал Falco через Falco, видит Falco в реке Falco, сунул Falco руку в Falco, Falco Falco Falco Falco
Очень рад плюсеГгам в репу


Сообщение отредактировал XeoDoz - Понедельник, 21 Апреля 2014, 20:25
robertonoДата: Понедельник, 21 Апреля 2014, 20:24 | Сообщение # 10
Чокнутый Кот
Сейчас нет на сайте
Я ещё знаю штуку VAC (Valve anti cheat). Проверяет на изменение файлов или как то так. Только если ты почитерил то забанит вроде весь steam аккаунт)
В новой игре Rust так многих забанили
EchoITДата: Понедельник, 21 Апреля 2014, 20:25 | Сообщение # 11
старожил
Сейчас нет на сайте
Цитата
нету идеальной защиты.

Анти-валлхак - создавать префабы игроков на клиенте только когда игрок может их видеть. Затратно, но работает. Так сделано в Dota 2 - там враги удаляются у клиента как только входят в туман войны. Тут уже про это писали, кстати.
А вот анти-аимбот как сделать - я подсказать не смогу. biggrin


Долгожданный анонсик: State of War
berilДата: Понедельник, 21 Апреля 2014, 20:26 | Сообщение # 12
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
нужно каждый пук клиента проверять на сервере)

Ну еще как вариант обфускация




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)


Сообщение отредактировал beril - Понедельник, 21 Апреля 2014, 20:28
EchoITДата: Понедельник, 21 Апреля 2014, 20:30 | Сообщение # 13
старожил
Сейчас нет на сайте
Цитата
Ну еще как вариант обфускация

Никак от читерства не поможет.


Долгожданный анонсик: State of War
berilДата: Понедельник, 21 Апреля 2014, 20:38 | Сообщение # 14
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Еще я не знаю, может лишнее говорю.
Но почему не шифровать данные и ограничить доступ.
Я вот недапвно играл в одну игру и мне понравелись модельки из нее и текстуры. И я хотел вытянуть их зашел в корневую папку и обрадовался, там все файлы были подписаны как надо (model, texture и т.д) и все были запакованы в архив .rar. НО вскоре я обламался так как при попытке открыть архив, запрашивало пароль




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
MadDoctorДата: Понедельник, 21 Апреля 2014, 20:51 | Сообщение # 15
почетный гость
Сейчас нет на сайте
EchoIT, антиаим ну никак не сделать, даже если ты там 10 лет будешь писать антиаим, все равно возьмут и сделают какой нибудь пиксельный аим biggrin придется каждый день менять пиксели на модельках

Цитата robertono ()
MadDoctor, мне бы хотя бы что нибудь, а то сейчас игра "голая". А есть ли способы защитить переменную?

защищай переменные другими скрытыми переменными biggrin а вообще, зачем тебе их защищать? для WH и aim это не нужно, только если защита денег и жизней например. это легко делается, просто записывай на сервер данные и проверяй их с клиентом. в лучшем случае у игрока будут "нарисованные" деньги, которые исчезнут после релога
robertonoДата: Понедельник, 21 Апреля 2014, 21:02 | Сообщение # 16
Чокнутый Кот
Сейчас нет на сайте
MadDoctor, а что самое простое есть что поможет защититься от aim ?
DrVooDooДата: Понедельник, 21 Апреля 2014, 23:05 | Сообщение # 17
почетный гость
Сейчас нет на сайте
robertono, не выставлять разные id для разных частей тела. Соответственно и урон во все части тела делать одинаковым. Но тут и минус свой - не сделаешь хэдшот.
Для контры в свое время смотрел читы, там можно было выставить разные зоны наведения - руки, ноги, торс, голова.

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


Сообщение отредактировал DrVooDoo - Понедельник, 21 Апреля 2014, 23:16
EchoITДата: Понедельник, 21 Апреля 2014, 23:54 | Сообщение # 18
старожил
Сейчас нет на сайте
DrVooDoo, у моделей есть такая штука, как кости. И почему-то я думаю, что их позиции вполне себе можно отловить для аимбота.

Долгожданный анонсик: State of War
Storm54Дата: Вторник, 22 Апреля 2014, 01:07 | Сообщение # 19
постоянный участник
Сейчас нет на сайте
Первым делом нужно написать античит, который будет защищать от спидхака, включаемого посредством Cheat Engine, т.к. его попробуют первым делом. Так же желательно ввести защиту переменных, если, конечно, всякие параметры полета пули, урона и т.п. не считаются на сервере. Про анти аим можешь забыть - его просто невозможно написать, т.к. на сервере проверить, действительно ли игрок, а не программа, прицелилась точно в голову, невозможно. На клиенте же писать анти аим так же невозможно - любой античит на клиенте можно отключить. Это касается базовых античитов, которые должны быть в любой онлайн игре.
Хоть и читы на подобии спидхака и аима, бессмертия, скорострельности могут доставить неприятности другим игрокам, все же они не такие уж и критичные - достаточно сделать возможность кикнуть игрока с комнаты посредством голосования. "Обезопасить" нужно так же и сервер, чтобы он все поступающие данные проверял не только на валидность, но еще и игнорировал те команды, которые в принципе не мог прислать клиент.
Например:
Игрока убили и он ждет респауна. А что, если в этот момент чит отправит команду на стрельбу из оружия или метания гранаты?! В лучшем случае получится, что мертвый игрок стреляет и выглядеть это будет очень странно, а может и просто получиться краш сервера(тут все зависит от кода на сервере). Или, например, мертвый игрок садится в машину и начинает разъезжать по карте. На сервере такие моменты нужно учесть в первую очередь. Лично я написал несколько разных классов, каждый из которых обрабатывает только те команды, которые в нем описаны. Эдакий менеджер состояний получается.


Сообщение отредактировал Storm54 - Вторник, 22 Апреля 2014, 01:08
robertonoДата: Вторник, 22 Апреля 2014, 09:14 | Сообщение # 20
Чокнутый Кот
Сейчас нет на сайте
Еще кстати есть простой способ защититься от спидхака. Писать логику передвижения на сервере трудно. Я видел античит для Rust, и там для защиты от спидхака было что то типо если игрок за 5 сек прошел больше 3 метров (например), то кик.
Еще вы говорили, например игрок в одном месте, а стреляет из другого. Тут можно проверять на сервере еслм игрок стреляет от себя дальше 1 метра - читер.
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг