Гайд C++ Модификация процесса на старте (инжект/обход/что захочешь)

Я лучше тебя
Участник
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции
448
Шалам валейкум.
Смоделируем ситуацию: представим что есть некая игра, у которой есть античит с собственным драйвером, который не дает вам получить хендлы игры для своих манипуляций, а свой драйвер, написать вы не можете, по тому что хлебушки, да и тратится на цифровую подпись не охота.

Так как же нам модифицировать процесс в таком случае, если в клиенте после инициализации прилетают горы хуков под WinAPI? Как загрузить длл? или сделать запись в память?

Есть два пути объебать драйвер из ring3, одним я пользуюсь сейчас с приваткой рупб (там система защиты Frost), а второй для меня не актуален, по тому солью.

Суть очень проста: нужно ставить хук на CreateProcessW.
Для этого нам понадобится >>
Пожалуйста, авторизуйтесь для просмотра ссылки.
(Кликабельно) << (только исходный код, а если кому то взбредет в голову требовать вт на архив без исполняемых файлов пошел нахуй заранее)
МинХук это наиболее маленькая аптечка для хуков. Обертку "hook.h" которую мы будем юзать писал @Крайслер для другого форума.

И таки начнем.

Создаем новый проект -> Win32 -> Dll, пустой проект.
Добавляем в него класс Base:
Код:
Expand Collapse Copy
#include <Windows.h>
//Подключаем обертку для MinHook
#include "hook.h"
//прототип функции
typedef BOOL (WINAPI* _CreateProcessW)(_In_opt_ LPCWSTR, _Inout_opt_ LPWSTR, _In_opt_ LPSECURITY_ATTRIBUTES, _In_opt_ LPSECURITY_ATTRIBUTES, _In_ BOOL, _In_ DWORD, _In_opt_ LPVOID, _In_opt_ LPCWSTR, _In_ LPSTARTUPINFOW, _Out_ LPPROCESS_INFORMATION);
//наш детур с обертки минхук
cDetour<_CreateProcessW>* t_CreateProcessW;
//Дубликат функции которую мы хукнем, наш аналог CreateProcessW
BOOL WINAPI my_CreateProcessW(
    _In_opt_ LPCWSTR lpApplicationName,
    _Inout_opt_ LPWSTR lpCommandLine,
    _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
    _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
    _In_ BOOL bInheritHandles,
    _In_ DWORD dwCreationFlags,
    _In_opt_ LPVOID lpEnvironment,
    _In_opt_ LPCWSTR lpCurrentDirectory,
    _In_ LPSTARTUPINFOW lpStartupInfo,
    _Out_ LPPROCESS_INFORMATION lpProcessInformation)
{
    //Пропускаем выполнение функции, но добавляем в крейчафлаг заморозку процесса
    //чтобы он не проинициализировался без нас любимых и чтобы защита не вьебала хуки прежде чем мы провернем свои штучки
    auto hReturn = t_CreateProcessW->GetTrampoline()(
        lpApplicationName,
        lpCommandLine,
        lpProcessAttributes,
        lpThreadAttributes,
        bInheritHandles,
        dwCreationFlags | CREATE_SUSPENDED,
        lpEnvironment,
        lpCurrentDirectory,
        lpStartupInfo,
        lpProcessInformation);

    //Все, вы выполнили оригинальную функцию создания процесса, и у вас уже есть хендл процесса.
    //По нему мы можем хоть в жопу ебатся, это промежуточный хендл, 99% программ планеты земля сразу его закрывают.
    //И его приемущество в том, что у него полный доступ, дальше вы тут можете припаять инжект, патч память,
    //да хоть хуй собачий. все что вам взбредет в голову.
    HANDLE hCreateProcessHandle = lpProcessInformation->hProcess;
    //Дальше вы можете делать с этим что угодно, просто чтобы игра, или нужный вам процесс, продолжил загрузку
    //после, нужно разморозить поток приложения, это сделать очено просто
    //просто разкоментируйте код ниже:
    /*
    ResumeThread(lpProcessInformation->hThread);
    */
    //Записочка: лучше не закрывайте хендлы из хука, ведь конечное приложение, которое вызовет эту функцию
    //расчитывает их получить и закрыть сомостоятельно, а лишний раз выдавать себя, не стоит.
    return hReturn;
}

void Install() {
    //Получаем кернель
    HMODULE hKernel = GetModuleHandleA("kernel32.dll");
    if (hKernel) {
        //Дергаем синглтон
        auto& pContext = cContext::GetInstance();
        //получаем адресс функции в модуле
        auto dwAdress_CreateProcessW = GetProcAddress(hKernel, "CreateProcessW");
        //ставим наш хук
        pContext.ApplyDetour<_CreateProcessW>(
            reinterpret_cast<_CreateProcessW>(dwAdress_CreateProcessW),
            reinterpret_cast<_CreateProcessW>(my_CreateProcessW),
            &t_CreateProcessW);
        
    }
}
Ну и точка входа:

Код:
Expand Collapse Copy
#include "Base.h"

BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) {

    if (dwReason == DLL_PROCESS_ATTACH) {
        //Ставим хук
        Install();
        return 1;
    }

    if (dwReason == DLL_PROCESS_DETACH) {
        //снимаем хук на выходе.
        if (t_CreateProcessW)
            t_CreateProcessW->Remove();
    }

    return 1;
}
Как видно, все предельно просто. Стоит лишь сказать, что это сработает не везде. На пример так можно заставить стим, заинжектить ваш чит при запуске кс го, но это не поможет выиграть в лотерею с тем же растом, там надо чуть чуть больше усилий.​
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а зачем это?
это типо защиты от вака?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Конечно заебись. А вот если система x64? Ты знал что ядро такой системы имеет ещё 1 уровень защиты и при хуки любой функции из ядра будет краш системы?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Конечно заебись. А вот если система x64? Ты знал что ядро такой системы имеет ещё 1 уровень защиты и при хуки любой функции из ядра будет краш системы?
MinHook работает как на 32 так и на 64. А ядро тут не причем петрушка, по тому что как показывает опыт, примерно 100% драйверов накрывают только игру, а не сам процесс лаунчера игры/античита.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
MinHook работает как на 32 так и на 64. А ядро тут не причем петрушка, по тому что как показывает опыт, примерно 100% драйверов накрывают только игру, а не сам процесс лаунчера игры/античита.
Я тебе про хуки кёрнел функций... В системе x64 ядро не разрешает патчить себя...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Гугл "Защита ядра для x64."
Да ладно блять? вин 7 64

T4m-41m4nH0.jpg

 
вопрос еще актуален, причем здесь ядро?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Беру свои слова обратно. Перепутал с ring0 хуками
Есть два пути объебать драйвер из ring3, одним я пользуюсь сейчас с приваткой рупб (там система защиты Frost), а второй для меня не актуален, по тому солью.​
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я же сказал что перепутал
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обойти EAC поможет?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В отличие от других, я могу въехать)
да просто подзаебало, 5 лет читы ебашу и вечно какой то умник прийдет и напишет что он знает лучше в теме, по которой даже вьехать не удосужился. Пояснять каждому петеньке в интернетах что он не прав утомительно :disappointed:
Обойти EAC поможет?
обойти нет, проскочить, вероятно, зависит от игры и версии античита.
 
Назад
Сверху Снизу