读书人

【请问】实现对Openprocess的API的HOOK

发布时间: 2012-04-23 13:17:38 作者: rapoo

【请教】实现对Openprocess的API的HOOK
最近因为需要,要对OpenProcess这个API进行HOOK,一旦发现有第三方程序企图利用该API打开我的进程 程序就自动退出。

本人没研究过APIHOOK,不知哪位大神有做过,可以给个源码研究一下。

[解决办法]

C/C++ code
class clsHookInfo 
{
private:
BYTE mbytOldCode[5];
BYTE mbytNewCode[5];
int mlngFunAddr;
bool hookBeOK;
public:
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;
}
bool HookStatus(bool blnIsHook)
{
DWORD oldACC,newACC;
if (!hookBeOK) {return false;}
if (blnIsHook)
{
VirtualProtect((LPVOID)mlngFunAddr,5,PAGE_WRITECOPY,&oldACC);
CopyMemory((void *)mlngFunAddr,mbytNewCode,5);
VirtualProtect((LPVOID)mlngFunAddr,5,oldACC,&newACC);
}
else
{
VirtualProtect((LPVOID)mlngFunAddr,5,PAGE_WRITECOPY,&oldACC);
CopyMemory((void *)mlngFunAddr,mbytOldCode,5);
VirtualProtect((LPVOID)mlngFunAddr,5,oldACC,&newACC);
}
return true;
}
};

clsHookInfo g_myHOOK1;

int myMessageBoxW(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT UType)
{
g_myHOOK4.HookStatus(false);
int myReturn=MessageBoxA(hWnd,"这个是被替换的messageboxW","apihook成功",UType);
g_myHOOK4.HookStatus(true);
return myReturn;
}

g_myHOOK4.HookApi("user32.dll","MessageBoxW",(int)myMessageBoxW);

[解决办法]
楼主可以用detour库
[解决办法]
探讨

这个若是监控 ReadProcessMemory 呢 一旦有程序对我的程序进行ReadProcessMemory就打印出日志应该怎么修改

[解决办法]
看看这个
http://apps.hi.baidu.com/share/detail/55093194

读书人网 >VC/MFC

热点推荐