void DisableGetForegroundWindow()
{
HMODULE hUser32;
LPBYTE pfn;
DWORD dwOldProtect;
hUser32 = LoadLibraryW(L
"user32.dll"
);
pfn = (LPBYTE)GetProcAddress(hUser32,
"GetForegroundWindow"
);
VirtualProtect(pfn,16,PAGE_EXECUTE_READWRITE,&dwOldProtect);
pfn[0] = 0xC3;
//retn
}
DWORD __stdcall workerThread(LPVOID lparam)
{
DisableGetForegroundWindow();
return
0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if
(dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
Hook::Hook();
}
else
if
(dwReason == DLL_PROCESS_DETACH)
{
Free();
Hook::Unhook();
}
return
TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
导出函数
ALCDECL AheadLib_RunQQHummerEngine(void)
{
//
保存返回地址
__asm POP m_dwReturn[0 * TYPE long];
CreateThread(NULL,0,workerThread,0,0,NULL);
//
调用原始函数
GetAddress(
"RunQQHummerEngine"
)();
//
转跳到返回地址
__asm JMP m_dwReturn[0 * TYPE long];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////