MFC dll注入框架

51 篇文章 3 订阅
18 篇文章 0 订阅

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

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


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

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







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friendan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值