HOOK所有程序的MessageBox

这篇博客详细介绍了如何通过HOOK技术在DLL中拦截系统中所有使用MessageBox的程序,包括设置全局鼠标钩子来确保DLL被加载,以及在DLL的入口和退出函数中设置和恢复API钩子。作者强调了在DLL退出时恢复原API入口的重要性,并提供了源码下载链接。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

让我学会HOOK的一篇文章:http://blog.sina.com.cn/s/blog_628821950100xmuc.html    //感激不尽呀

文章出处,好像是这篇:http://blog.csdn.net/glliuxueke/article/details/2702608   //我后来才看到的

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

这篇文章用到的HOOK代码,跟我的前一篇文章【HOOK API入门之Hook自己程序的MessageBoxW】差不多,

其地址是:http://blog.csdn.net/friendan/article/details/12222651

因为这次HOOK的是系统所有用到MessageBox的程序,所以我们必须把代码写在dll文件中,

这里我用的是MFC DLL

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

熟悉API的都知道,系统中没有MessageBox,有的只是MessageBoxA和MessageBoxW,

因此HOOK MessageBox,其实是HOOK MessageBoxA和MessageBoxW。

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

//老规矩,先看看我们的程序及效果截图,后面再进行分析,文章后面附有VS2008源码下载

//程序主界面


//HOOK 程序本身的MessageBoxA


///HOOK 程序本身的MessageBoxW


//启动HOOK后,切换到记事本的查找功能,其调用的MessageBoxW也被我们HOOK了


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

关于dll如何和主程序对话框进行通信,请看我的另一篇文章【低级鼠标钩子WH_MOUSE_LL

文章地址:http://blog.csdn.net/friendan/article/details/12168273

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

下面说一下HOOK所有程序的MessageBox的思路。

首先必须明确我们的HOOK代码是写在dll文件中的,要HOOK一个程序的MessageBox,则必须

让其加载我们的dll文件,如何才能让一个程序加载我们的dll文件呢?这里我用的是鼠标钩子,

即我们安装一个全局的鼠标钩子WH_MOUSE,这样当任何一个程序响应鼠标消息时,其就会

加载我们的dll文件,按理说,窗口程序都会响应鼠标消息的,不然我们怎么能移动一个窗口呢。

当然,不响应鼠标消息的程序,如果你也想HOOK它,换其它类型的钩子即可。

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

下面说一下该dll文件的编写过程:

1.打开VS 2008,新建一个MFC DLL工程,dll类型我选择的是【带静态链接MFC的规则DLL(R)】


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

2.在dll文件中编写安装鼠标钩子的函数StartHook(HWND hWnd)和卸载鼠标钩子的函数StopHook(),

这里说的只是个大概的过程,变量定义什么的,我就忽略了,具体请看原工程源码,

我们这里只说重点。

相关代码如下:

//鼠标钩子过程,目的是加载本dll到使用鼠标的程序//鼠标钩子的作用:当鼠标在某程序窗口中时,其就会加载我们这个dllLRESULT CALLBACK MouseProc(         int nCode,      // hook code         WPARAM wParam,  // message identifier         LPARAM lParam   // mouse coordinates         )if (nCode==HC_ACTION) {  //将钩子所在窗口句柄发给主程序  ::SendMessage(g_hWnd,UM_WNDTITLE,wParam,(LPARAM)(((PMOUSEHOOKSTRUCT)lParam)->hwnd)); } return CallNextHookEx(hhk,nCode,wParam,lParam);}//安装钩子BOOL WINAPI StartHook(HWND hWnd){ g_hWnd=hWnd; hhk=::SetWindowsHookEx(WH_MOUSE,MouseProc,hInst,0); if (hhk==NULL) {  return FALSE; }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值