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

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

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

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

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

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

Создаем новый проект -> Win32 -> Dll, пустой проект.
Добавляем в него класс Base:
Код:
#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);
        
    }
}
Ну и точка входа:

Код:
#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;
}
Как видно, все предельно просто. Стоит лишь сказать, что это сработает не везде. На пример так можно заставить стим, заинжектить ваш чит при запуске кс го, но это не поможет выиграть в лотерею с тем же растом, там надо чуть чуть больше усилий.​
 
Забаненный
Статус
Оффлайн
Регистрация
26 Сен 2017
Сообщения
126
Реакции[?]
3
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а зачем это?
это типо защиты от вака?
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Конечно заебись. А вот если система x64? Ты знал что ядро такой системы имеет ещё 1 уровень защиты и при хуки любой функции из ядра будет краш системы?
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
Конечно заебись. А вот если система x64? Ты знал что ядро такой системы имеет ещё 1 уровень защиты и при хуки любой функции из ядра будет краш системы?
MinHook работает как на 32 так и на 64. А ядро тут не причем петрушка, по тому что как показывает опыт, примерно 100% драйверов накрывают только игру, а не сам процесс лаунчера игры/античита.
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
MinHook работает как на 32 так и на 64. А ядро тут не причем петрушка, по тому что как показывает опыт, примерно 100% драйверов накрывают только игру, а не сам процесс лаунчера игры/античита.
Я тебе про хуки кёрнел функций... В системе x64 ядро не разрешает патчить себя...
 
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
Беру свои слова обратно. Перепутал с ring0 хуками
Есть два пути объебать драйвер из ring3, одним я пользуюсь сейчас с приваткой рупб (там система защиты Frost), а второй для меня не актуален, по тому солью.​
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я же сказал что перепутал
 
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
В отличие от других, я могу въехать)
да просто подзаебало, 5 лет читы ебашу и вечно какой то умник прийдет и напишет что он знает лучше в теме, по которой даже вьехать не удосужился. Пояснять каждому петеньке в интернетах что он не прав утомительно :disappointed:
Обойти EAC поможет?
обойти нет, проскочить, вероятно, зависит от игры и версии античита.
 
Сверху Снизу