Пишем бот для MMORPG с ассемблером и дренейками. Часть 2
Привет, %username%! Привет, %username%! И так, продолжим написание нашего бота. Из прошлых статей, мы научились находить адрес перехватываемой функции для DirectX 9 и 11, а так же исполнять произвольный ассемблерный код в главном потоке игры. Естественно, эти все операции, могут быть замечены защитой игры и вы будете наказаны. Но сегодня, я покажу как спрятать этот код от защиты, в том числе и от такого монстра, которого все боятся, как Warden. Как я и говорил, я не ботовод потому, что меня не поймали. Жду вас под катом! Disclaimer: Автор не несет ответственности за применение вами знаний полученных в данной статье или ущерб в результате их использования. Вся информация здесь изложена только в познавательных целях. Особенно для компаний разрабатывающих MMORPG, что бы помочь им бороться с ботоводами. И, естественно, автор статьи не ботовод, не читер и никогда ими не был.Для тех кто пропустил прошлые статьи вот содержание, а кто все прочел идем дальше:
Содержание Часть 0 — Поиск точки внедрения кода Часть 1 — Внедрение и исполнение стороннего кода Часть 2 — Прячем код от посторонних глаз Часть 3 — Под прицелом World of Warcraft 5.4.x (Структуры) Часть 4 — Под прицелом World of Warcraft 5.4.x (Перемещение) Часть 5 — Под прицелом World of Warcraft 5.4.x (Кастуем фаерболл) 1. Рассуждения на тему защиты игр Хотелось бы разогнать тучи таинственности над античитами, протекторами и прочей сопутствующей с игрой защитой. Потому как вариантов защиты не так уж и много и я перечислю основные:1. Проверка файлов игры на оригинальностьЗдесь все просто, игра запрашивает с сервера контрольные суммы файлов игры и сверяет с теми, что получатся в результате проверки. В данном случае можно просто модифицировать алгоритм проверки в исполняемом файле. Но все намного сложнее, если алгоритм проверки, тоже подгружается с сервера, как в случае с Warden.2. Анализ подключенных DLLВ данном случае вы рискуете, только используя нечто популярное, т.к. информация об этом, скорее всего уже есть у разработчиков и как в случае с Valve Anti Cheat, неизвестные библиотеки отправляются прямиком на сервер для анализа, опять таки, если вызовет подозрение. Так что ваш бан может быть всего лишь отсрочен на неопределенный срок.3. Анализ VMT импортируемых библиотек на перехватыЗдесь вообще все сложно, вы можете получить бан даже за TeamViwer или Fraps, если разработчики игры так захотят и ничего вы не докажете. И как сказал Alexey2005 в Часть 0 — Поиск точки внедрения кода Чем параноидальнее защита, тем больше у неё ложных срабатываний. Потому что в процесс постоянно ломится и внедряется огромная куча всего — всякие перехватчики клавиатурных нажатий, антивирусные сканеры, всевозможные «управляющие центры» для видео и звука, компоненты настроек устройств ввода вроде мыши и т.д.
4. Защита игровой памяти от чтения/записиДанным функционалом обладает набирающая популярность в Steam защита Easy Anti Cheat. В Windows запускается сервис EasyAntiCheat, который защищает память игры от чтения и записи. Если же сервис не запущен, то игра отказывается соединяться с сервером и хотелось бы услышать размышления хабрасообщества на этот счет.5. Проверка определенных участков памяти игрыЭтим, опять же, занимается не без известная Warden. Хотя если честно, чем она только не занимается. Warden подгружает с сервера модули проверки памяти и хэш таблицу и сравнивает значения с таблицей. Этим способом легко определить читеров, которые модифицируют память игры для получения преимуществ, типа повышенной скорости, хождение по воздуху и стенам и прочее.ИтогИз всего выше описанного, становится понятно, что используя популярные программы и методы мы очень рискуем попасть в бан и что бы этого избежать, нам необходимо сделать наше внедрение тяжело определяемым. Чем мы сейчас и займемся. Для начала напишем метод GetFakeCommand и ObfuscateAsm:
internal static string GetFakeCommand ()
{
var list = new List
return result; } В первом while цикле мы двигаемся по нашей очереди и ищем свободное место по смещению offset одновременно в двух зарезервированных адресах для аргументов, если не нашили, то начинаем с начала. Для маскировки добавили фейковых команд и рандомные смещение и размер для выделенной памяти. Пока это все, жду ваших комментариев, советов и интересных решений.