
Demonstra como interceptar o ponteiro D3D9 Present do graphics-hook32.dll do OBS para obter renderização à prova de stream que evade a detecção de captura de jogos por anti-cheat.
Não é meu. Apenas para guardar. https://www.unknowncheats.me/forum/anti-cheat-bypass/501609-obs-graphics-hook32-hook.html
Já estudei muitos tipos de hooking antes, e esse tipo de coisa chamou minha atenção porque poderia ser usado para produzir renderização à prova de stream.
Então gostaria de compartilhar com aqueles iniciantes por aí.

"graphics-hook32.dll + 32DC8" é o nosso endereço alvo, que deve se parecer com isto no seu IDA ou https://github.com/obsproject/obs-st...pture.cpp#L651

Depois disso, tudo o que você precisa fazer é substituir o ponteiro (o jeito antigo). Como mov eax, Hook_Present_Addr Hook_Present_Addr = &Present_hook ??? LUCRO Pronto para 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);
}
}
O ponteiro de função que estamos substituindo é o "RealPresent" mostrado no ida, não o present_begin (a função RealPresent é um ponteiro em .data). Você também poderia fazer hook no present_begin e obter o mesmo resultado. Isso também é aplicável à versão x64 do obs.
Nota: isto só funciona para game capture e jogos d3d9