HOOK API或其它什么时,我们经常需要注入dll,而在WIN7系统,通过远程线程的方式
来注入dll,貌似不好用,而通过安装钩子的方式注入dll时,会把dll注入到很多个程序,
本文就是为了方便对指定的程序注入dll而写的。框架搭好后,以后注入dll就方便多了。
文章后面本例子VS2008源码下载地址。
-----------------------------------------------------------------------------------------------------------------------------------
本程序框架功能说明:
1.通过安装钩子来注入dll(例子程序用的是鼠标钩子,当然你可以改成其它类型的钩子)。
2.dll只注入指定的进程(通过PID来判断是否是要注入的进程)。
3.dll通过发送消息来与主程序进行通信。
-------------------------------------------------------------------------------------------------------------------------------------
程序界面如下(通过选择指定的进程来注入dll):
---------------------------------------------------------------------------------------------------------------------------------------------------
说下hook.dll文件功能:
1.导出两个函数
(1)BOOL WINAPI StartHook(HWND hWnd,DWORD dwPid) ;//用来安装钩子
参数hWnd是主程序的窗口句柄,dll发送消息给主程序时用到。
参数dwPid是被注入dll的进程的PID
(2)VOID WINAPI StopHook() ;//用来卸载钩子
----------------------------------------------------------------------------------------------------------------------------------------------------
//钩子过程,什么也不做,毕竟我们的目的是注入dll嘛。
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return CallNextHookEx(hhkHook,nCode,wParam,lParam);
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
以下是个人认为hook.dll最重要的一个函数,该函数实现了只注入指定程序的功能,
我们在dll的入口函数里面调用该函数,具体请看例子中的源码:
//检查是否是要HOOK的进程 BOOL CheckPid() { if (g_bIsFirstLoad) { return TRUE; } DWORD pid=GetCurrentProcessId(); if (pid==g_dwHookPid) { return TRUE; } else { return FALSE; } }
以上就是hook.dll的主要代码吗,因为只是个框架吗,所以现在什么功能都没有。
就下来说说主程序,主程序调用dll中安装钩子和卸载钩子的代码我已经写好了,
实际中我们只需要处理dll文件发来的消息即可,即我们只需要在以下这个函数编写代码:
//处理dll发来的消息 LRESULT CInjectHookDlg::OnHookDll(WPARAM wPara,LPARAM lParam) { return 1; }------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上就是该dll注入框架的主要功能了,不算复杂,以后想HOOK哪个API,在hook.cpp文件进行
主要的代码编写即可。需要注意的是,因为该例子使用的是鼠标钩子,所以在安装完钩子后,
我们需要把鼠标移动到目标程序的窗口,这样hook.dll文件才会注入到目标程序,原因不用说了吧。
如果你不喜欢这种方法,换另外一种钩子即可,在hook.dll中改下面这行代码就可以了:
hhkHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,hInstDll,0);
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本例子VS2008工程下载:
MFC dll注入框架.zip //VS2008+Win7+MFC 测试通过
http://download.csdn.net/detail/friendan/6357107
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
您的十分满意是我追求的宗旨。
您的一点建议是我后续的动力。