|
Флудильня Разговоры на любые темы. Мы устаем постоянно работать. Иногда надо где-то немного отдохнуть. Пожалуйста, не надо здесь устраивать бардак. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
10.02.2014, 12:10 | #1 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
БОТинки и БАНя
Вот собственно решил написать небольшое размышление на тему БОТов.
Небольшое отступление. Недавно как вы знаете была волна банов, и около 500к пользователей "посадили парится в баню" (на 72 часа | пожизненно) за использование ботов которые автоматизируют боевую ротацию. Среди них был и я (автор этой темы). В этой теме я хотел бы порассуждать о том как "поймали" и как по возможности "избежать поимки". И так, я не использовал бота которым пользовались все, я использовал своего бота (он был написан на подобии PQR, точнее использовал от туда механизм выполнения Lua кода). Теперь немного анализа о том, как же могли отследить. 1) Для запуска Lua кода в клиенте использовалась функция FrameScript__ExequteBuffer, то есть сначала в код клиента записывался код, который будет вызывать эту функцию, а потом вызывался этот код. 2) В самом коде Lua (который инжектили в процесс) есть protected функции (CastSpellByName, SpellStopCasting, и т.п.), возможно отследили именно вызов этих функций. 3) AFK режим, у меня был встроен antiAFK - случайным образом посылались нажатия клавиш раз в 2-5 минут. Я очень часто делал так, "цеплял" своего персонажа и уходил по своим делам и получалось что-то на подобии такого: в связи с этим думаю отслеживали активность персонажа и так звание значение 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); Пока что это работает на трильном акке, но вот использовать на основном аккаунте пока что стремно. Если у кого-то есть какие-то идеи/предположения по поводу того как "спалили" и как "защитится", прошу делится мыслями. |
10.02.2014, 17:03 | #2 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
|
10.02.2014, 18:23 | #3 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
|
|
10.02.2014, 19:09 | #4 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Да. Близы спалились по названию опкодов еще на PTR. Через некоторое время названия опкодов вообще перестали оставлять в клиенте.
|
11.02.2014, 09:17 | #5 |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Играть ботом - терять интерес к игре(я понимаю это круто поставить бота на ночь на фарм, но интереса ноль)
Хреново что бардак у Близзов такой(волна банов - это смешно для ботоводов, они новый акк купят и всё). Лучше бы встроили функцию Playerbot, я лучше с ботами в рейды и инсты похожу, чем с нашими "живыми игроками" намного лучше. Почему? 1) Не ноют 2) Не афкашут, пока им не скажешь 3) Не орут, а что он так сильно бьёт? Playerbot у Близзов есть, на ПТР они были пойманы и засниффаны. У меня этих сниффов нет, но знаю что в природе они есть!
__________________
So foolish. |
11.02.2014, 12:24 | #7 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Немного допилил отладчик, теперь у меня значение меняется не в регистре, а просто восстанавливаю флаг после сравнения.
На сколько мне известно, отловить изменения в в Dr регистрах wow не может, так как доступ к ним не возможен из ring3. Теперь осталось узнать, мониторят ли близы сами аддоны. Например присутствует ли в аддоне protected функции. Что-то мне кажется что они это могут сделать, так как сейчас очень часто используют разблокировку protected функций, и способов обойти ее уже уйма. Хотя если на прямую скармливать текст аддона функции FrameScript__ExequteBuffer, то и аддона как бы нет, а есть просто какое-то состояние Lua. Последний раз редактировалось Konctantin; 18.02.2014 в 11:32. |
11.02.2014, 19:28 | #8 |
Ученый
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
|
Играть много - терять интерес к жизни. )) Мне лично не очень то и нравиться присутствовать на всех рейдах, где рейдовое время 5 дней в неделю по 3.5 часа в день. К тому же собирать траву и копать шахты, так же удовольствия никакого не достовляет этот процесс. Если играть когда тебе захотелось, то персонаж будет бичом, если персонаж будет бичом, то соответственно ты мало где бываешь, если мало где бываешь, то снифав у тебя более нужных немного.
Хоть я уже не играю давно, но помню очень хорошо всю сущность этого чудовищного задротства. ))) |
12.02.2014, 10:11 | #9 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Хочу спросить совета у знатоков С++. Вот сейчас есть такая ситуация, когда я запускаю разблокировщик 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 в 10:25. |
12.02.2014, 18:44 | #10 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Скорее всего скоро будет опять волна банов, или просто к ней готовятся:
Код:
0x008C765E 5 Bytes 02/11/2014 13:36:32 02/11/2014 14:23:49 |
|
13.02.2014, 14:57 | #11 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
|
|
13.02.2014, 16:15 | #12 |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
|
14.02.2014, 00:01 | #13 | |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
|
|
16.02.2014, 21:09 | #14 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Сейчас вот читал www.ownedcore.com и там нaрод озабочен разблокировщиками Lua.
Как бы не влепили проверку на "проверку",видать надо как-то по другому выкручиваться. |
17.02.2014, 10:41 | #15 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
|
|
18.02.2014, 11:31 | #16 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
|
|
20.02.2014, 20:31 | #17 |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Может не по теме(хотя биты относятся к пакетам)
Скажите пожалуйста, откуда берутся(на Вики читал просто про creature_template_addon) значения для: UNIT_FIELD_BYTE 0 UNIT_FIELD_BYTE 1. Спрашиваю не из праздного любопытства, а для дела. Заранее спасибо!
__________________
So foolish. Последний раз редактировалось Karazhan; 21.02.2014 в 20:35. Причина: Много текста ни о чём! Оставил нужное. |
03.03.2014, 16:31 | #18 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
И еще немного про выполнение своего кода на стороне клиента.
Немного покопавшись в интернете наткнулся на довольно таки интересный способ. Суть заключается в том, чтобы подставить в поток инструкций свой адрес с записанным кодом, а потом после выполнения своего кода его восстановить.
|
|
03.03.2014, 16:38 | #19 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
|
|
03.03.2014, 19:34 | #20 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
Раз уж пошла такая пьянка: https://gist.github.com/LordJZ/9328944 Последний раз редактировалось LordJZ; 03.03.2014 в 19:41. |
|
04.03.2014, 22:36 | #21 | |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Цитата:
__________________
So foolish. |
|