
Демонстрирует перехват указателя D3D9 Present из OBS graphics-hook32.dll для достижения рендеринга, устойчивого к захвату потока, который обходит обнаружение захвата игры анти-читом.
Не мой. Только для сохранения. https://www.unknowncheats.me/forum/anti-cheat-bypass/501609-obs-graphics-hook32-hook.html
Я изучал многие виды хукинга раньше, и этот тип вещей привлёк моё внимание, потому что его можно использовать для создания рендеринга, невидимого для стрима.
Поэтому я хотел бы поделиться этим с теми новичками, кто здесь есть.

"graphics-hook32.dll + 32DC8" — это наш целевой адрес, который должен выглядеть так в вашей IDA или https://github.com/obsproject/obs-st...pture.cpp#L651

После этого всё, что вам нужно сделать, — заменить указатель (старым способом). Поскольку mov eax, Hook_Present_Addr Hook_Present_Addr = &Present_hook ??? ПРОФИТ Готово к P2C KEKEKEKEKEKW
void MainThread()
{
while (!obsBase) // check if graphics-hook32.dll is not loaded
{
obsBase = (DWORD)GetModuleHandleA(XorStr("graphics-hook32.dll"));
if (!obsBase)
Sleep(200);
else
isOBSFound = true;
}
if (isOBSFound)
{
renderOBSPresent = obsBase + 0x32DC8;
while (!*reinterpret_cast<uintptr_t*>(renderOBSPresent))
{
Sleep(200);
}
OrigPresent = SwapPointer<Present_t>((uintptr_t)renderOBSPresent, (uintptr_t)&Hooked_Present);
}
}
Указатель на функцию, который мы заменяем, — это "RealPresent", показанный в IDA, а не present_begin (функция RealPresent — это указатель в .data). Вы также можете захукать present_begin и достичь того же результата. Это также применимо к x64-версии obs.
Примечание: это работает только для game capture и d3d9 game