
Demuestra cómo enganchar el puntero D3D9 Present de OBS graphics-hook32.dll para lograr un renderizado a prueba de transmisión que evade la detección de captura de juegos anti-cheat.
No es mío. Solo para guardarlo. https://www.unknowncheats.me/forum/anti-cheat-bypass/501609-obs-graphics-hook32-hook.html
He estudiado muchos tipos de hooking antes, y este tipo de cosas llamaron mi atención porque podrían usarse para producir renderizado a prueba de streams.
Así que me gustaría compartirlo con esos principiantes por ahí.

"graphics-hook32.dll + 32DC8" es nuestra dirección objetivo, que debería verse así en tu IDA o https://github.com/obsproject/obs-st...pture.cpp#L651

Después de eso, todo lo que tienes que hacer es reemplazar el puntero (a la vieja usanza). Ya que mov eax, Hook_Present_Addr Hook_Present_Addr = &Present_hook ??? BENEFICIO Listo 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);
}
}
El puntero de función que estamos reemplazando es el "RealPresent" mostrado en ida, no el present_begin (la función RealPresent es un puntero .data). También podrías hookear el present_begin y lograr el mismo resultado. Esto también es aplicable para la versión x64 de obs.
Nota: esto solo funciona para game capture y juegos d3d9