Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Флудильня (http://mangos.ytdb.ru/forumdisplay.php?f=30)
-   -   БОТинки и БАНя (http://mangos.ytdb.ru/showthread.php?t=7889)

Konctantin 10.02.2014 12:10

БОТинки и БАНя
 
Вложений: 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);
thread_context.Dr0 = hoockAddress;
thread_context.Dr7 = 1;
SetThreadContext(thHandle, &thread_context);

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

GetThreadContext(thHandle, &thread_context);
thread_context.Ecx = blizzVal;
SetThreadContext(thHandle, &thread_context);

Как водится хукнул функцию IsDebuggerPresent, чтобы не спалился отладчик.

Пока что это работает на трильном акке, но вот использовать на основном аккаунте пока что стремно.

Если у кого-то есть какие-то идеи/предположения по поводу того как "спалили" и как "защитится", прошу делится мыслями.

TOM_RUS 10.02.2014 17:03

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1000 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Konctantin 10.02.2014 18:23

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1000 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

TOM_RUS 10.02.2014 19:09

Да. Близы спалились по названию опкодов еще на PTR. Через некоторое время названия опкодов вообще перестали оставлять в клиенте.

Karazhan 11.02.2014 09:17

Играть ботом - терять интерес к игре(я понимаю это круто поставить бота на ночь на фарм, но интереса ноль)
Хреново что бардак у Близзов такой(волна банов - это смешно для ботоводов, они новый акк купят и всё).
Лучше бы встроили функцию Playerbot, я лучше с ботами в рейды и инсты похожу, чем с нашими "живыми игроками" намного лучше. Почему?
1) Не ноют
2) Не афкашут, пока им не скажешь
3) Не орут, а что он так сильно бьёт?
Playerbot у Близзов есть, на ПТР они были пойманы и засниффаны. У меня этих сниффов нет, но знаю что в природе они есть!

Konctantin 11.02.2014 12:07

Цитата:

Играть ботом - терять интерес к игре
на вкус и цвет... сами знаете чего...

Konctantin 11.02.2014 12:24

Немного допилил отладчик, теперь у меня значение меняется не в регистре, а просто восстанавливаю флаг после сравнения.

На сколько мне известно, отловить изменения в в Dr регистрах wow не может, так как доступ к ним не возможен из ring3.

Теперь осталось узнать, мониторят ли близы сами аддоны. Например присутствует ли в аддоне protected функции.

Что-то мне кажется что они это могут сделать, так как сейчас очень часто используют разблокировку protected функций, и способов обойти ее уже уйма.
Хотя если на прямую скармливать текст аддона функции FrameScript__ExequteBuffer, то и аддона как бы нет, а есть просто какое-то состояние Lua.

Den 11.02.2014 19:28

Цитата:

Сообщение от Karazhan (Сообщение 32507)
Играть ботом - терять интерес к игре

Играть много - терять интерес к жизни. )) Мне лично не очень то и нравиться присутствовать на всех рейдах, где рейдовое время 5 дней в неделю по 3.5 часа в день. К тому же собирать траву и копать шахты, так же удовольствия никакого не достовляет этот процесс. Если играть когда тебе захотелось, то персонаж будет бичом, если персонаж будет бичом, то соответственно ты мало где бываешь, если мало где бываешь, то снифав у тебя более нужных немного.

Хоть я уже не играю давно, но помню очень хорошо всю сущность этого чудовищного задротства. )))

Konctantin 12.02.2014 10:11

Хочу спросить совета у знатоков С++. Вот сейчас есть такая ситуация, когда я запускаю разблокировщик Lua, он вписывает в контекст потока Hardware Breakpoint, и пока работает мое приложение - все классно, но вот только я закрываю его, "бряк" остается и приложение падает, так как я не обрабатываю исключение.

Такой вопрос, как можно обработать событие закрытия консоли? Чтобы убрать в нем установленные "бряки".


PS. Сори, нашел:
Установить обработчик:
Код:

SetConsoleCtrlHandler(ConsoleOnCtrlEvent, TRUE);
Собственно сам обработчик:
Код:

BOOL __stdcall ConsoleOnCtrlEvent(DWORD type)
{
    if (type == CTRL_CLOSE_EVENT)
    {
        printf("\nQuiting...\n");
        SetBreakpoints(dwProcessId, 0, 0);
        return TRUE;
    }
    return FALSE;
}


Konctantin 12.02.2014 18:44

Скорее всего скоро будет опять волна банов, или просто к ней готовятся:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1000 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Код:

0x008C765E        5 Bytes        02/11/2014 13:36:32        02/11/2014 14:23:49
это адрес по которому патчили клиент, чтобы разблокировать protected Lua функции

Konctantin 13.02.2014 14:57

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1000 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Amaru 13.02.2014 16:15

Цитата:

Сообщение от Konctantin (Сообщение 32513)
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1000 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

seems legit

SeT 14.02.2014 00:01

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Konctantin 16.02.2014 21:09

Сейчас вот читал www.ownedcore.com и там нaрод озабочен разблокировщиками Lua.
Как бы не влепили проверку на "проверку",видать надо как-то по другому выкручиваться.

Konctantin 17.02.2014 10:41

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1000 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Konctantin 18.02.2014 11:31

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 40 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Karazhan 20.02.2014 20:31

Может не по теме(хотя биты относятся к пакетам)
Скажите пожалуйста, откуда берутся(на Вики читал просто про creature_template_addon) значения для:
UNIT_FIELD_BYTE 0
UNIT_FIELD_BYTE 1.
Спрашиваю не из праздного любопытства, а для дела. Заранее спасибо!

Konctantin 03.03.2014 16:31

И еще немного про выполнение своего кода на стороне клиента.
Немного покопавшись в интернете наткнулся на довольно таки интересный способ.
Суть заключается в том, чтобы подставить в поток инструкций свой адрес с записанным кодом, а потом после выполнения своего кода его восстановить.
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 40 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Konctantin 03.03.2014 16:38

Цитата:

Скажите пожалуйста, откуда берутся(на Вики читал просто про creature_template_addon) значения для:
UNIT_FIELD_BYTE 0
UNIT_FIELD_BYTE 1.
Данные берутся из снифов, а именно из пакета SMSG_UPDATE_OBJECT, блок пакета UPDATE_FIELDS.

LordJZ 03.03.2014 19:34

Цитата:

Сообщение от Konctantin (Сообщение 32537)
И еще немного про выполнение своего кода на стороне клиента.
Немного покопавшись в интернете наткнулся на довольно таки интересный способ.
Суть заключается в том, чтобы подставить в поток инструкций свой адрес с записанным кодом, а потом после выполнения своего кода его восстановить.
*** скрытый текст ***

Я сниффер xyla именно так и писал.

Раз уж пошла такая пьянка: https://gist.github.com/LordJZ/9328944

Karazhan 04.03.2014 22:36

Цитата:

Данные берутся из снифов, а именно из пакета SMSG_UPDATE_OBJECT, блок пакета UPDATE_FIELDS.
Спасибо, хотя для EAI это бесполезно. Там нет поддержки типов, только value. Полноценная поддержка есть только в ядре и в СД2. Есть моменты когда нпц прекращают левитацию, а есть когда начинают(это просто пример)


Текущее время: 06:44. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS