Comments 77
Спасибо. Вспомнил молодость и кучу маленьких программ для обмана защиты =)
бот для развлечения, не хватает обработок ситуаций:
— фармишь лес, тебя убили, появился в городе дать направление куда бежать (в зависимости от города)
— если попадаешь на мостра:
— выше твоего уровня — на таких, скорее всего, не стоит нападать
— обходить агрессивных монстров, если они выше твоего уровня
— обходить группы монстров
— если монстры все вокруг убиты и не спавняться — дать новое направление
— избегать игроков и отличать их от монстров — чтобы нас не убили и наш бот не запалили :)
в общем, интересная задумка.
Казалось бы, зачем тратить время на продукт, который не приносит никакой практической пользы?
я бы здесь не согласился
— ради «попробовать» — интересно и полезно, с чем Вы согласны,
— помню, на некоторых серверах L2, пользователи покупали шмотки, аден, аккаунты за реальные деньги :)
если довести бот до максимальной автономности, чтобы персонаж качался круглосуточно — оставив несколько клиентов L2 запущенных под управлением подобного бота в VM Ware, за месяцок можно набить нормальное количество аккаунтов с прокачанными и «одетыми» персонажами… останеться лишь продать :)
Есть существенная разница между (на вскидку):
— Персонаж 24 часа бегает в одном данже, бъет одних и тех же мобов 4 абилками, в чат не пишет, не делает релог.
— Персонаж переписывается в чате, бегает в город, сидит мулом в Гиране или Одене, торгуя A-сетом.
Как ниже написал mickvav, эмулирование действий человека, в том числе, ошибки, запланированные и случайные по длительности паузы — существенно увеличивают шанс не попасть под банхаммер. А вот 24/7 гринд — верный путь в бан.
— Персонаж 24 часа бегает в одном данже, бъет одних и тех же мобов 4 абилками, в чат не пишет, не делает релог.
И как вы сможете это проверить? Насколько я помню, сервер L2 не пишет насколько детальную информацию в логи. Ну и даже если бы и писал, то автоматическое выявление ботов было бы серьёзной BigData задачей.
Поэтому стандартный способ выявления ботов — вручную по репортам, либо через невалидные данные (невидимые мобы, например).
стандартный способ выявления ботов —
Группа опытных ботхантеров 24/7 ингейм, патрулирующих все локации. Невалидные мобы/итемы — мера против школьников и то, на 1-2 раза. А вот гейм-мастер, снимающий баф с чара — гораздо эффективный метод.
На еврооффе, где я играл, ГМы так не заморачивались. Потому ботоводство там цвело и пахло. Но вообще, если владелец сервера действительно хочет избавиться от ботов, то он может это сделать. А вот с чем владелец сервера ничего не может сделать — это снифферы, совсем простая автоматизация и багоюз.
Группа опытных ботхантеров 24/7 ингейм, патрулирующих все локации
А ещё был GMChecker. ГМ в онлайне — боты прячутся.
Ещё была технология определения местоположения любого игрока в игре.
И да, с инстансами что делать?
А вот с чем владелец сервера ничего не может сделать — это снифферы, совсем простая автоматизация и багоюз.
Мы говорим про официальные сервера или все?
И да, с инстансами что делать?
Инстансы не создаются динамически и преград для доступа ГМов в инстансы нет.
А ещё был GMChecker.
/gmlist или /gmonline, точно не помню. Стандартная команда и, есессно, у ГМов есть опция «не отображать в списке онлайн» (с каких хроник — не скажу, но есть).
ГМы так не заморачивались
В Корее прекрасно понимают, что фармить в таких масштабах нереально и, если ты не продаешь награбленное, всем до лампочки.
/gmlist или /gmonline, точно не помню. Стандартная команда и, есессно, у ГМов есть опция «не отображать в списке онлайн» (с каких хроник — не скажу, но есть).
Понятное дело, что эта команда не работала. Были косвенные признаки определения, находится ли ГМ в онлайне или нет. Например, зная ник игрока, можно легко понять, находится ли он в онлайне или нет, так, чтобы этот игрок об этом не узнал. Главное — просто вести актуальный список ГМов и перебирать их в бесконечном цикле со специального аккаунта.
Инстансы не создаются динамически и преград для доступа ГМов в инстансы нет.
Тем не менее, инстансы защищают от случайных прохожих, могущих зарепортить ботов.
Они воют чутли не по договоренности, члены (боты в том числе) воющих кланов могут стоять на соседних полянах и еще мирно в чатике переписываться, наши с поляны выпрут любого исходя из принципа потому что могут), трейн не опытного ботовода разденут до гола и репортить не будут, если мозгов боту не добавят еще раз придет и оберет как липку.
P.S. NCSoft (как и сами видимо корейские игроки) ботов проблемой у себя не считают, соответственно плевали они и на защиту, что у себя, что на евро, что руоффе (локализатор ковырялся сам вроде всегда), отсюда и DLL-injection как вершина ботовского софта для линейки упомянутая товарищем DistortNeo ниже
Скорее, имел место компромисс между уровнем зондирования и недовольством пользователей. Например, местный Frost банил игроков просто за сам факт наличия на жёстком диске бота. Для США/Европы такое немыслимо, поэтому GameGuard работал довольно мягко, просто не давая играть при определённых условиях
А ещё в GameGuard есть белый список приложений, которым можно отправлять нажатия клавиш в окно игры. В этом список входят, например, драйверы клавиатур, Fraps и т.д. Не знаю, как сейчас, но раньше проверка была простая — по имени. То есть достаточно было переименовать AutoHotKey.exe в какой-то-там-panel.exe (от Logitech), и опа — всё работает.
И, кстати, в случае невозможности использования инъекции DLL решение все равно бы было — сетевой шлюз внутри виртуальной машины, который у системы защиты вообще не было бы никаких шансов обнаружить, кроме самого факта запущенной виртуальной машины.
А ещё в GameGuard есть белый список приложений, которым можно отправлять нажатия клавиш в окно игры. В этом список входят, например, драйверы клавиатур, Fraps и т.д. Не знаю, как сейчас, но раньше проверка была простая — по имени.
И первые ребята с не вошедшим в список софтом, для бинда кнопок/макросов для мышки улетали по первости в бан и штурмовали саппорт) было дело)
самый заядлых игроков — отчислили в первом семестре, я был не из заядлых, но в придачу еще и бухал, потому и меня отчислили )
помню, на некоторых серверах L2, пользователи покупали шмотки, аден, аккаунты за реальные деньги :)
На всех. Цена зависит от даты старта сервера.
Было бы круто, если бы нашлось время на разбор бота с внедрением в процесс игры.
Обходы защит и прочие плюшки :)
Сразу после старта клиента, но до старта GameGuard (около секунды) клиент является абсолютно незащищённым — можно делать что угодно. После старта GameGuard последний ограничивает внешний доступ к процессу, мониторит сетевые соединения и проверяет консистентность системных библиотек.
Для перехвата соединений внутри клиента я использовал обычный DLL-injection и JMP-хуки (при этом меняется код системной библиотеки в памяти процесса). Всё это успешно делалось в первую секунду после старта процесса. При этом был обнаружен интересный факт: GameGuard препятствет установке хуков на recv(), send() — даже если они были установлены ранее, то GG восстанавлияет исходный код библиотеки, но позволяет устанавливать JMP-hook на функцию connect().
Но не всё так просто: мы не можем просто взять и перенаправить вызов connect() на адрес, отличный от сервера L2 — это спалит система защиты. Но оказалось, что GameGuard нормально пропускает сокеты, переданные из другого процесса с помощью DuplicateAndClose. Поэтому внутри процесса настраивался pipe, а затем оба сокета передаётся в процесс-бот, ну а дальше дело техники.
Ну и ещё мелочь: перехват кликов мышки для того, чтобы клики, сделанные поверх окна бота, не доходили до клиента. Здесь всё аналогично, но хуки навешивались уже на одну из библиотек DirectX.
P.S. для полностью автономного существования
а Фрост кликеры и не палил, процесс clicker.exe переименовал в neygadal.exe на этом хак закончен
для ботовода 2 правила:
1. правильное место)
2. тихое место)
1) Не играть.
2) Ваших чаров забанят. Когда — вопрос времени, к этому нужно быть готовым.
3) Не пастись в одной локации.
Как это в классике нет кат? Прекрасные 60+ каты под ХВ :)
Крупные кланы обычно пользуются приватным софтом, настраиваемый под задачи, там такой человек на окладе сидит), к тому же все конвертируемое в вечно зеленые в их руках, сам бог велел как говорится, доход одинокого ботовода не сравнится с Топами, но в зависимости от периода развития игры на икру хватит
Тоже на Python (+ PyQT для удобства). Использовал OpenCV для анализа того, что ImageGrab «скринил». Пришлось сделать много скриншотов, из которых я удалял лишнее (делал прозрачным) и оставлял только то, что точно идентифицирует наше «состояние».
Пытался сделать так, чтобы работало со свернутым окном — никак. :) Не придумал вообще как можно получить снимок неактивного DirectX приложения (и можно ли вообще). Да и клавиши все равно слать надо… Проще уже в виртуалке, если тянет.
Ну а так работало все. Запустил, Alt+Enter, нажал «Start» боту, и погнало до утра играть. :)
У меня получалось работать с неактивным окном если его не сворачивать, а просто вынести за область видимости экрана: тогда уменьшается нагрузка на видеокарту и можно делать скрины.
Серву к клавиатуре крепил двумя саморезами.
github.com/Areso/Arduino-clicker
И мне показалось, что работает (обрабатывает события) медленно. Очень много времени занимает нахождение цели, выделение, повороты.
Как я понял, при наведении мыши мобы иначе подсвечиваются (например красным)
Теперь наводим курсор на найденного монстра и смотрим, появилась ли подсветка с помощью метода
при наведении мыши мобы иначе подсвечиваются
Нет. А вот как я понял — проверки на «моб — чар» просто нет. Потому первый же чар (по правилам игры, чаров с белым ником атаковать без зажатого Ctrl нельзя) уведет бота куда угодно (атака в «белого», на игровом сленге «не флагнутого» — не перешедшего в пвп режим (тогда ник чара розовеет), работает как атака в NPC: начать диалог).
Важный момент: система защиты на офсерверах (GameGuard) обходилась с полпинка, за ботами особо не следили, поэтому я работал непосредственно на уровне сетевого протокола.
Ну и алгоритмы старался делать интересные:
— глобальную навигацию: бот сам может добежать в точку с произвольными координатами, используя при необходимости телепорты, без необходимости задания вэйпоинтов (удобно для второоконного баффера, чтобы не переключаться на него);
— обмен информацией между персонажами для оффпати режимов;
— важной составляющей является активный багоюз, но это уже отдельная тема для разговора.
Немного жалею, что в те времена ещё не было средств разработки, которые доступны сейчас — сделал бы гораздо больше всего интересного. Дико не хватало асинхронного программирования. Ну и сейчас я бы попробовал использовать не захардкоженные алгоритмы, а ИИ для более правдоподобных действий ботов.
Ждем следующую статью про самообучающегося бота на нейросетях
А некоторые приложения, как клиент этого сервера, могут определять источник клика на уровне ОС. (будет здорово, если кто-нибудь подскажет как именно).
Мое предположение, что автокликеры используют WinApi для кликов/хоткеев, а игра использует DirectInput
В юности какой-то кусок времени игрался в Silkroad где-то до 2008го года со всеми вытекающими систем free2p(l)ay — донаты, боты… Был отличный хак"testosterone" от товарища Rumata с небольшим изменением в клиенте, так же был слегка кАличный, но работающий TBot, который как-то навешивал хуки и пропускал через себя трафик игры, как через прокси, анализируя входные и добавляя команды на движения в выходные данные…
Может кто помнит?
все делалось только работая с памятью.
Игра запускалась на виртуальной машине, и простор для фантазии был практически безграничен, правда обратной связи от игры получить я так и не смог.
Вот сейчас задумался попробовать сделать что ни будь подобное и с современными играми
Этот алгоритм поиска моба думаю стоит применять после того, как перестанут выделяться мобы по /targetnext
Давненько в Линейку не играл, но если мне не изменяет память, по умолчанию на TAB’е висит перебор целей, видимых на экране. Название и ХП текущей цели отображаются в прямоугольнике в верхней части экрана. Не проще ли работать с этим таргетным прямоугольником, а не со всем экраном?
Если монстр жив, продолжаем атаковать
Если нет цели, найти цель и начать атаковать
Если не удалось найти цель, немного повернемся
Если 5 раз никого не удалось найти — идём в сторону и начинаем заново
Пока он ищет цель и вертится его не убьют?
Самое сложное зачистить комнату, когда все монстры уже появились(на игрока налетает вся толпа), делается как правило в ручную
цели убиваются поочередно,
из этого следует что и появляются они по очереди, а не толпой после зачистки комнаты
главное рассчитать время убийства моба с временем респа и вуаля)
find target
«targets found 6, names: monster Nephilim (2), monster OtherName(2), monster YetAnotherName(1), player VasyaBigOrc»
attack -player VasyaBigOrc &
useskillbutton -row 3 -number 7
Естественно, скорость реакции и действий в случае пвп оставляли бы желать лучшего, но соль-то не в них.
А мне однажды приснилось, что СБ одной большой компании с неоднозначной репутацией и с проектом, очень похожим на линейку по геймплею, довольно активно боролась с проявлениями ботизма с эффектами присутствия.
На самом деле компьютерная игра с точки зрения компьютерного зрения — почти то же самое, что и снятая на камеру реальность, а там возможности для применения огромны. Отличный пример описан в статье про подводных роботов, которые лазером стреляют по лососям. Также статья может помочь разработчикам игр в борьбе с ботоводами.
Пример как может выглядеть компьютерное зрение на основе нейросетей вместо заданных преобразований можно посмотреть тут: https://youtu.be/PPAZjT2l-JQ (без звука, просто демка)
Видео моё, могу поотвечать на вопросы если интересно.
Что в итоге удалаось нафармить этим ботом, за все это время?
Пишем бота-кликера на Python для Lineage 2