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

ANZR

Известный
Автор темы
168
104
В чем разница в хуке девайса. Почему в одном случае 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...

ANZR

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

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

F0RQU1N and

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

sizeoftrickster

…And Megadeth For All?
Проверенный
121
438
Как это сделать .-.
Хук 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