Гайд Рендер через внутриигровой оверлей

average jne main macros abuser
Начинающий
Статус
Оффлайн
Регистрация
30 Май 2021
Сообщения
80
Реакции[?]
28
Поинты[?]
0
В этом псевдо гайде я попытаюсь обьяснить как работает рендер через внутриигровой оверлей:goplol:

Ну сначала надо понять для чего он нужен. Нужен он для того, чтобы ваш рендер в супер мега чите был андетект (и ещё обс байпас ?)
1. Найти модуль от вашего оверлея (Хранится он в папке с клиентом (не всегда))
Я буду показывать на примере ориджина (у меня это будет igo64.dll)
2. Открываем модуль в иде
3. Теперь нам нужно найти презентхук (найти его можно по строчкам)
1633203666080.png
В моём случае мне нужен дх11, поэтому я смотрю где используется строка "DX11SwapChainPresentHook"
Ура, мы нашли презентхук
1633203875762.png
Теперь мы создаем сигнатуру через плагин SigMaker (В оверлее ориджина сигнатура от дх11 совпадает с сигой от дх10, поэтому я взял на несколько байтов выше)
4. Нажимаем на нашу функцию ctrl+x и смотрим где она вызывается
1633204428327.png

Эта функция нам нужна для того, чтобы хукнуть презентхук (и потом можно будет хукать всё что угодно)?
5. Так же переходим к определению и создаем паттерн
6. Открываем проект в визуалке и вставляем (в моём случае)
C++:
void HookFunction(__int64 addr, __int64 func, __int64* orig)
{
    static uintptr_t hook_addr;
    if (!hook_addr)
        hook_addr = sigscan("igo64.dll"), ORIGIN_HOOKFUNC_PATTERN);

    auto hook = ((__int64(__fastcall*)(const void* addr, __int64 func, __int64* orig, __int64 smthng))(hook_addr));
    hook((const void*)addr, (__int64)func, orig, (__int64)1);
}
Теперь остается только создать вашу функцию для перехвата и вызывать хук (предварительно получив адрес презентзука)
Получается примерно такое
C++:
HookFunction(адрес презентхука, (__int64)функция, (__int64*)&оригинал функции);
Теперь у нас есть рабочий рендер и функция для хука?
Всем хорошего дня/вечера
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что это sigscan, hook?
 
average jne main macros abuser
Начинающий
Статус
Оффлайн
Регистрация
30 Май 2021
Сообщения
80
Реакции[?]
28
Поинты[?]
0
Что это sigscan, hook?
сигскан обычная функа для нахождения адресса по байтам
C++:
uintptr_t sigscan(const char* module, const char* pattern)
{
    uintptr_t moduleAdress = 0;
    moduleAdress = (uintptr_t)GetModuleHandleA(module);

    static auto patternToByte = [](const char* pattern)
    {
        auto       bytes = std::vector<int>{};
        const auto start = const_cast<char*>(pattern);
        const auto end = const_cast<char*>(pattern) + strlen(pattern);

        for (auto current = start; current < end; ++current)
        {
            if (*current == '?')
            {
                ++current;
                if (*current == '?')
                    ++current;
                bytes.push_back(-1);
            }
            else { bytes.push_back(strtoul(current, &current, 16)); }
        }
        return bytes;
    };

    const auto dosHeader = (PIMAGE_DOS_HEADER)moduleAdress;
    const auto ntHeaders = (PIMAGE_NT_HEADERS)((std::uint8_t*)moduleAdress + dosHeader->e_lfanew);

    const auto sizeOfImage = ntHeaders->OptionalHeader.SizeOfImage;
    auto       patternBytes = patternToByte(pattern);
    const auto scanBytes = reinterpret_cast<std::uint8_t*>(moduleAdress);

    const auto s = patternBytes.size();
    const auto d = patternBytes.data();

    for (auto i = 0ul; i < sizeOfImage - s; ++i)
    {
        bool found = true;
        for (auto j = 0ul; j < s; ++j)
        {
            if (scanBytes[i + j] != d[j] && d[j] != -1)
            {
                found = false;
                break;
            }
        }
        if (found) { return reinterpret_cast<uintptr_t>(&scanBytes[i]); }
    }
    return NULL;
}
а hook вызов функции по адрессу hook_addr
1633620476852.png
 
Сверху Снизу