Комментарии 89
Он умел распознавать картинку?
Ну вот как-то сложновато выходит, ведь освещение меняется и поплавок качается, и свой алгоритм по вычислению поплавка — немножко другая задача.
Я думал что проще вычислять изменения курсора, ибо когда наводишь на поплавок, он меняется иконку на крючок, но не нашел апи курсора и не курсор сам в скриншот не попадает.
Ещё периодически «ходить покурить», сворачивать игру, переключаться на фэйсбучег и т.п — когда-то давно, уже не помню, для какой игры, я так записывал макросы родной майкрософтской программулиной.
Сразу вспомнил была статья про то, как сделали бота для аукциона и почты в WoW используя AutoIT и внутриигровой аддон: https://habrahabr.ru/post/113258/
AutoIT умеет распозновать разницу. Я использовал его в Линейке, находил статическую позицию и использовал как торгового бота с автоматизацией ответа. Вещи за ночь продавал :)
Я уверен Вы попались сразу же по движению курсора, которое не характерно реальному человеку, а идёт ровно от Х1, Y1 до X2, Y2.
Конечно искали, но статьи такой я не нашел и подумал было бы интересно написать — мало ли в каких других ситуациях или играх понадобится такая штука.
Можно про «бан-вейв» подробнее? Уже прошло пару месяцев как я последний раз его запускал и пока ничего страшного не произошло.
Тогда это будет наконец достойный повод завязать. Но пока бана нет — это того стоило
Не надо завязывать! Надо усовершенствовать AI, делать его ближе к реальному человеку, чтоб было сложно отличить. В этом же самый смак.
Как разбираются с такими вот «уникальными» и мелкими ботами я не знаю. Возможно, индивидуально, по жалобам игроков.
«1. Только пришел
2. Не клюёт
3. На червя
4. Водку буду»
Я знаю, что Source 2 довольно не новый движок, и его уже перековыряли со всех сторон. Есть боты же и для CS:GO и для той же доты, которые взрывают бомбы минеров по нужному количеству хп у противников в любой части карты.
Так что вполне возможно и внедрение. То, что было на The international, я думаю это обычное подключение бота через апи самого Source 2 — есть же обычные боты и в доте и в CS:GO.
Кроме того — я же не претендую на статью об искусственном интеллекте. Возможно их бот работает на очень мощном железе и его писали ребята, которые делают очень большие проекты на openai. Тогда они вполне могли бы и картинку обрабатывать на уровне повыше обычного метчинга темплейтов. Как раз совсем недавно общался на эту тему со знакомым, который предлагал мне сделать на python искусственный интеллект, который смог бы играть в Gravity Defied используя только картинку, но я пока не решаюсь переписывать Gravity Defied на python.
Ну и по поводу «всей ночи» — Вы сильно недооцениваете школьников или корейских игроков)
У рыбалки там несколько стадий. На тот момент был готовый бот, который использовал лог-файл игры для определения этих стадий, но, насколько помню, самая важная стадия(поклевка) в логе не отображалась и бот использовал какое-то решение, которое по какой-то причине меня не устроило(а может, просто захотелось написать свой собственный, не помню).
В итоге получилось забавно — я в силу своих скромных способностей в реверсе приложений умудрился найти только функцию, отвечающую за воспроизведение звуковых файлов. В итоге перехватывал эту функцию и, в случае воспроизведения соотв. поклевке файла, производил необходимые действия.
В итоге получилось что-то средней монструозности, но, на удивление, более-менее эффективное: за относительно короткий срок вкачал рыбалку на максималку и еще какое-то время неплохо зарабатывал на рыбе.
Но вообще лучший бот, который я когда-либо использовал — https://www.solarstrike.net/ для Runes of Magic. Логика на xml+lua шикарна, бот предоставляет базовый набор функций+куча функционала и готовых waypoint'ов от других пользователей + никто не мешает писать свою логику. Чего там только народ не ваял)
В армии с детьми проще (для командиров).
Неспортивно предлагать такое на ресурсе программистов.
PS интересно есть ли смысл делать полностью внешнего бота (с веб-камерой и аппаратным эмулятором мыши) для того что бы затруднить его обнаружение?
У нас есть соседняя компания, которая занимается электроникой. Они думают, что мы занимаемся фигнёй, программируя всякие штуки, ведь все это можно сделать с помощью микросхем, механики и физики. Мы думаем то же самое о них, ведь зачем брать в руки паяльник, если клавиатуры достаточно. Так что может и есть смысл, если так проще для конкретного разработчика
На самом деле у меня не было задачи полностью скрыть использование бота, но избежать автоматического бана античита, у которого неопровержимые доказательства изменения памяти игры. Конечно запись координат курсора — тоже неопровержимое доказательство, но мне кажется это уже дикость следить за таким.
Ну а что касается от отслеживании координат и их рандомизации — мне кажется, это бесполезная затея. Игровые клиенты — толстые клиенты, они отправляют на сервер действия, а не движения мышки и клики. Возможно, античит логирует локально все движения мышки, но крайне маловероятно, что делает на их основе вердикт.
Чисто теоретически, бота от человека можно отличить по паттернам действий, но простыми наборами правил здесь не отделаться из-за огромных объёмов данных и высокой сложности. Тут уже начинают работать методы BigData. Но вот использует ли Blizzard AI для обнаружения ботов — большой вопрос.
Делал ради интереса подобного бота на Sikuli (программа для автоматизации, с питоновским синтаксисом скриптов). На самом деле, все было очень похоже как в вашем примере, но с парой отличий:
- Определение момента для подсекания реализовал через отслеживание изменения области кадра с найденным поплавком.
- Строк кода вышло <100. Экономия, в основном, за счет уже готовых инструментов для поиска нужной части кадра и отказа от слежения за аудио.
Да, отслеживал именно по длительному (>0,3 секунды) выходу поплавка из узкой зоны, где он обычно находится.
Сейчас проверил быстродействие визуального поиска. На ноуте с Core i7 и мобильным Radeon HD 8530M на поиск элемента по всему экрану 1366x768 уходит около 0,03 секунды. Если сократить область поиска в 5-6 раз, т.е. до примерной области рыбалки в WoW, то время на поиск уменьшается вдвое.
Как ниже верно сказали, можно же было изначально определить положение поплавка на экране и потом искать только на нем. Ведь экран наверное вы не вращаете во время работы бота? А это сильно влияет на скорость поиска.
А как считывали данные о курсоре? Я думал об этом решении, но не нашёл на пайтоне никакого способа вытащить иконку курсора, а на скриншотах нет курсора, как я уже писал.
A cursor whose image and hot spot match those of the currently-displayed cursor on the system
Discussion
This method returns the current system cursor regardless of which application set the cursor, and whether Cocoa or Carbon APIs were used to set it.
Если питон позволяет (не знаю ибо не знаком) картинку поплавка можно перевести в grayscale с последующим уменьшением разрядности цвета после чего будет проще отыскивать границы поплавка.
Близзард воюют с ботами больше десяти лет, полагаю у них там нереально крутые движки умеют ловить. Хотелось бы на самом деле поработать над чем-то таким.
Навороченный системы, которые работают с памятью, как раз и легче отследить, от этого я отталкивался.
Если это несложно, тогда поясните, как.
Если коротко, то я вгрызался в DirectInput8Create, чтобы получить полный доступ к управлению мышью.
> Например, поставить хук на WH_MOUSE_LL и проверять LLMHF_INJECTED. Можно поставить хуки во всех процессах на mouse_event и SendInput. Можно на уровне драйвера перехватывать необходимые события и блокировать их, если они идут к защищаемой программе от посторонней программы.
Отлично, но тогда под раздачу попадут пользователи программируемых клавиатур/мышей или пользователи AutoHotKey. Это я уже наблюдал.
Какие ещё есть варианты? Только учтите, что нормальные пользователи не будут играть в игру, где система защиты настолько зверская, что серьёзно ограничивает использование компьютера.
События можно посылать и свернутым окнам, которых может быть запущено больше десятка. Это тоже игнорировать?
Например, у 4game (локализатор многих игр) драйвер защиты блокирует взаимодействие с окном игры. Многое не работает (через тот же TeamViewer нельзя взаимодействовать с игрой) и ничего, люди играют. Программируемые клавиатуры и мыши можно вносить в белые списки.
Ну отлогировали. Дальше-то что? Какой алгоритм анализа использовать?
> События можно посылать и свернутым окнам, которых может быть запущено больше десятка. Это тоже игнорировать?
По-моему, нельзя. Это приведёт либо к активации окна, либо просто проигнорируется.
> Например, у 4game (локализатор многих игр) драйвер защиты блокирует взаимодействие с окном игры. Многое не работает (через тот же TeamViewer нельзя взаимодействовать с игрой) и ничего, люди играют. Программируемые клавиатуры и мыши можно вносить в белые списки.
Как и в случае GameGuard на евросерверах L2. И да, белые списки. А если железка не из белого списка, то что делать? Страдать? В случае с GameGuard, например, решение было простое: можно было просто переименовать файл в разрешённый, и всё работало.
А вообще, пользователи 4game раньше плакались, что их банили просто за сам факт присутствия на жёстком диске определённых программ.
Ну отлогировали. Дальше-то что? Какой алгоритм анализа использовать?
Большой простор для творчества. Сейчас, думаете, они мгновенно банят, если что не так? Метрик может быть очень много. В крайнем случае, GM могут вручную проверять тех, кого выделило ПО.
По-моему, нельзя. Это приведёт либо к активации окна, либо просто проигнорируется.
Можно. Та же L2 спокойно всё воспринимает, даже если окно полностью свёрнуто. Для PostMessage нужно только HWND знать. Тот же L2on обходил торговцев в нескольких свернутых окнах, а пользователи при этом смотрели видео на YouTube.
В случае с GameGuard, например, решение было простое: можно было просто переименовать файл в разрешённый, и всё работало.
У Frost белые списки на десятки тысяч файлов привязаны к md5 (по крайней мере раньше так было). И эти списки формировались автоматически путем сбора информации с компьютеров пользователей.
Вот я к этому и клоню. Метрик можно придумать много, но будут ли они эффективны для поимки ботов — большой вопрос.
> Можно. Та же L2 спокойно всё воспринимает, даже если окно полностью свёрнуто. Для PostMessage нужно только HWND знать. Тот же L2on обходил торговцев в нескольких свернутых окнах, а пользователи при этом смотрели видео на YouTube.
В случае LineageII через PostMessage нельзя было отправить клик мышки, только текст, да и с большими ограничениями. Для торгового бота сгодился, но действия особо не автоматизировать.
> У Frost белые списки на десятки тысяч файлов привязаны к md5 (по крайней мере раньше так было). И эти списки формировались автоматически путем сбора информации с компьютеров пользователей.
Ну если простое переименование не работает, тогда просто загружаем свою библиотеку в доверенный файл, и уже из него совершаем злодеяния.
В WoW сами ботоводы — не самая большая проблема. То с чем они борятся — торговля золотом.
Можно логировать подозрительных персонажей и потом следить при "превышении торговли", т.к. понятно что это твинк, который просто занимается золотодобычей.
По-моему, нельзя. Это приведёт либо к активации окна, либо просто проигнорируется.
Некоторые боты специально "как бы сворачивают игру" (на самом деле говорят игре что она не в фокусе), т.к. тогда DirectX не перерисовывает кадры -> экономия памяти/видюхи, и можно запускать в большем количестве окон.
Правда такие боты работают на "инъекциях" (или пакетах) — т.е. не имитацией клавиш, а имитацией действий, которые эти клавиши вызывают.
Таким образом некоторые боты умеют использовать предметы из инвентаря, даже не открывая его.
- геймгвард очень агрессивный. если я не ошибаюсь, то он банил игроков с Win7, как только она появилась(но это не точно). + сканировал оперативку процессов на названия известных ботов в итоге были вайпы серверов при рассылке сообщения с названием чита.
В добавок ко всему геймгвард очень агрессивен к драйверам устройств. Из-за чего игра с геймпада в некоторые игры невозможна.
P.s. была инфа что создатель геймгварда бывалый читер. поэтому это "война читеров". Её не раз обходили, но этот тип сидел на закрытых форумах и первым узнавал об обходах и достаточно быстро их фиксил.
Не совсем так. На официальных европейских серверах использовался GameGuard — поделка корейцев. Так себе защита: обойти его было довольно просто (если интересно — могу написать, как). И политика на европейских серверах была очень лояльной к ботам. Пользователей с Win7 не банили. Наоборот, был момент, когда из-за отсутствия x64 версии GameGuard пользователям разрешили временно играть с отключенным GameGuard на соответствующих системах.
А вот на русских серверах работал Frost. И вот это уже ядрёная штука, реально война читеров.
Возможно, мы говорим про разные версии, т.к. у меня ммо с GG не запускались когда в системе было установлено любое средство для дебаггинга.
драйвера для геймпадов воспринимались как читы.
порой он просто крашил игру просто потому что подумал что война ты пытаешься его взломать и т.д.
Автоматизация рыбной ловли для World of Warcraft