Найти в Дзене
k4r7man

Обход защиты чита R8

Лоадер у нас упакован VMProtect, и имеет какую то неебическую антиотладку (не знаю от VMP или нет), но справится с ней смогла лишь связка Windows 7 + TitanHide, хотя остальные софты под VMP я спокойно запускаю в отладчике в связке Windows 10 + TitanHide, но с этой почему то мой любимый драйвер сделал сосо. Но заострять внимания на лоадере я не буду, так как я для кряка вообще не занимался его изучением, самое важное он инжектит в стим, так что я аттачнулся к нему и начал копать :) Модуль для инжекта в стим Я не буду в этой статье описывать как ПОЛНОСТЬЮ устроена эта защита, в силу своей нехватки времени (и лени) - я всегда нахожу только те части, которые мне нужны, и никогда не трачу время на изучение защиты полностью. Итак:
1) Модуль ставит хук на CreateProcessW.
2) При запуске КС срабатывает хук, и происходит внедрение бинарника чита в игру.
Инжект происходит при помощи изменения контекста главного потока игры. Инжект бинарника в стим
Я называю это бинарником, поскольку в нём

Лоадер


Лоадер у нас упакован VMProtect, и имеет какую то неебическую антиотладку (не знаю от VMP или нет), но справится с ней смогла лишь связка Windows 7 + TitanHide, хотя остальные софты под VMP я спокойно запускаю в отладчике в связке Windows 10 + TitanHide, но с этой почему то мой любимый драйвер сделал сосо. Но заострять внимания на лоадере я не буду, так как я для кряка вообще не занимался его изучением, самое важное он инжектит в стим, так что я аттачнулся к нему и начал копать :)

Модуль для инжекта в стим

Я не буду в этой статье описывать как ПОЛНОСТЬЮ устроена эта защита, в силу своей нехватки времени (и лени) - я всегда нахожу только те части, которые мне нужны, и никогда не трачу время на изучение защиты полностью. Итак:
1) Модуль ставит хук на CreateProcessW.
2) При запуске КС срабатывает хук, и происходит внедрение бинарника чита в игру.
Инжект происходит при помощи изменения контекста главного потока игры.

Инжект бинарника в стим


Я называю это бинарником, поскольку в нём нет PE хеадеров (возможно они затираются в лоадере, я точно не знаю). Код инжекта не самописный, его автор Zer0Memory (помянем его канал минутой молчания ), и я думаю его многие уже видели, вот он (не реклама): http://www.rohitab.com/discuss/topic/40761-manual-dll-injection/
Минус этого кода с точки зрения защиты в том, что фикс таблицы импорта и релокаций происходит в целевом процессе, то есть как бы PE хеадеров и нет, но они и нахуй не нужны :D. Как и в ситуации с хейком, я перехватил функцию VirtualAllocEx и заставил выделить память для чита по адресу 0x20000000, который всегда свободен на этапе создании процесса.

Защита внутри бинарника чита


Вся защита находится именно здесь. Дллка по всем современным канонам накрыта VMProtect + виртуализация пользовательского кода, однако меня огорчила система авторизации. Как я уже говорил много раз, протектор никак не поможет защитить приложение, если сам по себе код уязвим. Эти слова целиком и полностью применимы к R8.
Когда я анализировал трафик, я увидел, что отправляемый пакет на сервер каждый раз имел одни и те же данные, и я сделал вывод, что можно без проблем сделать кряк с помощью простой подмены ответа от сервера (спойлер: так и оказалось, однако с небольшим нюансом, о нём позже).

Патчи для обхода защиты
Ниже приложен скрин страницы, в которую я записал все нужны патчи для кряка:

Единственное что мне понадобилось пропатчить для того, что бы статичный ответ от сервера на всех ОС кушал чит - это SteamID, который получается через функцию GetEnvironmentVariableA, адрес которой я просто подменил в таблице импорта, как и адрес InternetConnectA, для подмены сервера.
Путь к файлам конфига вшивается в бинариник чита, и так как оригинал нельзя запускать с системного диска - пришлось это делать с диска D, в кряке я просто подменил букву диска для удобства тем, у кого не более одного раздела для использования.
Ответ от сервера - это сплошная каша. Я не стал разбирать что там получается, но я видел что туда отправляется помимо каши - это SteamID и HWID, который на моё удивление ВШИВАЕТСЯ в инжектируемый бинарник.
По сути кодер R8 сделал за меня ВСЮ работу, кроме SteamID, но и там не оказалось никаких особых сложностей :)