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

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

С одной стороны хочется шадоуморном Вас поколотить за ботоводство. С другой — снимаю шляпу. Реально интересно и понятно описано.
НЛО прилетело и опубликовало эту надпись здесь
Очень интересно, обязательно публикуйте и рассказывайте всё, что знаете.
НЛО прилетело и опубликовало эту надпись здесь
И где же? ;)
Если Вы описываете процесс создания взрывчатки, не стоит бояться, что террористов из-за вас посадят. Пишите, конечно, это любопытно.
Каждый бан спасет чью-то жизнь — смотрите на это с такой точки зрения и, конечно, пишите.
Писал ботов еще лет 10-12 назад, в одной из первых MMORPG — Ultima Online. Получил интересный опыт, бот имел кучу подпрограмм для добычи руды, переплавки, складирования, телепортации и снова в шахту. Отслеживались диалоги, так что всегда можно было поприветствовать, если с тобой здороваются.
Нужно читать, а главное, писать в память процесса игры

Всегда интересовало: может ли программа запущщеная от имени юзера узнать о том то ее память кто-то читал? А если читает процесс с более высокими привилегиями?

И еще одно, пожет ли программа определить, что клики мыши были не настоящие, а кем-то сэмулированы? Тем-же автоитом, например.
Всегда интересовало: может ли программа запущщеная от имени юзера узнать о том то ее память кто-то читал? А если читает процесс с более высокими привилегиями?

да. нет. :)
И еще одно, пожет ли программа определить, что клики мыши были не настоящие, а кем-то сэмулированы? Тем-же автоитом, например.

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

P.S. Варден от 2008го года позволял получать список процессов, загруженных к WoW dll, читать произвольные данные из адресного пространства клиента. При этом варден = dll модуль, загружаемый на компьютер играющего, может обновляться сколько-угодно раз без обновления клиента и перезапуска сервера. При некотором желании они могли бы варденом и переписку скайпа считывать на предмет фраз «я ставлю бота и работать».
НЛО прилетело и опубликовало эту надпись здесь
Самый лучший бот — это тот, который расположен на шлюзе и перехватывает пакеты между сервером и клиентом.
С учетом криптования трафика и смены номеров опкодов в каждом патче, это по силу лишь тем, кто не играет в игры и не водит ботов :)
да оно и без смены опкодов было очень сомнительным удовольствием.

воссоздать состояние клиента — это очень большой объем работы.
в памяти игры обычно тысячи весьма и весьма непростых игровых объектов, плюс много-много collision geometry (которая не передается по сети, а берется из локальных файлов клиента).

практического смысла воссоздавать всё это — ноль. гораздо проще и удобнее поручить это официальному клиенту, а ботом — только вызывать нужные функции и читать\писать память.
Как раз локальная геометрия обрабатывается относительно просто (допустим, на примере какого-нибудь оупен-сорсного wowmapview), из игровых объектов актуальны только мобы и ресурсы для фарминга, да и вообще это высокоуровневая задача, которая вполне решаема и скриптуется. Вспомнить хотябы Injection и EasyUO для Ultima Online.
А вот низкий уровень наворочен настолько, что его реализация потребует больше времени, чем может принести выгоды ботоводство.
А никто и не говорил, что это будет легко :)
Ухты, неожидал увидеть свою работу, ето я про ED-209. Приятно.
За статью спасибо, очень интересно. Жду 3 часть.
Спасибо за Ваш труд. Я еще переживал, не нарушу ли я авторских прав. Скриншот из фильма Робокоп был недостаточного качества.
Пожалуйста, пережмите картинки под ширину статьи и не ипользуйте для полноцветной графики PNG. Тормоза страшные)
Спасибо за замечание. Полагал, что habrastorage сам пережимает и уменьшает размер. Проверил, две картинки по 1Mb, а одна из них не под катом. Ужас. Переделаю.
А можно видео геймплея с запущенным ботом?
Пара отрезков. Запись видео ухудшила движение мыши, в результате персонаж поворачивается неточно и чаще мельтешит. Кстати, советую почитать про водяные знаки в WoW.
спасибо.
Спасибо, статья очень интересная, всегда хотел узнать, как делаются подобные штуки :) Жду продолжения.

P. S. Удивлен, что нашлось 16 человек, у которых поднялась рука отметить последнюю галочку. Даже если Вы такой умный, что ничего нового не узнали, есть еще много не столь просветленных, которым интересно.
Хех, 16 — это только за первый час.
Чтобы противодействовать Warden'у, можно сделать свои HID-устройства, которые будут определяться, как самые обычные клавиатура с мышкой, которые и будут управлять персонажем. Остается только добавить некое головное устройство, которое будет обеспечивать синхронность действий этих ребят.

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

чтобы противодействовать вардену — нужно всего лишь:

1. не трогать участки памяти, которые он сканирует (для самых ленивых — регулярно обновляемые списки этих участков есть в публичном доступе).

2. не светить своего бота (варден сканирует сигнатуры. при этом сам он в открытом виде ничего не передает, максимум — хэши. как сигнатуры попадают в его базу, и кто именно их туда вносит — думаю понятно)

собственно политика близардов направлена на недопущение массового ботоводства (и даже с этим у них не очень — см. HonorBuddy). отдельные деятели с нестандартными велосипедами их интересуют чуть менее чем нисколько.
Моя идея несколько более надежна (и менее банальна), чем традиционные методы противостояния читеров и вирусописателей с античитами и антивирусами, где если сегодня ничего не определяется, то завтра вполне уже может детектиться уже целый зоопарк штаммов, на что тут же (или вовсе превентивно) реагируют действиями, ведущими к смене сигнатур.
Великолепная статья. Вспомнилось, как в свое время писались километровые скрипты для копания и прочих процессов Ultima Online. Судя по статье, проблемы перед ботописателями за прошедшие годы не изменились. Все те же препятствия, мобы, отладка скрипта и прочие радости ботовода.

Играл под wine'ом в wow… живой)
Посмотрите в сторону isxwow
напомнило перл с wowlol
— Здравствуйте меня зовут Дэвид, я геймастер этого сервера, у вас есть время поговорить?
— Да
— Видите ли... некоторые люди пишут мне что вы бот
— Всё ок
— Да, теперь я сам вижу, до чего же порой есть завистливые и лживые люди.
— Да
— Надеюсь они вас больше не побеспокоят
— Всё ок
— вы должны понять, просто политика компании не приемлет ботов, ну вы наверно и так это знаете
— Да
— Спасибо за общение, желаю всего наилучшего
— Всё ок
— Да, и если эти люди ещё вас побеспокоят дайте мне знать, хорошо?
— Да
(спустя время)
— Прошу прощения, это снова Дэвид, проанализировав наш разговор я подумал что возможно вы всё же и правда являетесь ботом.
— Да здравствует великий Мао!!!
— Извините
— всё ок
— больше вас не побеспокою, надеюсь недоразумение исчерпано
— да
В картинке где подписи к углам, want следует заменить на required %)
Считаю статью удачной. Она передает ощущение победы над возникшими проблемами в попытках превосходства над «простыми смертными».

Раньше можно было обмануть запрет на 5 входов, не знаю как сейчас. План такой:
1. Добавить в группу своего персонажа. Будем звать его номер 2.
2. Зайти в подземелье персонажем номер 1. Поделать свои дела. Затем выйти.
3. Отключить персонажа номер 1. Например alt+f4.
4. Из окна персонажа номер 2 обновить подземелье.
5. В окне персонажа номер 1 войти в игру. Затем с шага №2.
6. Profit

Вот простой пример работы аж с тремя персонажами сразу через Autoit
#include <WinAPI.au3>

AutoItSetOption("SendKeyDownDelay", 50)

$WoWAppName = "World of Warcraft"
$Title1 = 'honor VICTIM 1'
$Title2 = 'honor VICTIM 2'
$Title3 = 'honor VICTIM 3'

WinSetTitle($Title1,"",$WoWAppName)
WinSetTitle($Title2,"",$WoWAppName)
WinSetTitle($Title3,"",$WoWAppName)
WinWaitActive($WoWAppName)
WinSetTitle($WoWAppName,"",$Title1)
WinWaitActive($WoWAppName)
WinSetTitle($WoWAppName,"",$Title2)
WinWaitActive($WoWAppName)
WinSetTitle($WoWAppName,"",$Title3)


While 1

   ControlSend($Title1, "", "", "1")
   ControlSend($Title2, "", "", "1")
   ControlSend($Title3, "", "", "1")  
   sleep(500)
   
WEnd
У меня работал рыболовный бот почти год — не забанили. Соответственно бота нигде не публиковал, в людных местах не ловил. Выше про Warden'а написали — не так страшен чёрт.
Люди, далекие от MMORPG игр, спросят: «А зачем вообще противодействовать ботам? Ведь автоматизация везде приветствуется.» А вот и нет. Если все платят одинаково, то и возможности должны быть равными. Иначе ущемленная часть обижается и перестает играть. Если в игре доступны, например, макросы, то они должны быть понятны и не программистам.

Не пишите ерунды. Не программисты нынче знают lua? /script Зная lua скрипт, можно игровые деньги зарабатывать. Написал скрипт на закупку необходимых товаров (еда, ингредиенты, реагенты), прожал кнопку и закупился. Глава гильдии прожал кнопку и исключил всех из гильдии ниже 50го уровня, отсутствующих более месяца например. Это не автоматизация?
Поэтому у Blizzard есть Warden. ПО по сути напоминает облачный антивирус:
фоновые программы анализируются
их метаданные отправляются в облако
чит-аналитики принимают решение, что такой-то процесс нечестно взаимодействует с игрой
к пользователям, использовавшим эти программы, применяются санкции

Warden не анализирует фоновые программы. Никто не имеет права, получать список процессов с вашей машины без вашего согласия — это Неправомерный доступ к компьютерной информации Статья 272 УК РФ. С сервера приходят сигнатуры на определенных проверку участков памяти процесса игры и затем их значения отправляются на сервер. Так же анализируются библиотеки подключенные к игре. Но запомните, никто не имеет права, получать список процессов без вашего согласия.
Я нередко встречал возгласы, что Blizzard (это разработчик WoW) плохо следит, и боты повсюду. Во-первых, сам я так не считаю, думаю, их доля преувеличена. А во-вторых, давайте обсудим, что же есть в арсенале разработчика. Как не только распознать бота, но еще и иметь подтверждающие факты. Ведь на основе подозрений невежливо банить игрока.

Да, боты по всюду, зайди на БГ или полетай — покачай профессию и посмотри на их поведение. Человек не будет так двигаться, тупить, стандартный алгоритм выхода из застреваний. Банально, я наблюдал 5 минут, как бот за Альянс, пытался куда-то пройти мимо лагеря Орды в Когтистых горах, что тут сказать на 4ом спавне, я побежал дальше делать квесты, честно заработав 10 очков чести =)
И да, я получил свой первый бан за Злоупотребление особенностями игровой механики в World of Warcraft
Зная lua скрипт, можно игровые деньги зарабатывать.

Тут мне стало интересно.
На данный момент, заработал 5к золота, продавая скрипты. Как-то так.
А скрипты какие? Для ботинга или чего?
Под заказ. Просят разное, от каста спеллов, до управления гильдиями
Согласно источнику, который я привел в статье
Используя Warden Client, Blizzard столкнулась с обвинениями некоторых сторонников секретности. Так как Warden просматривает запущенные процессы, он может обнаружить и некоторые приватные данные, такие как адреса электронной почты, названия учётных записей в программах мгновенного общения и другую конфиденциальную информацию.

В том же самом источнике Вы можете найти техническое описание Warden'а.

Кроме того, Вы лично подтверждали следующее
WHEN RUNNING, THE GAME MAY MONITOR YOUR COMPUTER'S RANDOM ACCESS MEMORY (RAM) AND/OR CPU PROCESSES FOR UNAUTHORIZED THIRD PARTY PROGRAMS RUNNING CONCURRENTLY WITH WORLD OF WARCRAFT


Не пишите ерунды

В настоящий момент, зная язык Lua, Вам не удастся «прожать кнопку и закупиться», потому что игра требует отдельного клика на каждую покупку.

И я согласен с Вами, зная Lua, вы можете написать аддон и повысить удобство игры, а этим аддоном можете ни с кем не делиться.
Ну во-первых, технического описания Warden — не существует в принципе, во-вторых, вы правильно заметили, что написано
PROGRAMS RUNNING CONCURRENTLY WITH WORLD OF WARCRAFT

Не просто процесс в памяти, а работающий совместно, т.е. речь идет о инъекции. Так что назови я отдельный процесс «Mega WoW Hack Cheat» — ничего не будет.
В настоящий момент, зная язык Lua, Вам не удастся «прожать кнопку и закупиться», потому что игра требует отдельного клика на каждую покупку.

Скажите это, вот этому скрипту:
/script local function buy (n,q) for i=1,200 do if n==GetMerchantItemInfo(i) then BuyMerchantItem(i,q) end end end buy("Формула: рунический адамантитовый жезл",1)
В свое время формула стоила больших денег и респавн был длинным… Ставишь рогу в инвизе у вендора на автоклик, и к утру у тебя штук 6 рецов… эх было время
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации