LINUX.ORG.RU

Анти-чит для проекта

 


2

3

Создаю онлайн-игру, суть которой - набор текста на скорость с последующим построением списка самых быстрых пользователей. В связи с этим появилась потребность не позволять игрокам присылать «липовые» результаты набора.

Я решил ввести режим «квалификация», который выводит произвольный текст в виде картинки с шумом мешающим роботу распознать текст (привет Клавогонкам) и по результатам набора которого засчитывается скорость в обычном режиме до этого порога.

Все бы хорошо, но данные (скорость и процент ошибок), присланные с клиента, могут быть не настоящими. Как быть?

Была идея рассчитывать эти данные на сервере, отправляя каждый введенный символ (или слово). Но как учитывать время ответа сервера? Спасибо.


Что мне мешает парсить ваши падающие с неба буковки и отправлять нажание через xdotool?

sambist
()

Не забудь дампить все процессы, память, весь ввод (насчёт вывода не знаю, наверное, имеет смысл) и делать скриншоты каждые 10 секунд. Вероятно, тебе понадобится модуль в кернелспейсе. Чтобы не устроить ddos серверу, можно применять только к самым подозрительным. Ну так все античиты делают, ты же это хочешь?

wakuwaku
()
Последнее исправление: wakuwaku (всего исправлений: 1)

Передаваемые данные шифруй, дополнив контрольной суммой, а код обфусцируй.

amomymous
()

Спасибо за ответы. Жаль что любую защиту можно обойти. )=

Razip
() автор топика

Создаю онлайн-игру, суть которой - набор текста на скорость с последующим построением списка самых быстрых пользователей.

В это правда будет кто-то «играть»? Если да, то сделай лучше распознавание капчей, на скорость.

KillTheCat
()
Ответ на: комментарий от KillTheCat

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

Razip
() автор топика
Ответ на: комментарий от KillTheCat

Если да, то сделай лучше распознавание капчей, на скорость.

Это гениально.

anonymous_sama
()
Ответ на: комментарий от KillTheCat

сделай лучше распознавание капчей, на скорость.

kolotibablo.com

proud_anon
()

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

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

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

Одним словом, тут надо вести статистику по многим факторам и не пытаться придумать волшебный алгоритм выявления читеров, а проявлять их постепенно.

proud_anon
()

Решил обфусцировать JS-код и требовать от топовых игроков видеоподтверждение.

Razip
() автор топика
Ответ на: комментарий от b0c0813f

Если пришел пофлудить, то лесом. На таких сайтах как Клавогонки у каждого топового игрока есть видео набора.

Razip
() автор топика
Ответ на: комментарий от Razip

Только они сами «подтверждают», а я буду требовать.

Razip
() автор топика

Пользователь всегда может подделать данные, ибо код выполняется на его стороне.

Мой совет: не парься. Достаточно сделать простое XOR-шифрование отправляемых на сервер данных, запрятать далеко в коде и обфусцировать, как это сделано на шахиджаняновском Набираем.ру. Этого хватит, чтобы перебить желание заниматься обманом у большего количества хацкеров. В любом случае, 99,99% пользователей будут соревноваться честно.

anonymous
()

Попробуй вычислять читеров статистически.

crowbar
()

Если совсем тупо то: Каждые N секунд в процессе написания текста, пусть на бекенд улетает статус - сколько символов введено за этот промежуток времени. Потом можешь спокойно высчитывать различные соотношения - среднее, минимальное, максимальное кол-во символов на промежуток времени, процентное соотношение одинаковых, медленных и быстрых вводов.

Если хитрее то: твоих секунд может быть не постоянно N, а некоторая достаточно длинная последовательность значений для задержек. И начинать каждый раз со случайной позиции этой последовательности. Но в этом случае задержку должен обеспечивать бекенд, на каком-нить nginx-push-module или realplexor или node или что там тебе по вкусу. Тогда как бекенд отпустило, то клиент сразу шлет статус.

deep-purple
()

Я бы весь текст сразу не показывал, а показывал только пару-тройку следующих слов. Данные пересылать через вебсокет. Если слишком быстро прет поток входных данных (т.е. скорость превышает рекордное значение — скажем, 600 символов в минуту), ставим галку "читер".

Слова откидывать картинками, да. Иначе засаленная обезьяна сделает что угодно.

// а насчет клавогонок ты хорошую идею читбота подсказал! Там ведь тупой незащищенный текст!!!

Eddy_Em
()
Ответ на: комментарий от deep-purple

Можно подделать довольно просто.

anonymous
()
Ответ на: комментарий от Eddy_Em

А этот поток входных данных разве нельзя подделать?

Картинки - это хорошо, но только в том случае, если можно как-то рассчитать скорость на клиенте и чтобы она не подверглась изменению. Иначе нет смысла - можно набрать медленно но верно и отправить в параметрах скорость равную 100050000 зн./мин.

Razip
() автор топика
Ответ на: комментарий от Razip

В общем, я решил сделать так:

1. С сервера присылать текст, в котором некоторые символы заменяются на похожие или прислать картинку с шумом.

«волшебный текст» защищают от тупого копирования и отправки на сервер (роботом), а текст-картинка с шумом от распознавания.

2. Рассчитывать скорость на клиенте, но отправлять в параметрах дополнительно хэш-сумму, которая складывается особым образом (рассказывать не буду :) и обфусцировать код ее алгоритма.

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

Razip
() автор топика
Ответ на: комментарий от Eddy_Em

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

Razip
() автор топика
Ответ на: комментарий от Eddy_Em

Никак. Я о том, что если передавать через WS допустим количество набранных символов или что-то другое, то это можно подделать. Если ты хочешь передавать текст/отдельные слова то это действительно безопасно (если робот не может распознать картинку), но ты не упомянул что ты хочешь передавать, ты просто сказал «Данные пересылать через вебсокет».

Но как будет с производительностью если обрабатывать каждый символ/каждое слово?

Razip
() автор топика
Ответ на: комментарий от Razip

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

Razip
() автор топика
Ответ на: комментарий от Razip

Передавать каждый свеженабранный символ. С производительностью шикарно.

Eddy_Em
()
Ответ на: комментарий от Ceiling_QB

Приведи примеры античит-систем, которые не называли зондом.

anonymous
()
Ответ на: комментарий от edigaryev

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

Ceiling_QB
()
Ответ на: комментарий от Ceiling_QB

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

Открою тайну - маленького зонда достаточно, чтобы всё было дырявым-предырявым.

peregrine ☕☕
()
Ответ на: комментарий от anonymous

а потом эти люди критикуют trusted computing. что за двоемыслие

А что в этом странного?

Это как сказать: «она переспала с двумя знакомыми парнями одновременно, а когда её десять незнакомых мужиков захотели оттрахать, почему-то стала сопротивляться, что за двоемыслие»

proud_anon
()
Ответ на: комментарий от Eddy_Em

Я тебя люблю. Мы с тобой всегда буде вместе. Никто не сможет заменить твой язычок и твою попку. Эти ночи с тобой были просто божественны.Надеюсь, ты не изменяешь мне с другими парнями? Всегда любимый тобой wyldrodney.

anonymous
()
Ответ на: комментарий от Ceiling_QB

Тем, что мало того, что может повысить свои права в системе вплоть до рутовых, если авторы этого творения нашли соответствующую уязвимость, но даже если такого нет, кто ему помешает слить твои файлы с ПК куда надо? Мало кто настолько обеспокоен безопасностью, чтоб для всякой проприетарщины даже прав на чтение /home не дать.

peregrine ☕☕
()
Ответ на: комментарий от Eddy_Em

засаленная обезьяна

Куда не плюнь --- везде хохлосрач.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.