예제 #1
0
	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;
	}
예제 #2
0
	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;
	}