不是我的。仅供保存。 https://www.unknowncheats.me/forum/anti-cheat-bypass/501609-obs-graphics-hook32-hook.html
我之前研究过许多种 hook 技术,这类东西引起了我的注意,因为它可以被用来实现防直播渲染。
所以我想把它分享给那些初学者们。

"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) // 检查 graphics-hook32.dll 是否未加载
{
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);
}
}
我们要替换的函数指针是 IDA 中显示的 "RealPresent",而不是 present_begin(RealPresent 函数是一个 .data 指针)。你也可以 hook present_begin 来达到同样的效果。这同样适用于 obs 的 x64 版本。
注意:这仅适用于游戏捕获和 d3d9 游戏