Как обнаружить и предотвратить злоупотребление (боттинг) API онлайн-игр?

В свободное время я активно работаю над идеей игры. Геймплей и контент позволяют реализовать его как многопользовательскую онлайн-игру, построенную с использованием хорошо зарекомендовавших себя веб-технологий. Вы должны знать, что он попадает в жанр стратегии и моделирования. Это означает: не работает с символами или схожими, но только с атомарными действиями (в отношении связи между клиентом и сервером), например, «строить вещь A на месте X».

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

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

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

Изменить . Спасибо, ваши ответы вдохновляют, а также заставило меня понять, что конкретные контрмеры не могут быть сделаны путем дальнейшего изучения деталей игры. Тем не менее, это будет слишком много для вопроса о Stack Exchange. Поэтому я просто хочу указать на наиболее важные моменты:

  • Игроки изучают, разрабатывают и управляют, когда захотят. Их бизнес по-прежнему работает нормально, когда они находятся в автономном режиме (это мирная игра, не задействованное оружие). Только расширение и прогресс требуют действий игроков. Эти действия ограничены:
  • время является одним из ключевых ресурсов (например, в обучении навыкам EVE Online). Все процессы в игре требуют этого. Нет смысла быть онлайн 24/7. Средний игрок должен быть успешным уже с расходами не более часа каждый день в одну или две сессии ( грубо , концепция все еще находится в разработке).
49 голосов | спросил Peter Thomas Horn 27 PMpMon, 27 Apr 2015 12:04:30 +030004Monday 2015, 12:04:30

10 ответов


49

Если люди хотят ботаться, я не думаю, что вы действительно можете остановить их.

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

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

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

Некоторые разработчики игр используют чрезвычайно агрессивные меры по борьбе с мошенничеством: например, Steam сканирует память и файловую систему, чтобы искать хаки, а преступники могут быть наказаны, потеряв счета на сотни долларов. Тем не менее, все еще есть боты и другие хаки для Steam игр, а некоторые из них даже работают в полтора раза. В отличие от них у вас есть API, который широко открыт для пользователя и не контролирует компьютер пользователя. Это битва с самого начала.

Проблема, которую вы пытаетесь решить, по существу, является тестом Тьюринга: кроме того, это очень простой тест Тьюринга, потому что вы не можете обманывать, требуя жестких проблем с ИИ, таких как язык. Независимо от того, сколько эвристик вы создадите, было бы тривиально, если бы боттер добавил немного случайности к действию бота, чтобы он подражал почти точно человеку. Было бы даже не очень сложно, если бы бот-чат вы играли немного, и узнайте, как делать так, как вы. Затем, когда вы запрещаете бот, боттер публикует на форуме огромный разбор о том, как он просто посвященный игрок (и, возможно, он на самом деле ложный), и ваша основная аудитория хардкорных игроков поднимется в оружии против вас.

Сделать игру слишком забавной для бота

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

Но если игра такая скучная, зачем вообще ее играть? Предположительно, некоторые части игры скучны и обязательны, чтобы добраться до частей, которые являются забавой. Например, в ММО все любят подниматься на уровень, но никто не хочет убивать 42324 смертельных ядовитых крыс нежити, чтобы получить XP. Таким образом, они позволили боту размалывать и заглядывать, чтобы сыграть забавную роль.

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

Из вашего описания у меня создается впечатление, что это браузерная игра, подобная Travian, где есть очередь сборки с единственным лучшим порядком сборки и определенным «поддержанием» (например, ведением фермерских рейдов) задач, которые должны быть сделанный. Вы говорите, что конфликта нет, но в любой MMO драма и мелкая политика неизбежны (IMO - это главная привлекательность), поэтому я уверен, что ваши игроки найдут способы приклада головы. В таких играх много утомительных исходит из этих задач «обслуживания» - то, что действительно хотят игроки, - это создавать союзы и играть в игру дипломатии с соперничающими кланами, а затем становится своего рода налогом, когда вам нужно проснуться до тревоги в нечетные часы, чтобы позволить себе попасть в эту забавную дипломатическую часть. Так вырежьте скуку: автоматизируйте скучные вещи сами (но, возможно, несовершенно, чтобы это было интересно), чтобы игроки могли сосредоточиться на тех частях, которые им нравятся.

Этот подход может не всегда работать, к сожалению. Не у всех игроков есть такая же толерантность к скуке или к той же концепции удовольствия. У вас может быть видный механик, которому нравится 99% ваших игроков, но 1% находят скучным. Что, если 1% затем начнут писать ботов, разрушая удовольствие для 99%? Но в конечном счете, это вопрос степени. Вы никогда не сможете полностью удалить боттинг, но вы можете свести к минимуму ущерб.

Подрезные бутылки

Многие из действительно отрицательных эффектов ботов приходят от авторов бота, коммерциализирующих их работу. Если это так, вы можете просто конкурировать с ботами. Многие онлайн-игры в режиме реального времени уже имеют премиальные функции, которые позволяют пропускать и автоматизировать время (например, расширенные очереди на создание). Эти суммы составляют официальный бот, санкционированный разработчиками. Если у вас есть эти и ценысоответственно, игроки будут покупать премию вместо покупки ботов. Хорошей новостью является то, что вы отвечаете за API, поэтому у вас всегда есть сильное преимущество в разработке качественной автоматизации для вашей собственной игры, поэтому на этот раз это проигравшая битва за бутылочки.

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

Вручную искать их

Как я уже говорил выше, то, что вы делаете, по существу, является тестом Тьюринга. Поскольку взаимодействие с людьми считается классным испытанием Тьюринга, вы можете попытаться использовать его.

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

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

ответил Superbest 28 AMpTue, 28 Apr 2015 04:45:29 +030045Tuesday 2015, 04:45:29
25

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

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

    Сделайте эти аспекты вашей игры менее повторяющимися и более интересными для воспроизведения и повторного воспроизведения.

  • Требуется ли вашей игре, чтобы игроки выполняли действия, иногда неудобные для них, например, в середине ночи или когда они на работе?

    Разрешить им упорядочивать заказы (например, «строить X1, затем X2, затем X3, запускать каждый, как только ресурсы доступны») или планировать действия в определенное время заранее (построить X в 3:22 AM).

  • Ваша игра требует от игроков действовать в течение очень коротких промежутков времени?

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

    • , когда здание X уничтожается, немедленно восстановите его.
    • Когда кто-то предлагает ресурс X меньше, чем Y денег, немедленно купите до Z единиц.
    • Авто-продать весь ресурс X, когда запас превышает единицы Y, но не меньше, чем Z денег на единицу.

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

ответил Philipp 28 AMpTue, 28 Apr 2015 00:14:38 +030014Tuesday 2015, 00:14:38
22

Не делайте игру настолько уязвимой для усилий джонни на месте

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

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

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

Требовать информацию о сервере для каждого действия и замедлять реакции сервера

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

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

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

Сделать ходы и действия требуют мысли

Если игра является простым кликером кнопки, то вы не можете много сделать для ботов. Подумайте о повторной разработке своей игры, чтобы сама игра выполняла тест типа «captcha-like».

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

Включить случайные очень простые проверки ботов

Добавьте случайный диалог: «Вы уверены?» например. Часто меняйте вопрос и формулируйте и используйте его как выборочную проверку для ботов.

Измените API

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

ответил Adam Davis 27 PMpMon, 27 Apr 2015 18:51:11 +030051Monday 2015, 18:51:11
13

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

  • Проверить заголовки запросов и отклонить запросы с недопустимыми значениями. Либо установите пользовательскую проверку заголовка на существующий пользовательский агент. Конечно, его легко преодолеть, но его еще проще проверить. Если бот-писатель неопытен, это может занять некоторое время, чтобы подумать об этом! Ваша задача - заставить многих из них отказаться от права?
  • Вероятно, у вас есть какая-то хэш-подпись или что-то в ваших запросах, которое создается на стороне клиента с некоторой функцией. Хорошо, тогда продолжайте менять его! Сделайте это как отдельный скрипт, не кэшируемый, и измените его в произвольные интервалы. Сделайте несколько из них или отредактируйте на лету, добавив случайную соль в процесс хэширования. Хотя это снова, легко преодолеть, это заставит их следить за вашей функцией. Им также может понадобиться какой-то конвейер постоянного развертывания, чтобы пользователи обновлялись. Иначе их боты начнут отправлять неверно хэшированные запросы. Вы даже можете запретить пользователям, которые делают это слишком часто. Действительные пользователи будут перемещаться по вашему клиенту в любом случае, поэтому они будут периодически обновлять хеширование. Не забудьте также обновить серверную часть (поддержка на основе скриптов действительно поможет здесь).
  • Следите за эффективностью использования ресурсов. Если они потрачены мгновенно, после того, как что-то станет доступным, или если новые рейды всегда отправляются в течение 1-2 секунд с последнего, 24/7, то вы имеете дело с каким-то хардкорным игроком или ботом. Вы запрашиваете у вас капчу от такого человека и выходите из него. Если он продолжает делать запросы после выхода из системы (плохо написанные боты!), То это бот. Если он попытается войти в систему несколько раз без успеха, то он, вероятно, бот. Если ему потребуется несколько часов для переустройства, то он может быть ботом (бот может запросить помощь у человека в этот момент, и владелец может спать).
  • IP. Это может устранить ботовую продажу. Если кто-то пишет бота с $$$ в виду, они могут не захотеть делиться источником. Вместо этого они будут продавать бот. Если они жадные, они могут использовать одиночную машину с одним /несколькими ips. Это означает, что многие пользователи начнут общий доступ к IP. Это рискованно, потому что тот же случай для людей, которые делят сеть. Вам нужно будет проверить, успешно ли выполнено какое-либо из предыдущих проверок на определенном IP-адресе, и решить вручную, если это законная группа пользователей или армия ботов.
ответил Polan 27 PMpMon, 27 Apr 2015 14:55:20 +030055Monday 2015, 14:55:20
8

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

Что бы я сделал: определите некоторые эвристики, которые подсказывают, что пользователь, вероятно, бот - делает много действий, делая вещи 24/7, ... Затем, если эти эвристики преодолеют определенный порог, выполните инвазивную проверку.

Вы можете вручную проверить активность игроков и посмотреть, похоже ли это. Или вы делаете код в следующий раз, когда пользователь находится в сети. Или (даже сильнее) просто отправьте ему чат-сообщение, в котором вы объясните, что вы подозреваете, что он бот, и хотите, чтобы он ответил чем-то человеческим, чтобы доказать, что он не бот (как прошел ваш день? Каков ваш любимый фильм? ... - у вас может быть куча таких). Если он вообще не отвечает, он, вероятно, бот. Если он ответит, вы вручную проверите ответы для роботов-людей и роботов-баннеров. Если ваша эвристика разумна, будет опрошено только небольшое количество пользователей, и количество ответов на сканирование будет небольшим. И если вы сохраняете набор вопросов частными и меняющимися, то роботы не могут быть подготовлены, если кто-то не изобретает SkyNet.

ответил Martin Modrák 27 PMpMon, 27 Apr 2015 13:04:03 +030004Monday 2015, 13:04:03
8

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

Вопрос в том, почему люди создают ботов для вашей игры, и будут ли они платить за эту привилегию?

ответил MatthewToday 28 AMpTue, 28 Apr 2015 02:13:11 +030013Tuesday 2015, 02:13:11
4

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

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

  • Вращение ключа cookie сеанса. Это гарантирует, что бот сохраняет свои файлы cookie, но также значительно затрудняет обмен файлами между браузером и ботом (что очень удобно при разработке и тестировании).

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

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

  • Мониторинг движения мыши /страницы. В наши дни это довольно просто с javascript, но у ботов органически не будет движения мыши. Если вы не получаете между «кликами», они могут быть мобильными, или они могут быть ботом. Исследовать. Это много данных для регистрации, хотя ... Поэтому вы можете зарезервировать это для учетных записей, которые уже вызвали предыдущие шаги.

  • Создавайте инструменты для привязки аккаунтов по видам поведения, IP, последовательности действий, последовательности действий. Если вы собираетесь запретить людей, убедитесь, что у вас есть инструменты, чтобы вручную проверить их правонарушения.

  • Поверните схему URL, переменные CSRF и т. д. и делайте это часто. Это большой шаг и, вероятно, требует больше работы на фронте, чем когда-либо будет стоить, но, по крайней мере, любых учетных записей, которые внезапно перестают работать (или продолжают забивать старые URL-адреса и отправляют старые имена переменных - запишите их!) нужно увеличить уровень бот-индекса.

ответил Oli 28 PMpTue, 28 Apr 2015 13:17:26 +030017Tuesday 2015, 13:17:26
4

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

ответил conjectures 28 AMpTue, 28 Apr 2015 01:31:42 +030031Tuesday 2015, 01:31:42
2

Что бы вы ни делали, не забудьте НЕ сделать его более раздражающим для настоящего игрока! Множество ответов, которые я видел (более медленные результаты страницы, не позволяющие открывать несколько страниц для ускорения ввода и т. Д.) Также помешают законным игрокам быстро делать это, что просто бесполезно расстраивает их.

imho самым простым подходом может быть применение социальной инженерии к проблеме: 1) добавьте явное предложение NO-BOT к вашему TOS и добавьте, что обнаружение активности бота приведет к удалению игрока из списка с высоким рейтингом (или прикрепляет ярлык «cheater», так что люди не так расстроены с ними, если вы идете по этому маршруту, чтобы люди могли скрыть записи читера).

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

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

ответил T. I. Troll 27 PMpMon, 27 Apr 2015 23:24:09 +030024Monday 2015, 23:24:09
2

Считаете ли вы, что боты являются неотъемлемой частью игры? Ботам очень сложно погубить игру для всех остальных, если всем рекомендуется создавать их. Добавьте поддержку сценариев, и внезапно динамика изменений игры от ручных стратегий управления ресурсами до стратегий разработки ботов.

ответил Kenneth Cochran 30 AMpThu, 30 Apr 2015 00:38:30 +030038Thursday 2015, 00:38:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132