C++ || Как работает обход OBS Bandicam и т.п

ANZR

Известный
Автор темы
168
105
В чем разница в хуке девайса. Почему в одном случае OBS видит отрисовку, а в другом нет
Как вообще работает обход этих программ
 
Решение
Как это сделать .-.
Хук Present'a
Present -> 17 VTable
Reset -> 16 VTable

Нажимай на ссылку "исходника", тебе перекинет на Github или Gitlab с указанной функцией

1. Искать по паттерну -> "C7 06 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 89 86"
1.1 Из гайда Работа с рендером и Directx9 [4] by kin4stat
C++:
std::uintptr_t find_device(std::uint32_t Len) {
    static std::uintptr_t base = [](std::size_t Len) {
        std::string path_to(MAX_PATH, '\0');
        if (auto size = GetSystemDirectoryA(path_to.data(), MAX_PATH)) {
            path_to.resize(size);
            path_to += "\\d3d9.dll";
            std::uintptr_t dwObjBase = reinterpret_cast<std::uintptr_t>(LoadLibraryA(path_to.c_str()));
            while...

sizeoftrickster

…And Megadeth For All?
Проверенный
127
454
Как это сделать .-.
Хук Present'a
Present -> 17 VTable
Reset -> 16 VTable

Нажимай на ссылку "исходника", тебе перекинет на Github или Gitlab с указанной функцией

1. Искать по паттерну -> "C7 06 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 89 86"
1.1 Из гайда Работа с рендером и Directx9 [4] by kin4stat
C++:
std::uintptr_t find_device(std::uint32_t Len) {
    static std::uintptr_t base = [](std::size_t Len) {
        std::string path_to(MAX_PATH, '\0');
        if (auto size = GetSystemDirectoryA(path_to.data(), MAX_PATH)) {
            path_to.resize(size);
            path_to += "\\d3d9.dll";
            std::uintptr_t dwObjBase = reinterpret_cast<std::uintptr_t>(LoadLibraryA(path_to.c_str()));
            while (dwObjBase++ < dwObjBase + Len) {
                if (*reinterpret_cast<std::uint16_t*>(dwObjBase + 0x00) == 0x06C7 &&
                    *reinterpret_cast<std::uint16_t*>(dwObjBase + 0x06) == 0x8689 &&
                    *reinterpret_cast<std::uint16_t*>(dwObjBase + 0x0C) == 0x8689) {
                    dwObjBase += 2;
                    break;
                }
            }
            return dwObjBase;
        }
        return std::uintptr_t(0);
    }(Len);
    return base;
}

void* get_function_address(int VTableIndex) {
    return (*reinterpret_cast<void***>(find_device(0x128000)))[VTableIndex];
}
1.2 Из исходника Alpha Chat by kin4stat
C++:
DWORD FindDevice(DWORD Len)
{
    DWORD dwObjBase = 0;
    char infoBuf[MAX_PATH];
    GetSystemDirectoryA(infoBuf, MAX_PATH);
    strcat_s(infoBuf, MAX_PATH, "\\d3d9.dll");
    dwObjBase = (DWORD)LoadLibraryA(infoBuf);
    while (dwObjBase++ < dwObjBase + Len)
    {
        if ((*(WORD*)(dwObjBase + 0x00)) == 0x06C7 &&
            (*(WORD*)(dwObjBase + 0x06)) == 0x8689 &&
            (*(WORD*)(dwObjBase + 0x0C)) == 0x8689)
        {
            dwObjBase += 2;
            break;
        }
    }
    return(dwObjBase);
};

void* GetDeviceAddress(int VTableIndex)
{
    PDWORD VTable;
    *(DWORD*)&VTable = *(DWORD*)FindDevice(0x128000);
    return reinterpret_cast<void*>(VTable[VTableIndex]);
};

2. По гташному адресу
2.1 Из исходника Alpha Chat by kin4stat
C++:
DWORD pDevice = *reinterpret_cast<DWORD*>(0xC97C28);
void** vTable = *reinterpret_cast<void***>(pDevice);
2.2 Из исходника ultra wallhack by sc6ut
 
  • Нравится
Реакции: ANZR

ANZR

Известный
Автор темы
168
105
ну вроде как обс из презента игры берет картинку, можно вместо презента рисовать в эндсцене например
Как это сделать .-.

ну вроде как обс из презента игры берет картинку, можно вместо презента рисовать в эндсцене например
У меня забавная ситуация выходит
Порой OBS захватывает что я рисую, а порой нет. Приходится игру перезапускать, если менюшка отоброзилась
UPD Меню отображается если OBS был запущен перед запуском самой игры
 
Последнее редактирование:

F0RQU1N and

Известный
1,310
495
У меня забавная ситуация выходит
Порой OBS захватывает что я рисую, а порой нет. Приходится игру перезапускать, если менюшка отоброзилась
UPD Меню отображается если OBS был запущен перед запуском самой игры
ну хукни эндсцену, либо презент обса