Как стать автором
Обновить

Комментарии 76

А сколько времени было потрачено на создание бота?
В часах немного, начал две недели назад.
Прикольно. Но, труднее ли это было бы реализовать на AutoHotkey?

Она палится системой защиты =)

тестил?)
По какому признаку?
Это самый интересный вопрос :)
Человек не двигает курсором по алгоритму Брезенхема.

Спасибо. Вспомнил молодость и кучу маленьких программ для обмана защиты =)

прикольно получилось, играл когда-то :)

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

в общем, интересная задумка.

Казалось бы, зачем тратить время на продукт, который не приносит никакой практической пользы?


я бы здесь не согласился
— ради «попробовать» — интересно и полезно, с чем Вы согласны,
— помню, на некоторых серверах L2, пользователи покупали шмотки, аден, аккаунты за реальные деньги :)

если довести бот до максимальной автономности, чтобы персонаж качался круглосуточно — оставив несколько клиентов L2 запущенных под управлением подобного бота в VM Ware, за месяцок можно набить нормальное количество аккаунтов с прокачанными и «одетыми» персонажами… останеться лишь продать :)
Круглосуточно — очень быстро будет замечено.
Вы, видимо, просто не знакомы с Lineage 2)
А в чем собственно проблема запрограммировать бота на «разлогиниться в 2 часа ночи и залогиниться в 8 утра»… А если добавить случайности (+- час тут, траекторию «мыши» сделать не ровно прямой, направление выбирать случайно, монстров «иногда» не замечать...) — то можно очень долго не палиться…
А в чем собственно проблема запрограммировать бота на «разлогиниться в 2 часа ночи и залогиниться в 8 утра»…

А зачем? Нахождение в онлайне 24/7 ещё не означает, что персонаж бот. Может, он просто торгует?

Прекрасно знаком.
Есть существенная разница между (на вскидку):
— Персонаж 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 ниже
> отсюда и DLL-injection как вершина ботовского софта

Скорее, имел место компромисс между уровнем зондирования и недовольством пользователей. Например, местный Frost банил игроков просто за сам факт наличия на жёстком диске бота. Для США/Европы такое немыслимо, поэтому GameGuard работал довольно мягко, просто не давая играть при определённых условиях

А ещё в GameGuard есть белый список приложений, которым можно отправлять нажатия клавиш в окно игры. В этом список входят, например, драйверы клавиатур, Fraps и т.д. Не знаю, как сейчас, но раньше проверка была простая — по имени. То есть достаточно было переименовать AutoHotKey.exe в какой-то-там-panel.exe (от Logitech), и опа — всё работает.

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

И первые ребята с не вошедшим в список софтом, для бинда кнопок/макросов для мышки улетали по первости в бан и штурмовали саппорт) было дело)
когда впервые познакомился с Л2, я был на 1курсе КПИ, тогда были лишь первые хроники, и рейты на все х1, и когда старый сервер Duron 900Mhz падал, пол-дня игры коту под хвост, что очень многих раздражало, и многие играли чуть ли не сутками :)

самый заядлых игроков — отчислили в первом семестре, я был не из заядлых, но в придачу еще и бухал, потому и меня отчислили )
помню, на некоторых серверах L2, пользователи покупали шмотки, аден, аккаунты за реальные деньги :)

На всех. Цена зависит от даты старта сервера.
Интересная штука!
Было бы круто, если бы нашлось время на разбор бота с внедрением в процесс игры.
Обходы защит и прочие плюшки :)
Могу вкратце написать, как я обходил GameGuard на еврооффе. Особенности GameGuard:

Сразу после старта клиента, но до старта GameGuard (около секунды) клиент является абсолютно незащищённым — можно делать что угодно. После старта GameGuard последний ограничивает внешний доступ к процессу, мониторит сетевые соединения и проверяет консистентность системных библиотек.

Для перехвата соединений внутри клиента я использовал обычный DLL-injection и JMP-хуки (при этом меняется код системной библиотеки в памяти процесса). Всё это успешно делалось в первую секунду после старта процесса. При этом был обнаружен интересный факт: GameGuard препятствет установке хуков на recv(), send() — даже если они были установлены ранее, то GG восстанавлияет исходный код библиотеки, но позволяет устанавливать JMP-hook на функцию connect().

Но не всё так просто: мы не можем просто взять и перенаправить вызов connect() на адрес, отличный от сервера L2 — это спалит система защиты. Но оказалось, что GameGuard нормально пропускает сокеты, переданные из другого процесса с помощью DuplicateAndClose. Поэтому внутри процесса настраивался pipe, а затем оба сокета передаётся в процесс-бот, ну а дальше дело техники.

Ну и ещё мелочь: перехват кликов мышки для того, чтобы клики, сделанные поверх окна бота, не доходили до клиента. Здесь всё аналогично, но хуки навешивались уже на одну из библиотек DirectX.
Интересно, спасибо!
Будет круто увидеть это в виде сочного, жирного поста. Если будет желание и время.
Как это сочетается, например, с Фростом и 4геем?
бот явно писался не для L2 Classic, там явно требуется учесть и предугадать больше вариантов развития событий, весьма агрессивного «ареала обитания».
P.S. для полностью автономного существования

а Фрост кликеры и не палил, процесс clicker.exe переименовал в neygadal.exe на этом хак закончен
Ну, в классике и нет кат, для которых этот бот и подходит :)
есть места где появление мобов ограничено пятачком, + некоторые локации аля Forgotten Temple под Глудином, разбитое на комнаты.
для ботовода 2 правила:
1. правильное место)
2. тихое место)
На самом деле правил гораздо больше, если хочешь максимально снизить вероятность бана, какое бы тихое место ни было, рано или поздно может пробежать случайный игрок, спалить тебя, написать петицию, приходит модератор, всё твоего аккаунта больше нет)
Для ботовода могу выделить несколько правил:
1) Не играть.
2) Ваших чаров забанят. Когда — вопрос времени, к этому нужно быть готовым.
3) Не пастись в одной локации.

Как это в классике нет кат? Прекрасные 60+ каты под ХВ :)

Я писал бота для Interlude, т.к. мне доводилось играть только на этих хрониках. Хроники на актуальных серверах давно ушли вперед.
Классная статья по старой доброй игре :) Интересно было прочитать, когда ни будь надеюсь повторить.
НЛО прилетело и опубликовало эту надпись здесь
Зарабатывать надо на продаже бота :)
Сложно конкурировать с Адреналином :). Даже пока наращиваешь возможности, очень сложно демпинговать будет.
Адреналин не просто софтина, а уже целый сервис с поддержкой, там грамотно все сделали, качество не проверял, но сам подход :)
Крупные кланы обычно пользуются приватным софтом, настраиваемый под задачи, там такой человек на окладе сидит), к тому же все конвертируемое в вечно зеленые в их руках, сам бог велел как говорится, доход одинокого ботовода не сравнится с Топами, но в зависимости от периода развития игры на икру хватит
На просторах интернета был найден способ решения проблемы: usb-устройство, которое можно запрограммировать на подачу нужного сигнала — Digispark.

Есть ещё USBIP. И пример эмулятора HID-устройства к нему.
Ещё можно реализовывать через отправку комманд Bluetooth HID и двух адаптеров версии от 2.0 :)
В своё время не вылезал из l2. Ночи в катах, мамон… Ностальгия напала. :'0
В новой «линейке» Revolution разработчики полностью решили проблему ботов. Теперь там есть кнопка «автофарм» :).
НЛО прилетело и опубликовало эту надпись здесь
lineage 2 revolution это не обновление а отдельная мобильная гриндилка не имеющая отношения к традиционной ла2, классику и фришкам(ну может кроме лора).
хорошо, что это «дедушки» не видели, которые до сих пор в Ultima Online играют :)
и скрипты пишут под неё
А я не так давно для FIFA 18 делал бота, который сам по ночам просто матчи запускал (результат там не важен) для фарминга монет.

Тоже на Python (+ PyQT для удобства). Использовал OpenCV для анализа того, что ImageGrab «скринил». Пришлось сделать много скриншотов, из которых я удалял лишнее (делал прозрачным) и оставлял только то, что точно идентифицирует наше «состояние».

Пытался сделать так, чтобы работало со свернутым окном — никак. :) Не придумал вообще как можно получить снимок неактивного DirectX приложения (и можно ли вообще). Да и клавиши все равно слать надо… Проще уже в виртуалке, если тянет.

Ну а так работало все. Запустил, Alt+Enter, нажал «Start» боту, и погнало до утра играть. :)

У меня получалось работать с неактивным окном если его не сворачивать, а просто вынести за область видимости экрана: тогда уменьшается нагрузка на видеокарту и можно делать скрины.

Припаять провод к контакту кнопки? Нет. Саморезы!
Безотносительно к ботам для ла2: ничто так не эмулирует аппаратный дребезг ключа, как аппаратный дребезг ключа (на правах шутки). Зато обеспечивает небольшой, но настоящий хардварный рандом при нажатии.
Если в локации будут другие белые имена помимо мобов? NPC/Игроки.

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

Как я понял, при наведении мыши мобы иначе подсвечиваются (например красным)


Теперь наводим курсор на найденного монстра и смотрим, появилась ли подсветка с помощью метода
при наведении мыши мобы иначе подсвечиваются

Нет. А вот как я понял — проверки на «моб — чар» просто нет. Потому первый же чар (по правилам игры, чаров с белым ником атаковать без зажатого Ctrl нельзя) уведет бота куда угодно (атака в «белого», на игровом сленге «не флагнутого» — не перешедшего в пвп режим (тогда ник чара розовеет), работает как атака в NPC: начать диалог).
Было написано про НПС, проверяется отклик при наведении, если он «правильный», то кликается левая кнопка мыши и идет атака, если же он «неправильный» то выбирается следующая цель.… Интересный актокликер, мне понравилась как логика реализации так и сама реализация, классненько, я когда-то делал кликер для пв, там было тоже не очень просто реализовать все эти логические комбинации, решил проблему почти также :)
Аж передёрнуло от темы. В своё время (~10 лет назад) играл на еврооффе, и тоже писал своего бота. Причём писал тоже по-серьёзному: с кусей пользователей, сервером обновления бота. Собственно, для меня это был первый серьёзный проект, которых неплохо подтянул скилл программирования.

Важный момент: система защиты на офсерверах (GameGuard) обходилась с полпинка, за ботами особо не следили, поэтому я работал непосредственно на уровне сетевого протокола.

Ну и алгоритмы старался делать интересные:
— глобальную навигацию: бот сам может добежать в точку с произвольными координатами, используя при необходимости телепорты, без необходимости задания вэйпоинтов (удобно для второоконного баффера, чтобы не переключаться на него);
— обмен информацией между персонажами для оффпати режимов;
— важной составляющей является активный багоюз, но это уже отдельная тема для разговора.

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

Ждем следующую статью про самообучающегося бота на нейросетях

А некоторые приложения, как клиент этого сервера, могут определять источник клика на уровне ОС. (будет здорово, если кто-нибудь подскажет как именно).

Мое предположение, что автокликеры используют WinApi для кликов/хоткеев, а игра использует DirectInput

> Мое предположение, что автокликеры используют WinApi для кликов/хоткеев, а игра использует DirectInput

Именно так. Фильтр кликов внутри игры я делал, перехватывая соответствующие функции.
Спасибо большое автору за эту чудесную статью) После просмотра видео подхватил ностальгию) Жаль только звуков нет в видосике ;( Теперь вот сегодня — завтра сам пойду катать, правда в HF. Заведу себе гномку — рабыню, которая круглосуточно будет фармить каты xD

В юности какой-то кусок времени игрался в Silkroad где-то до 2008го года со всеми вытекающими систем free2p(l)ay — донаты, боты… Был отличный хак"testosterone" от товарища Rumata с небольшим изменением в клиенте, так же был слегка кАличный, но работающий TBot, который как-то навешивал хуки и пропускал через себя трафик игры, как через прокси, анализируя входные и добавляя команды на движения в выходные данные…
Может кто помнит?

В классе 9м наткнулся на одну статью, где с помощью С и малых манипуляций с оджидебагером и ассемблером, было предложено сделать что то типа «робота для 3й GTA»
все делалось только работая с памятью.
Игра запускалась на виртуальной машине, и простор для фантазии был практически безграничен, правда обратной связи от игры получить я так и не смог.
Вот сейчас задумался попробовать сделать что ни будь подобное и с современными играми

Этот алгоритм поиска моба думаю стоит применять после того, как перестанут выделяться мобы по /targetnext

Давненько в Линейку не играл, но если мне не изменяет память, по умолчанию на TAB’е висит перебор целей, видимых на экране. Название и ХП текущей цели отображаются в прямоугольнике в верхней части экрана. Не проще ли работать с этим таргетным прямоугольником, а не со всем экраном?

по умолчанию на 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

Естественно, скорость реакции и действий в случае пвп оставляли бы желать лучшего, но соль-то не в них.
А в чем соль-то?
у меня так, в свое время, пару десятков pvp за ночь бот нарубил
Вот, кстати, забавно — в линейке на ботов, в целом, до сих пор всем пофигу.
А мне однажды приснилось, что СБ одной большой компании с неоднозначной репутацией и с проектом, очень похожим на линейку по геймплею, довольно активно боролась с проявлениями ботизма с эффектами присутствия.
Аналогичная история случилась со мной на 6 лет назад в институте (C++ Builder 6 в моем сердце навсегда). Дополнительно было реализована логика по добавлению условий на выполнение команд. Если CP ниже 75% то жри банки. Ну и соответсвенно на ХП и МП также у хилов. Можно было вообще всю пачку оставлять на автомате.

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

Пример как может выглядеть компьютерное зрение на основе нейросетей вместо заданных преобразований можно посмотреть тут: https://youtu.be/PPAZjT2l-JQ (без звука, просто демка)

Видео моё, могу поотвечать на вопросы если интересно.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории