БОТинки и БАНя
Вложений: 1
Вот собственно решил написать небольшое размышление на тему БОТов.
Небольшое отступление. Недавно как вы знаете была волна банов, и около 500к пользователей "посадили парится в баню" (на 72 часа | пожизненно) за использование ботов которые автоматизируют боевую ротацию. Среди них был и я (автор этой темы). В этой теме я хотел бы порассуждать о том как "поймали" и как по возможности "избежать поимки". И так, я не использовал бота которым пользовались все, я использовал своего бота (он был написан на подобии PQR, точнее использовал от туда механизм выполнения Lua кода). Теперь немного анализа о том, как же могли отследить. 1) Для запуска Lua кода в клиенте использовалась функция FrameScript__ExequteBuffer, то есть сначала в код клиента записывался код, который будет вызывать эту функцию, а потом вызывался этот код. 2) В самом коде Lua (который инжектили в процесс) есть protected функции (CastSpellByName, SpellStopCasting, и т.п.), возможно отследили именно вызов этих функций. 3) AFK режим, у меня был встроен antiAFK - случайным образом посылались нажатия клавиш раз в 2-5 минут. Я очень часто делал так, "цеплял" своего персонажа и уходил по своим делам и получалось что-то на подобии такого: http://ru-mangos.ru/attachment.php?a...1&d=1392021854 в связи с этим думаю отслеживали активность персонажа и так звание значение LastHardwareActionTime, то есть время последнего действия от устройства ввода. 4) ХЗ (Хрен его знает). И так в связи с этим я начал переделывать бота: 1) Оформил в виде аддона (естественно сам он работать не будет, так как вызов защищенных функций не пройдет проверку в функции CGGameUI__CanPerformAction. 2) Переписал сам аддон, таким образом, чтобы было больше рандома во времени срабатывания абилок + добавил фейк касты (например заклинание находится на восстановлении, а я его кастую, при этом эмулирую действия пользователя "жмяканье по кнопкам") 3) Для того чтобы не писать больше ничего в память я прицепил отладчик, и с помощью него меняю значение регистра для валидации условия. это выглядит так: Код:
008C7657 39 0D E8 6A BB 00 cmp dword_BB6AE8, ecx Код:
GetThreadContext(thHandle, &thread_context); Код:
GetThreadContext(thHandle, &thread_context); Пока что это работает на трильном акке, но вот использовать на основном аккаунте пока что стремно. Если у кого-то есть какие-то идеи/предположения по поводу того как "спалили" и как "защитится", прошу делится мыслями. |
|
|
Да. Близы спалились по названию опкодов еще на PTR. Через некоторое время названия опкодов вообще перестали оставлять в клиенте.
|
Играть ботом - терять интерес к игре(я понимаю это круто поставить бота на ночь на фарм, но интереса ноль)
Хреново что бардак у Близзов такой(волна банов - это смешно для ботоводов, они новый акк купят и всё). Лучше бы встроили функцию Playerbot, я лучше с ботами в рейды и инсты похожу, чем с нашими "живыми игроками" намного лучше. Почему? 1) Не ноют 2) Не афкашут, пока им не скажешь 3) Не орут, а что он так сильно бьёт? Playerbot у Близзов есть, на ПТР они были пойманы и засниффаны. У меня этих сниффов нет, но знаю что в природе они есть! |
Цитата:
|
Немного допилил отладчик, теперь у меня значение меняется не в регистре, а просто восстанавливаю флаг после сравнения.
На сколько мне известно, отловить изменения в в Dr регистрах wow не может, так как доступ к ним не возможен из ring3. Теперь осталось узнать, мониторят ли близы сами аддоны. Например присутствует ли в аддоне protected функции. Что-то мне кажется что они это могут сделать, так как сейчас очень часто используют разблокировку protected функций, и способов обойти ее уже уйма. Хотя если на прямую скармливать текст аддона функции FrameScript__ExequteBuffer, то и аддона как бы нет, а есть просто какое-то состояние Lua. |
Цитата:
Хоть я уже не играю давно, но помню очень хорошо всю сущность этого чудовищного задротства. ))) |
Хочу спросить совета у знатоков С++. Вот сейчас есть такая ситуация, когда я запускаю разблокировщик Lua, он вписывает в контекст потока Hardware Breakpoint, и пока работает мое приложение - все классно, но вот только я закрываю его, "бряк" остается и приложение падает, так как я не обрабатываю исключение.
Такой вопрос, как можно обработать событие закрытия консоли? Чтобы убрать в нем установленные "бряки". PS. Сори, нашел: Установить обработчик: Код:
SetConsoleCtrlHandler(ConsoleOnCtrlEvent, TRUE); Код:
BOOL __stdcall ConsoleOnCtrlEvent(DWORD type) |
Скорее всего скоро будет опять волна банов, или просто к ней готовятся:
Код:
0x008C765E 5 Bytes 02/11/2014 13:36:32 02/11/2014 14:23:49 |
|
Цитата:
|
|
Сейчас вот читал www.ownedcore.com и там нaрод озабочен разблокировщиками Lua.
Как бы не влепили проверку на "проверку",видать надо как-то по другому выкручиваться. |
|
|
Может не по теме(хотя биты относятся к пакетам)
Скажите пожалуйста, откуда берутся(на Вики читал просто про creature_template_addon) значения для: UNIT_FIELD_BYTE 0 UNIT_FIELD_BYTE 1. Спрашиваю не из праздного любопытства, а для дела. Заранее спасибо! |
И еще немного про выполнение своего кода на стороне клиента.
Немного покопавшись в интернете наткнулся на довольно таки интересный способ. Суть заключается в том, чтобы подставить в поток инструкций свой адрес с записанным кодом, а потом после выполнения своего кода его восстановить.
|
Цитата:
|
Цитата:
Раз уж пошла такая пьянка: https://gist.github.com/LordJZ/9328944 |
Цитата:
|
Текущее время: 06:44. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS