Как игровые боты воспринимают мир игр и amp; другие организации?

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

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

Заранее спасибо:)

bot
52 голоса | спросил Aceboy1993 23 J0000006Europe/Moscow 2015, 15:40:16

5 ответов


77

Есть много моментов, когда бот может вводить себя в игру.

  • Экран - один из них, но далеко не самый полезный. Тем не менее, я когда-то видел очень ранний aimbot для Counter Strike, который использовал цветовое кодирование. Он поставлялся с альтернативными образцовыми моделями с одноцветными текстурами (игра была достаточно удобной для моддинга, чтобы позволить это), а затем только обнаружила пиксели этих цветов. Не очень эффективный метод. В то время он был довольно неуклюжим и становился все менее и менее жизнеспособным, потому что графические двигатели становятся все более и более мощными, что означает все более и более подробно смущать любые алгоритмы оптического распознавания.

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

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

  • И тогда есть netcode. В онлайн-игре сервер отправляет свойства и позиции всех объектов в игре через сеть. Сетевой поток данных между сервером и клиентом можно перехватить и проанализировать. Популярным инструментом для этого является wirehark . Когда разработчик обратно проектировал сетевой код, они могут написать бот, который перехватывает сетевой трафик, как это делает Wireshark, и использует эту информацию для принятия решения. Когда разработчик более мотивирован, они могут даже разработать полноценного игрового клиента с нуля, который реализует сетевой протокол и играет в игру, даже не имея графического вывода. Такие боты очень популярны у фермеров из золота, потому что без вывода графики клиент обычно гораздо более дружелюбен к ресурсам, а это значит, что они могут запускать их сразу на небольшом сервере.


1: Поскольку вы упоминаете WoW, стоит отметить, что ранняя и печально известная программа ботов WoWGlider использовала прямой доступ к памяти. У Blizzard была подпрограмма Warden, которая была предназначена для обнаружения и блокировки внешних программ от доступа к внутреннему игровому состоянию WoW. Поскольку бот-программа обходила эту защиту и читала память без разрешения, 2006 иск MDY v Blizzard было принято решение в пользу Blizzard на том основании, что создатель ботов поощрял и позволял своим пользователям совершать нарушения авторских прав и нарушать DMCA .

ответил Philipp 23 J0000006Europe/Moscow 2015, 17:40:42
18

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

ответил dimitris93 23 J0000006Europe/Moscow 2015, 16:16:19
7

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

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

Бот предоставил кучу отладочной информации, такой как аннотации, которые рассказали разработчику, какие координаты плитки есть где, у какого идентификатора этот объект есть, какой идентификатор принадлежит данному предмету и т. д. Затем эту информацию можно использовать для создания ботов , Фактический процесс создания бот-скриптов был на самом деле довольно простым. Структура обеспечивала множество функций полезности, таких как move_to(world_coordinates) или mouse_move(x,y), которые могли бы выполнять указанные действия несколько правдоподобным способом (перемещая мышь вдоль случайный сплайн, многократно перемещающийся как по мини-карте, так и по экрану и т. д.)

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

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

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

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

ответил Kaslai 24 J0000006Europe/Moscow 2015, 21:18:21
2

Ответ Филлипа замечательный, но просто краткая заметка о шаблоне Модель /Вид /Контроллер или краткое описание MVC.

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

В сетевой игре концепция «модели» немного сложна, так как на самом деле у вас много моделей. У вас есть модель на сервере, а затем модель на каждом клиенте, которая частично обновляется из-за данных, получаемых с сервера. Вы могли бы подумать о «модели», охватывающей модель сервера и модель вашего клиента, или вы могли бы подумать об этом как о своей модели своего клиента. В любом случае, здесь живут боты. Таким образом, их «восприятия», которые мы могли бы использовать в качестве сокращения для их ввода и ввода данных, основаны на состоянии модели в то время и взаимодействии между различными объектами /объектами внутри этой модели. На практике каждый бот может иметь функцию под названием «refreshState», которая запускается один раз для фрейма или что-то еще, и которая заставляет его обновлять собственное состояние, просматривая некоторые данные изнутри модели, что, в свою очередь, может повлиять на принимаемые решения.

ответил Max Williams 24 J0000006Europe/Moscow 2015, 18:06:47
0

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

Вы можете увидеть обнаружение столкновений этой страницы

ответил Megasa3 23 J0000006Europe/Moscow 2015, 17:05:02

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

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

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