
Dimostra come intercettare il puntatore D3D9 Present di graphics-hook32.dll di OBS per ottenere un rendering a prova di streaming che elude il rilevamento della cattura di gioco da parte dell'anti-cheat.
Non è mio. Solo per salvataggio. https://www.unknowncheats.me/forum/anti-cheat-bypass/501609-obs-graphics-hook32-hook.html
Ho studiato molti tipi di hooking in passato, e questo genere di cose ha catturato la mia attenzione perché potrebbe essere usato per produrre un rendering stream-proof.
Quindi vorrei condividerlo con quei principianti là fuori.

"graphics-hook32.dll + 32DC8" è il nostro indirizzo target, che dovrebbe apparire così nel tuo IDA o https://github.com/obsproject/obs-st...pture.cpp#L651

Dopodiché, tutto ciò che devi fare è sostituire il puntatore (il vecchio metodo). Poiché mov eax, Hook_Present_Addr Hook_Present_Addr = &Present_hook ??? PROFITTO Pronto per 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);
}
}
Il puntatore a funzione che stiamo sostituendo è il "RealPresent" mostrato su IDA, non il present_begin (la funzione RealPresent è un puntatore .data). Potresti anche hookare il present_begin e ottenere lo stesso risultato. Questo è applicabile anche alla versione x64 di obs.
Nota: questo funziona solo per game capture e giochi d3d9