MFC dll注入框架

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------


您的十分满意是我追求的宗旨。

您的一点建议是我后续的动力。







你可能感兴趣的:(api,mfc,dll,hook,hook,钩子)