Pull to refresh

Comments 89

После прочтения вспоминается старый-добрый UOpilot. Интересно, он есть на Маке?

Он умел распознавать картинку?

Цвет пикселя под курсором. Или в заданных координатах тоже — уже не помню.

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

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

Ещё периодически «ходить покурить», сворачивать игру, переключаться на фэйсбучег и т.п — когда-то давно, уже не помню, для какой игры, я так записывал макросы родной майкрософтской программулиной.
Для этого нужно будет ставить зеркало перед маком, чтобы он смог видеть своей встроенной вебкамерой что происходит на экране. Да и в электронике я слаб, так что механическое изменение положения мышки для меня сложнее, хотя идея механически использовать трекпад несколько проще, вам не кажется?
Все же проще купить USB Web-камеру с драйверами под мак, чем ставить зеркало. Насчет трекпада не уверен, с шариковой мышкой может быть тогда еще проще. Можно кстати взять ездящую платформу как у многих 3D принтеров, установить вместо сопла сенсор мыши (лазерный/оптический) и двигать платформу относительно сенсора.
Хардкор хардкором, но проще взять какой-нибудь микроконтроллер с поддержкой USB и симулировать обычную HID мышку
¯\_(ツ)_/¯ Ну мы не ищем легких путей и любим создавать себе проблемы с заделом на будущее
Я для BlackDesert ардуину с прошивкой как HID устройство использовал.

Сразу вспомнил была статья про то, как сделали бота для аукциона и почты в WoW используя AutoIT и внутриигровой аддон: https://habrahabr.ru/post/113258/

AutoIT умеет распозновать разницу. Я использовал его в Линейке, находил статическую позицию и использовал как торгового бота с автоматизацией ответа. Вещи за ночь продавал :)

Хорошая идея, но Вам прилетит бан в следующем «бан-вейве». Вы действительно думаете, что до того, как лезть в память, никто не искал поплавок на экране? :)
Я уверен Вы попались сразу же по движению курсора, которое не характерно реальному человеку, а идёт ровно от Х1, Y1 до X2, Y2.

Конечно искали, но статьи такой я не нашел и подумал было бы интересно написать — мало ли в каких других ситуациях или играх понадобится такая штука.
Можно про «бан-вейв» подробнее? Уже прошло пару месяцев как я последний раз его запускал и пока ничего страшного не произошло.

Да множество случаев. Устраивают не часто, может и полгода полет будет успешный, как повезет

Тогда это будет наконец достойный повод завязать. Но пока бана нет — это того стоило

Сделайте второй аккаунт, создайте гильдию и прячьте деньги в гильд-банк. Аккаунт с ботом, скорее всего, забанят, а вот деньги из ГБ не забирают :)
Если речь о деньгах, то заработал всего тысячу-полтора за эту неделю ночных абузов, так что не очень выгодно, но ведь маунта, ачивки и игрушки не скинешь… (Только не смейтесь)
Второй аккаунт на это же имя и слёзно просить саппорт объеденить их

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

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

Как разбираются с такими вот «уникальными» и мелкими ботами я не знаю. Возможно, индивидуально, по жалобам игроков.
> Как разбираются с такими вот «уникальными» и мелкими ботами я не знаю. Возможно, индивидуально, по жалобам игроков.

Я уверен, что именно так и делается. Просто производится ручная проверка. А автоматический банхаммер неэффективен по причине большого количества ложных срабатываний.
Раз в полгода, примерно, Близы накапливают достаточное количество информации (тикетов либо подозрительных хзаписей лога) и банят сразу огромное количество пользователей за различного типа проступки.
Добавить немного шума в итоговые координаты + сделать шанс на «случайный» промах по поплавку. Чем это будет отличаться от реального человека? Разумеется, за 20 часов мимо может много раз кто-то пробежать, заговорить, не получиться ответ и кинуть репорт, но это уже вообще другой разговор)
Еще можно двигать курсор с ускорение. И добавить редкие рандомные движения курсора по экрану в случайные отрезки времени. И время от времени открывать инвентори, или статы какие-то.
И переписку с другим ботом, которого нужно будет сделать специально чтобы поддерживать «жизнь» нашего рыболова. Благо достаточно всяких апи с говорящими ботами.
заказать внутриигровую майку:
«1. Только пришел
2. Не клюёт
3. На червя
4. Водку буду»
Я когда бота писал для какой-то игры, перемещал мышку по кривой безье рандомно генерируя третюю точку. Хоть какое-то подобие пользователя создавалось )
Недавно была статья про openai играет в доту, тоже на питоне. Но там задача значительно сложнее, как они решают эту проблему определения где что на экране? мб есть идеи?

Я знаю, что Source 2 довольно не новый движок, и его уже перековыряли со всех сторон. Есть боты же и для CS:GO и для той же доты, которые взрывают бомбы минеров по нужному количеству хп у противников в любой части карты.
Так что вполне возможно и внедрение. То, что было на The international, я думаю это обычное подключение бота через апи самого Source 2 — есть же обычные боты и в доте и в CS:GO.


Кроме того — я же не претендую на статью об искусственном интеллекте. Возможно их бот работает на очень мощном железе и его писали ребята, которые делают очень большие проекты на openai. Тогда они вполне могли бы и картинку обрабатывать на уровне повыше обычного метчинга темплейтов. Как раз совсем недавно общался на эту тему со знакомым, который предлагал мне сделать на python искусственный интеллект, который смог бы играть в Gravity Defied используя только картинку, но я пока не решаюсь переписывать Gravity Defied на python.

Чтобы уменьшилась вероятность бана, я бы добавила рандомные перерывы в рыбалке. Не может обычный человек играть без перерыва на пару минут всю ночь.
Тогда уже и рандомные перемещения курсора и паузы между кликами.
Ну и по поводу «всей ночи» — Вы сильно недооцениваете школьников или корейских игроков)
Уже не школьники были и не корейцы, но так с братом и играли, с вечера я (мне утром нужно было на работу вставать), часа в два ночи будил брата, он потом играл до утра. Не в WoW, правда.
Да ну? Не может обычный человек в РЕАЛЕ ловить рыбу по 10 часов каждую ночь, в течении последних 10 лет, включая снег и дождь(у нас так пенсионеры делают).
В свое время делал очень странного бота для Rift.
У рыбалки там несколько стадий. На тот момент был готовый бот, который использовал лог-файл игры для определения этих стадий, но, насколько помню, самая важная стадия(поклевка) в логе не отображалась и бот использовал какое-то решение, которое по какой-то причине меня не устроило(а может, просто захотелось написать свой собственный, не помню).
В итоге получилось забавно — я в силу своих скромных способностей в реверсе приложений умудрился найти только функцию, отвечающую за воспроизведение звуковых файлов. В итоге перехватывал эту функцию и, в случае воспроизведения соотв. поклевке файла, производил необходимые действия.
В итоге получилось что-то средней монструозности, но, на удивление, более-менее эффективное: за относительно короткий срок вкачал рыбалку на максималку и еще какое-то время неплохо зарабатывал на рыбе.

Но вообще лучший бот, который я когда-либо использовал — https://www.solarstrike.net/ для Runes of Magic. Логика на xml+lua шикарна, бот предоставляет базовый набор функций+куча функционала и готовых waypoint'ов от других пользователей + никто не мешает писать свою логику. Чего там только народ не ваял)
Воспользуйтесь опытом поколений! Добавьте случайные (именно случайные, а не луповые) вариации в движении курсора, в скорости реакции, во всех возможных действиях. А то ведь отловят.
Мне тут товарищ подкинул идею попроще: труд детей. Своих, разумеется.
В армии с детьми проще (для командиров).

Неспортивно предлагать такое на ресурсе программистов.

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

Как же вы натолкнулись на статью пятилетней давности?

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

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

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

На самом деле у меня не было задачи полностью скрыть использование бота, но избежать автоматического бана античита, у которого неопровержимые доказательства изменения памяти игры. Конечно запись координат курсора — тоже неопровержимое доказательство, но мне кажется это уже дикость следить за таким.
Я просто думал на тему более хитрого бота — что бы ротацию крутить (последовательность способностей), распознавая иконки статуса персонажа, но опасения бана и лень оказались сильнее.
В WoW настолько суровый античит? Я просто играл в Lineage 2 на офсервере — там использовался GameGuard, но исключительно как пассивное средство, мешающее работать ботам (на самом деле нет), но не стучащее о подозрительном софте и изменении памяти процесса на сервер.

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

Чисто теоретически, бота от человека можно отличить по паттернам действий, но простыми наборами правил здесь не отделаться из-за огромных объёмов данных и высокой сложности. Тут уже начинают работать методы BigData. Но вот использует ли Blizzard AI для обнаружения ботов — большой вопрос.
В пользовательском соглашении есть пункт об наказании за автоматизации, а также пункт о разрешении сканирование компьютера и памяти на наличие всяких читерских штук. Насколько я знаю, делает это даже не сам клиент игры, а клиент батлнет, ибо он как раз и предлагает это соглашение, когда ставится. Хотя пруфов его деятельности у меня нет.
Самые первые боты рыбалки были написаны именно с использованием перемещения курсора мыши и сканирования экрана на предмет поплавка. И как раз этот тип ботов чаще всего банится (вернее банятся аккаунты).
Рыбачил с год, (ботом) каждую ночь, по 5-10 часов, без всяких предосторожностей (ибо на акк было пофиг), прошло три года — бан не прилетел.

Делал ради интереса подобного бота на Sikuli (программа для автоматизации, с питоновским синтаксисом скриптов). На самом деле, все было очень похоже как в вашем примере, но с парой отличий:


  • Определение момента для подсекания реализовал через отслеживание изменения области кадра с найденным поплавком.
  • Строк кода вышло <100. Экономия, в основном, за счет уже готовых инструментов для поиска нужной части кадра и отказа от слежения за аудио.
Но ведь поплавок и так качается — вы смотрели по сильному смещению поплавка? Значит у вас очень хорошо работала обработка кадра. Как я уже писал, на моем Intel Iris анализ каждого кадра в OpenCV с включенной игрой занимает 300-500мс (включая сам скриншот через ImageGrab), я посчитал это несколько неразумным в моем случае, поэтому взялся за звук.

Да, отслеживал именно по длительному (>0,3 секунды) выходу поплавка из узкой зоны, где он обычно находится.


Сейчас проверил быстродействие визуального поиска. На ноуте с Core i7 и мобильным Radeon HD 8530M на поиск элемента по всему экрану 1366x768 уходит около 0,03 секунды. Если сократить область поиска в 5-6 раз, т.е. до примерной области рыбалки в WoW, то время на поиск уменьшается вдвое.

Как ниже верно сказали, можно же было изначально определить положение поплавка на экране и потом искать только на нем. Ведь экран наверное вы не вращаете во время работы бота? А это сильно влияет на скорость поиска.

Поплавок в рандомные места падает.
Так ведь речь о том, что он качается в том месте. Если мы отловили координату поплавка, то нам не нужно обрабатывать какую-то конкретную часть экрана, а только какиех-то пару десятков пикселей на наличие изменения поплавка. Если поплавок вдруг резко изменился и вернулся на место — значит он прыгнул.
Как альтернативный метод, еще можно по звуку поклева, он там один всего лишь и слышен четко.
Вы точно дочитали статью?
UFO just landed and posted this here
все логично, ботаем вовку и диаблу, а в освободившееся время лабаем ИскИн'а на StarCraft II API
А в диабле что ботать?
фарм редких предметов я думаю… Хотя аукцион убрали, но и без него… неужели бегать по стотыщпятисотому разу по одним и тем же локациям раскидывая монстров направо и налево?
Пробовал запустить скрипт Ваш, куча проблем с библиотеками питоновскими на Маке. Есть какой-то может магический девелопмент пакет для питона, о котором я не знаю? :)
Году эдак в 2007 с одногрупниками писали бота для ловли рыбы в Lineage и по-моему это был как раз UOpilot.
UFO just landed and posted this here
Вы правы, что плохо работает когда есть соседки поплавок.
А как считывали данные о курсоре? Я думал об этом решении, но не нашёл на пайтоне никакого способа вытащить иконку курсора, а на скриншотах нет курсора, как я уже писал.
UFO just landed and posted this here
И скорее всего вы использовали NSCursor.currentSystem.
Из документации
Return Value
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 с последующим уменьшением разрядности цвета после чего будет проще отыскивать границы поплавка.

Забанят, этот аккаунт уже можете удалять, смысла качать нет. Банят даже навороченные системы, которые работают с оперативкой.

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

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

Если это несложно, тогда поясните, как.
Например, поставить хук на WH_MOUSE_LL и проверять LLMHF_INJECTED. Можно поставить хуки во всех процессах на mouse_event и SendInput. Можно на уровне драйвера перехватывать необходимые события и блокировать их, если они идут к защищаемой программе от посторонней программы. Это всё тоже можно обойти, но вызова autopy.mouse.click (использует mouse_event) явно недостаточно.
Я ничего не могу скачать про WoW, но у меня есть опыт обхода системы защиты для L2.
Если коротко, то я вгрызался в 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. была инфа что создатель геймгварда бывалый читер. поэтому это "война читеров". Её не раз обходили, но этот тип сидел на закрытых форумах и первым узнавал об обходах и достаточно быстро их фиксил.

> P.s. была инфа что создатель геймгварда бывалый читер. поэтому это «война читеров». Её не раз обходили, но этот тип сидел на закрытых форумах и первым узнавал об обходах и достаточно быстро их фиксил.

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

А вот на русских серверах работал Frost. И вот это уже ядрёная штука, реально война читеров.

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

> У меня ммо с GG не запускались когда в системе было установлено любое средство для дебаггинга

И именно поэтому я писал свой чит-софт на C#, а не C++, т.к. GG блокировал нативный отладчик, а вот отладчик .NET — нет.

P.S. Вспомнить, что ли, молодость — попробовать сейчас обойти GG.
UFO just landed and posted this here
Есть такая вещь — ClickerMan. Умеет очень многое. Есть даже свой встроенный язык, можно писать собственные программы по эмуляции и обработке различных действий.
Я так словил бан в 2015 году, разбанили только через год, качал только рыбалку и нечего больше. Вообще не советую использовать что либо, в игру нужно играть или не играть вовсе.
Sign up to leave a comment.

Articles