На ютубе появился профиль анонима, снимающего видео про читы в АА. Справедливости ради, стоит отметить, что панель которой пользуется аноним, больше всего похожа на инструмент разработчика (можно сразу на 10 минуту перемотать чтобы понять от чего такие выводы). Потому что если это модификация клиента доступная каждому, мне становится горько. К слову, проекту АА уже 4 года. Так что это не стартовая уязвимость кода. Ссылка на профиль анонима Ютуб.
На ютубе появился профиль анонима, снимающего видео про читы в АА. Справедливости ради, стоит отметить, что панель которой пользуется аноним, больше всего похожа на инструмент разработчика (можно сразу на 10 минуту перемотать чтобы понять от чего такие выводы). Потому что если это модификация клиента доступная каждому, мне становится горько. К слову, проекту АА уже 4 года. Так что это не стартовая уязвимость кода. Ссылка на профиль анонима Ютуб.
54 комментария
Новый слоган моей бывшей КП: «Луций не наш уровень». И что за посыл они этим формируют, я не понимаю.
Определенно могу сказать одно: за 2 недели, Весты не расформировались, хоть и потеряли в весе раза в три. Громкий заголовок моей предыдущей записи не подтвердился. Признаю, что был не прав, уверенно заявляя о планах, как о свершившемся.
Знающие свое дело в отладке и реверс-инженеринге люди такие вещи легко создают.
Лет 5-3 назад библиотек общего назначения для внедрения в сторонние процессы еще небыло. Теперь же есть несколько стабильных и удобных открытых библиотек.
Только, опять же, без соответствующих знаний отладки и реверса пользоваться этими библиотеками почти не получится.
Так что, Kir-log, пожалуй я сразу избавлю тебя от таких надежд. :)
Все эти технологи доступны каждому специалисту, а знания, в принципе, доступны вообще каждому. Не всякий спец с высшим техническим сможет такое осилить, но факт есть, знания доступны каждому.
Остается верить, что разработчики Ashes of Creation выберут адекватных локализаторов и смогут защитить свою игру от подобных вещей.
Тот самый момент, когда уже знаешь куда переедешь, но новый дом еще не достроен ни разу.
Из того что на видео:
1. No clip — у текстуры (персонажа или окружения) отключается физическая граница, на экране отображение есть, но на деле это просто «проекция» бестелая.
2. Wall hack — если сервер выдает клиенту положение игроков вокруг, то чит просто отображает врага сквозь текстуры (как бы делая их не непрозрачными).
3. Спидках — если сервер не проверяет скорость игрока (а он это не делает, иначе ему нужно проверять каждый шаг всех игроков онлайн), то никаких проблем сделать спидхак нет. Единственная защита походу в игре есть на макс.скорость, так как бег выше 15 м/с нельзя судя по видео задать.
4. Всякие отображения коробок/линий и тд — просто функционал движка и чит просто его активирует (его скорее всего придумали в Unreal Engine и разрабы самой АА не причем).
5. Защита от падений — думаю реализовано тем, что в последний момент при падении задается штатная скорость прыжка и приземления.
6. Полет — просто меняется координата Z у персонажа, для любой игры, где есть перемещение по Z можно сделать флайхак/баг геодаты.
7. Зумхак — территории отрисовываются клиентом, так что просто задается величина удаления камеры. Это любой ребенок сделает, если GG работает криво и не отслеживает модификации в оперативной памяти (грубо говоря можно запустить аналог artmoney, найти параметр зума и поставить 100500) даже без спец.читов.
Я уже в статье своей расписывал как с этим можно было бы бороться. Но кому это нужно? Пока читы не в паблике и не влияют на комфорт игроков (так, чтобы весь сервак вайнил как было с куполами) — насрать абсолютно всем. Читерам, разрабам, локализаторам и тд.
Это даже в видео видно по монитору модулей процесса.
Относительно GG/Frost/Battleye/и.т.д. сказать могу еще так.
Будучи фактически руткитом, этот «защитный софт» представляет из себя опасность для пользователей, т.к. буквально пробивает брешь в защите ПК игрока.
С другой стороны, обернуть же весь этот «защитный софт» в свою личную песочницу для знающего эти тонкости человека труда так же не составляет. И можно дальше делать свои темные дела.
Я понимаю что ММОзговед это не форум технических специалистов, поэтому стараюсь лишнего и непонятного не писать. Однако…
Есть гораздо более лояльные пользователю средства защиты своего проекта. Но я до сих пор не видел чтобы ими пользовались в ММО индустрии.
Даже Planetside2 очень сильно огорчил меня тем, что недавно предложил установить в мою систему сервис Battleye. Я до последнего надеялся что уж в Daybreak есть хоть один инженер с подходящими навыками.
Кстати, Jolly , еще в прошлой твоей статье хотел обратить внимание.
Серверу не сложно 60-120 (но обычно — 100) раз в секунду отслеживать позиции и свойства 20-30-60 тысяч игроков одновременно. Для этого есть все необходимые условия.
Просто во многих случаях разработчики предпочитают вкладывать в сервер меньше знаний об устройстве самого мира и о законах игры, делая сервер как бы «тоньше». В этом случае все проверки выполняются только на клиенте и… все мирятся с богатейшими возможностями по обходу правил игры. А концепции коллективного доверия (как в электронных валютах) в ММО и сверхтонких серверов еще только бесформенно витают в головах инженеров.
Результаты применения блокчейна и коллективного доверия в других областях делают хорошую репутацию этим решениям. Возможно кто-нибудь уже пробует тайком реализовать коллективное доверие в играх. Только об этом, наверное, не распространяются или я просто этого не знаю.
Но еще интернет может работать по-другому, децентрализованно. Вместо DNS-сервера, твой браузер мог бы сходить к близжайшему соседу в сети и спросить, не видел ли тот где-нибудь сайт с именем «mmozg.net». Правило шести рукопожатий работает даже тут и передавая твой вопрос от соседа к соседу клиенты сети найдут точный адрес.
Только, вот беда… Можно ли верить своему соседу? Не хочет ли он нам зловреда подсадить? Правильный ли адрес моего банка он мне подкинул?
Системы коллективного доверия хорошо работают в децентрализованных доменных системах. Найденный ответ рассылается еще некоторым клиентам в сети с целью проверки на подлинность. И только когда часть сети (коллектив) доверяет найденной информации, информация принимается на веру и самим вопрошающим.
Блокчейн является частью коллективного доверия. В этом случае подлинность записи определяется поиском в блокчейне. Но само коллективное доверие может быть реализовано и без блокчейна, на основе других механизмов.
Либо тонкий клиент, который еще только пытаются присобачить к играм, хоть мне и не очень понятно какой мощности должна быть серверная база, для просчета качественной графики на лету для пользователя. Просто впечатление такое, что потребуются колоссальные мощности и это будет низкорентабельно. Я уж не говорю о пингозависимости. Попробуйте поиграть с дальнего востока на московском сервере, который передает вам HD графику в реальном времени.
Либо паранойя со стороны сервера и пряморуко написанная перепроверка любого чиха со стороны клиента. Всегда считать что клиент модифицирован и воспринимать информацию от него как попытку совершить невозможное, обрезая его поползновения фильтром допустимых реакций.
С другой стороны нельзя отрицать тот момент, что выбор игр в таких сервисах был скажем так не очень и возможно именно это погубило сервисы, а вовсе не отграничение в 720p и некоторое повышение времени отклика.
Собственно Стим уже некоторое время предлагает нечто подобное, ты можешь из Стима на ноуте запустить игру на ПК и она будет в режиме стрима отправляться тебе обратно на ноут.
Правильный клиент должен быть тонким, только для этого не надо переносить его графику в облако. Вообще, по моему, вся эта затея со стримингом игр провальна.
В этом плане устройство игры максимально оптимально тогда, когда вся его графическая часть выполняется на ПК пользователя. И этот момент не может нести никакой опасности для игрового процесса.
Тонкий клиент — это тот, кто не думает сам, а лишь подчиняется безоговорочной диктатуре сервера. Любой думающий за сервер клиент сразу становится источником читов.
Как вы хотите сделать клиент тонким, в то время, как нам понадобится вся механика игры прописанная внутри клиета? Все объекты, анимация, текстуры.
Ну и тонкий клиент, получающий графику — это единственное решение, которое позволяет решить проблему ботов и радаров, что невозможно сделать при иных вариантах.
Не думаю, что этот вариант лучше, чем классическая двойная проверка, когда сперва клиент отсеивает все по его мнению некорректные действия, а потом сервер делает окончательную проверку, не доверяя клиенту.
Никогда нельзя доверять клиентским данным в игре т.к. у нас рядовой пользователь сервиса и злоумышленник — это одно и то же лицо.
Но это еще только фантазии…
www.factorio.com/blog/post/fff-147
При этом сам рынок пока не выказывает достаточно покупательного спроса для разработки новых сетевых движков, с устойчивостью ко взлому, как врожденному свойству системы.
Т.е. и верхи сохраняют контроль над ситуацией, и низам в принципе норм.
Х
Y
Z
Speed
Zoom
Exp
HP
MP
Money
Инвентарь исключаем, считая что он целиком хранится на сервере, как и эквип (при расчёте взаимодействия), хотя на видео в сабже читер выбирает любые планеры на стороне клиента.
Кулдауны ~10 скиллов (пусть они вместе с id и временем займут 160 бит)
И тд
Округлим до примерно 500 бит на одного клиента. Возьмём проверку раз в секунду (хотя в идеале каждое действие согласовывать с сервером нужно — то есть все кроме графики просчитываться на сервере).
1000 пользователей это 0,5 Мбит/сек. 10к пользователей — 5мбит в секунду + нагрузка на проверку этих данных на сервере.
Конечно у локализаторов гигабитные каналы и вроде как 5 Мбит/сек немного. Пусть даже служебные пакеты и нагрузку на поддержание 10к активных коннектом не берём в расчет. Но раз в секунду это мало. Учитывая реакцию игроков — нужно 10 раз в секунду. Как и отслеживание всего 15 параметров — в реальной жизни их видимо больше. Итого смело на эти наши проверки сервак должен выделить отдельно 100 Мбит/сек. При канале условном в 1гбит/сек. И тут в чистом поле встретилось 100х100 игроков, активно юзающих скиллы.
К этому добавится пинг. Значит при игре с 3G модема из Урюпинска сервак будет держать соединения кучу времени открытыми, дожидаясь ответов (если tcp/IP) или ждать ответов на свои UDP пакеты, попутно Васе из Урюпинска повышая рейтинг возможного яитерства.
Но на самом деле это полумера. Реально нужно сделать тонкий клиент или «тонкий клиент» без обработки графики. То есть все взаимодействия начиная с поворота камеры (хотя можно упустить), заканчивая любым шагом или скиллом — просчитывать на сервере и выдавать только данные для графической обработки клиенту. Причём строго те, которые он может увидеть.
Практика показала, что таких игр вообще нет. Все движение в 100% случаев в 3D клиентах просчитывается на стороне клиента. При этом серваки один фиг жутко лагают. Но игрок хотя бы получает визуально бегающего чара, с непрожимаемыми скольким как в Блесс.
Второй момент, что если ввести проверку раз в секунду, то это УЖЕ на многие порядки лучше, чем отсутствие проверок в принципе.
Третий момент, в том же LoL вполне успешно работает система трибуналов. Это не значит, что банят всех, кто этого заслуживает и не банят невиновных, тем не менее наличие саморегуляции в таких вопросах большой плюс, однако в других проектах всё до сих пор в итоге упирается в админский произвол.
Ещё нет ничего более весёлого, чем дать любую форму модерки игрокам противоположных кланов. Про абузы и перегибы есть классная заметка на Хабре о скайпе и возможности заблочить любого юзера: https://habrahabr.ru/post/316912/
По крайней мере оперативная передача информации необходима только о тех игроках, которые находятся в Field of view клиента в настощий момент. Т.е. не каждый их 200 человек в сражении обязательно видит всех остальных 199. Думаю, мало кто видит хотя бы четветь. А при обилии естественных препятствий и гемдизайнерских решений типа инвиз/блайнд/хайд и того меньше.
В CU собираются передавать информацию об актуальном состоянии игры через прокси. Т.е. сервер посылает несколько копий текущего состояния, а некоторое кол-во прокси рассылает его всем задействованным в происходящем клиентам. Подробнее Эндрю объясняет тут
Внутри кластер представляет из себя большое число сервисов, заточенных исключительно под свои узкие задачи. Есть сервисы одиночки, есть целые стада или колонии наштампованных копий.
Пользовательский трафик при попадании в кластер не просто смешивается с трафиком общения сервисов, но еще и разрастается в размерах.
На улицах мегаполисов тихо по сравнению с тем, что творится на сетевых трассах запущенного сервера. :)
И это все не мешает серверу, как боженьке, следить за каждой своей заблудшей овечкой самым пристальным способом.
developer.valvesoftware.com/wiki/Source_Multiplayer_Networking:ru
Ссылка как пример используемых механик. Синхронизация позиций от 30 до 60 раз в секунду с точным контролем перемещения.
Но еще раньше всего этого, Афина (eAthena), работая всего в один поток и на простеньком железе, была в состоянии без труда тянуть порядка 10000 пользователей, загружая всего одно 3ГГц ядро чуть меньше чем на 90%.
В РО система передвижения другая, но тем не менее.
А практика пока показывает только ленность людей заниматься именно серверами. Тонкий сервер сделать куда проще и дешевле, чем ПО для, пусть и малюсенького, но кластера. :)
Я согласен с твоими доводами. Никаких проблем прикрутить в кластер отдельный сервак, который будет мониторить то же перемещение выше определённой скорости по разнице координат и отсылать тикет игровому ГМу. Но пока схема работает по-другому — джолька фрапсит спидхакеров и шлёт видосы в саппорт или КМам
Я как безопасник вообще склонен никогда не доверять никому. А как можно доверять процессу игры (пусть даже мега-секьюрити упакованному), если все данные лежат в открытом виде в оперативной памяти компа игрока? В Альбионе игрок видит в 2 раза меньше игрового мира, чем ему передаёт на самом деле сервер. Чтобы клиент игры мог просчитать перемещение других игроков и при встрече двух наездников не было телепортации сквозь друг друга. На этом принципе работают все радары в играх. В Альбионе ещё простой геймплей, да и народу в одной точке меньше, чем в блессе на осаде 200х200
Когда ты протягиваешь свою кредитку в магазине для совершения покупки, банк должен знать только счет перевода и сумму списания с твоего счета. В это же самое время, магазину нужно точно удостовериться в том, что банк прислал подтверждение именно текущего перевода средств, именно за эту твою покупку.
Как магазину передать информацию о покупке в банк, не разглашая саму информацию? Для решения этой задачи есть как минимум Доказательство с нулевым знанием. А еще есть теория групп, числовые пространства, четырехмерная сфера и куча других математических уловок, в которых лично я полный ноль… -_-
Суть сводится к тому, что ты что то знаешь и даже можешь этим оперировать. Но что именно это такое, тебе не скажут. Не скажут или до поры, или вообще.
Защитой информации в играх так же не занимаются. Даже протокол в большинстве случаев не шифруется. А если и шифруется, то приватный ключ второй стороны лежит у всех на виду прямо внутри клиента. Бери и пользуйся наздоровье. :)
Да и пример с кредиткой совсем не походит.
На Хабре есть отличная статья про еквайринг.
habrahabr.ru/post/157565/
На счет обезличенной информации дело такое.
Когда я исследовал данные ПВ, я очень быстро нашел основной объект игры, из которого растет полностью все мироустройство игры. Очень быстро я обнаружил списки объектов по категориям: игрок, нпц, мобы, петы. Вместе с этим все ссылки на элементы этих списков легко находились на сцене — это были просто объекты сцены. Все… приехали…
Я пишу простенький сканер для сбора информации и спустя 1 день полетов у меня нарисовалась полноценная карта всех спаунов всех мбов открытого мира.
Как эту информацию обезличить? Это, кстати, частая и довольно большая ошибка многих людей — мышление тем что человек видит. Если бы докопавшись до сцены я увидел просто список объектов, трава/земля от игрока/моба не отличимых, я бы подумал: «Ндаа… завернули же, никаких данных для фильтрации не дали...»; и бросил бы затею. Но мне была предоставлена вся нужная мне информация.
Тем не менее я не понимаю как будет выглядеть «блокчейн» на клиенте. В теории все хорошо. Некто с определённым IP и игровым идентификатором присылает запрос на обработку второй стороне. Как это защитит от взлома я хз. Даже если вторая сторона не сможет идентифицировать юзера (совмещение ID запроса и ника игрока будет только на стороне сервера), клиент игры должен, например, замерить скорость пробегающего мимо него игрока на спидхаке. Значит он должен знать кого чекать.
Если тебе охота остаться при своем мнении — дело твое. Я так же не сторонник безоговорочной правоты в интернетах и не настроен указывать людям на пробелы в знаниях.
Если тебе нужна информация — спрашивай. Лучше в частном порядке. :)
Блокчейн не эквивалентен коллективному доверию, это только один из инструментов проверки. Пиринговые сети хорошо зарекомендовали себя в области ускорения доставки контента пользователям, в разгрузке мощностей серверов и в проверке надежности доставляемого контента. Игра тоже может быть построена как пиринговая сеть. Только в этом случае нужно немного изменить и само понятие пира в игровой сети.
Серия статей «Мультиплеер в быстрых играх»
https://habrahabr.ru/post/302394/
https://habrahabr.ru/post/302834/
https://habrahabr.ru/post/303006/