Защита от автоматизации - PullRequest
       53

Защита от автоматизации

7 голосов
/ 27 сентября 2008

Предполагается, что одним из наших следующих проектов будет игра на основе MS Windows (написанная на C #, с графическим интерфейсом winform и встроенным DirectX-управлением дисплеем) для клиента, который хочет раздавать призы лучшим игрокам. Этот проект рассчитан на несколько лет, с чемпионатами, лестницами, турнирами, игрой против игрока и т. Д.

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

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

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

Ваш отзыв очень важен!

Ответы [ 7 ]

7 голосов
/ 27 сентября 2008

Некоторое время назад я написал d2botnet, механизм автоматизации .net diablo 2, и кое-что, что вы можете добавить в свой список вещей, на которые нужно обратить внимание, - это некорректные / недействительные / поддельные пакеты. Я предполагаю, что эта игра будет общаться по TCP. Обнюхивание и подделка пакетов - это обычно первый способ автоматизации игр (в любом случае онлайн). Я знаю, что Blizzard будет обнаруживать искаженные пакеты, но я старался держаться подальше от d2botnet.

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

5 голосов
/ 27 сентября 2008

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

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

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

3 голосов
/ 27 сентября 2008

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

При этом, лучший способ обнаружить автоматизацию - это активно вовлекать пользователя и требовать периодических CAPTCHA-подобных тестов (кроме как без изображения и т. Д.). Я бы порекомендовал использовать базу данных из нескольких тысяч простых одноразовых вопросов, которые часто задаются пользователю.

Однако, исходя из вашего вопроса, я бы сказал, что лучше всего не реализовывать антиавтоматические функции в C #. У вас очень мало шансов обнаружить хорошо написанные хаки / боты из управляемого кода, особенно когда хакеру нужно просто войти в ring0, чтобы избежать обнаружения любым стандартным методом. Я бы порекомендовал подход, подобный Warden (загружаемый модуль, который можно обновлять в любое время) в сочетании с драйвером режима ядра, который перехватывает все функции Windows API и отслеживает их на предмет «неуместных» вызовов. Однако обратите внимание, что вы столкнетесь с множеством ложных срабатываний, поэтому вам не нужно основывать свою систему запретов на автоматических данных. Всегда имейте человеческий взгляд на это прежде, чем запретить.

2 голосов
/ 27 сентября 2008

Распространенным методом прослушивания ввода с клавиатуры и мыши в приложении является установка хука окон с помощью SetWindowsHookEx. Продавцы обычно пытаются защитить свое программное обеспечение во время установки, чтобы хакер не смог автоматизировать и взломать / найти серийный номер для своего приложения. Google термин: "Ключевые логгеры" ... Вот статья , в которой описана проблема и способы ее предотвращения.

1 голос
/ 27 сентября 2008

У меня нет более глубокого понимания того, как работает PunkBuster и такой софтвар, но я бы так и поступил:

Iintercept вызывает API-функции, которые обрабатывают такие элементы памяти, как ReadProcessMemory , WriteProcessMemory и т. Д.

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

Это должно работать и для снятия скриншотов, но вы можете перехватить функцию BitBlt.

Вот базовое руководство по перехвату функций: Перехват системных вызовов API

0 голосов
/ 27 сентября 2008

Я не знаю технических подробностей, но в программе BlitzIn шахматного клуба Intenet, похоже, есть встроенная функция обнаружения переключения программ. Это, конечно, для обнаружения людей, использующих шахматный движок на стороне и не имеющих непосредственного отношения к вашему случаю, но вы можете экстраполировать аппроксимацию на что-то вроде того, если процесс X занимает больше чем Z% процессорного времени в следующих циклах Y, это вероятно бот работает.

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

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

Все эти вопросы легко решаются по правилу 1 выше:

* how to detect if another application makes periodical screenshots?
* how to detect if another application scans our process memory?
* what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated?
* is it possible to detect if another application requests informations about controls in our application (position of controls etc)?

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

0 голосов
/ 27 сентября 2008

Вы должны посмотреть, что входит в Punkbuster, Valve Anti-Cheat и некоторые другие античит-коды для некоторых указателей.

Редактировать: Я имею в виду, посмотрите , как они это делают; как они обнаруживают эти вещи.

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