bool HookApi(LPCTSTR strDllName,LPCTSTR strFunName,int lngFunAddr) { hookBeOK=false; HMODULE hModule=NULL; int dwJmpAddr=0; hModule=GetModuleHandle(strDllName); //得到dll地址 if (hModule==NULL) {return false;} mlngFunAddr=(int)GetProcAddress(hModule,strFunName); //得到函数地址 if (mlngFunAddr==NULL) {return false;} CopyMemory(mbytOldCode,(const void *)mlngFunAddr,5); //把函数的前5个字节保存起来 mbytNewCode[0]=0xE9; //E9是jmp dwJmpAddr=lngFunAddr-mlngFunAddr-5; //计算出原API与新API的偏移 CopyMemory(&mbytNewCode[1],&dwJmpAddr,4); //把指令替换掉 hookBeOK=true; HookStatus(true); //hook,Ok return true; }
bool HookApi(LPCTSTR strDllName,LPCTSTR strFunName,int lngFunAddr) { hookBeOK=false; HMODULE hModule=NULL; int dwJmpAddr=0; hModule=GetModuleHandle(strDllName); if (hModule==NULL) {return false;} mlngFunAddr=(int)GetProcAddress(hModule,strFunName); if (mlngFunAddr==NULL) {return false;} CopyMemory(mbytOldCode,(const void *)mlngFunAddr,5); mbytNewCode[0]=0xE9; dwJmpAddr=lngFunAddr-mlngFunAddr-5; CopyMemory(&mbytNewCode[1],&dwJmpAddr,4); hookBeOK=true; HookStatus(true); return true; }