hook技术.doc


文档分类:通信/电子 | 页数:约115页 举报非法文档有奖
1/115
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/115
文档列表 文档介绍
1一、什么是钩子(hook)Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。钩子(hook)是一种特殊的消息处理机制,钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。钩子可以分为线程钩子和系统钩子,线程钩子监视指定线程的事件消息,系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。按照我的理解,钩子(hook)就是一个Windows消息的拦截机制,你可以单个进程的消息(线程钩子),也可以拦截所有进程的消息(系统钩子),对拦截的消息进行自定义的处理。Windows消息带了一些程序有用的信息,比如Mouse类信息,就带有鼠标所在窗体句柄、鼠标位置等信息(具体可参考相应的消息定义文档),拦截了这些消息,就可以做出例如金山词霸一类的屏幕取词功能。二、钩子的工作原理在正确使用钩子函数前,我们先讲解钩子函数的工作原理。当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您2安装的是一个进程钩子,您进程中的钩子函数将被调用。如果是一个系统钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用系统钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。几点需要说明的地方:(1)如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。(2)对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。(3)钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。三、相关函数说明31、钩子函数钩子函数指钩子在拦截了消息后,进行对应消息处理的函数,可以通过返回TRUE直接抛弃消息,其原型为:ame(intnCode,WPARAMwParam,LPARAMlParam)参数说明:nCode--包含有关消息本身的信息,比如是否从消息队列中移出(未具体了解,有兴趣可查资料).wParam--消息标示,用于判断该消息是那种消息,如WM_MOUSEMOVE,--包含所钩消息的信息指针,比如鼠标位置、状态,键盘按键等。2、创建钩子函数创建新的钩子函数加入到钩子链中,(intidHook,HOOKPROClpfn,INSTANCEhMod,DWORDdwThreadId)返回值:HHOOK--钩子句柄,需要保留,等不使用钩子时通过UnhookWindowsHookEx函数卸载钩子参数说明:4idHook--钩子的拦截消息类型,选择钩子程序的拦截范围,具体值参考文章结尾的消息类型lpfn--消息的回调函数地址,一般是填函数名hMod--钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。在dll中可通过AfxInitExtensionModule(MousehookDLL,hInstance)获得DLL句柄。dwThreadId--钩子所监视的线程的线程号,可通过GetCurrentThreadId()获得线程号。对于全局钩子,该参数为NULL(或0)。3、CallNextHookEx在钩子函数中使用,将钩子信息传递给钩子链的下一个钩子函数。原型如下:LRESULTCallNextHookEx(HHOOKhhk,intnCode,WPARAMwParam,LPARAMlParam)参数说明:hhk--钩子句柄。nCode、wPara

hook技术 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数115
  • 收藏数0 收藏
  • 顶次数0
  • 上传人顾生等等
  • 文件大小0 KB
  • 时间2016-01-14