16,472
社区成员
发帖
与我相关
我的任务
分享
void Hook ( PSTR szModuleName, PSTR szFunName, FARPROC pFun )
{ //获取模块句柄
HMODULE hMod = ::GetModuleHandleA ( szModuleName ) ;
if ( hMod != NULL )//如果获取成功则执行下面的语句
{
pNewFunEntry = (LPVOID)pFun ;//返回新的函数地址
//返回当前没有被HOOK的函数地址
pOldFunEntry = (LPVOID)GetProcAddress ( hMod, szFunName ) ;
bNewByte[0] = 0x18 ;
*((PDWORD)(&(bNewByte[1]))) = (DWORD)pNewFunEntry - (DWORD)pOldFunEntry - 5 ;
DWORD dwProtect, dwWriteByte, dwReadByte ;
VirtualProtect ( (LPVOID)pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );
ReadProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bOldByte, 5, &dwReadByte ) ;
WriteProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bNewByte, 5, &dwWriteByte ) ;
VirtualProtect ( (LPVOID)pOldFunEntry, 5, dwProtect, NULL ) ;
}