Pull to refresh

Comments 44

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

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

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

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

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

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

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

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

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

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

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

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

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

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

напомнило перл с 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 рецов… эх было время
Sign up to leave a comment.

Articles