HOOK编程.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HOOK编程

windows 应用程序是基于消息驱动的。各种应用程序对各种消息作 出响应从而实现各种功能。windows 钩子是windows 消息处理机制的 一个监视点,通过安装钩子可以达到监视指定窗口某种类型的消息的功 能。所谓的指定窗口并不局限于当前进程的窗口,也可以是其他进程的 窗口。当监视的某一消息到达指定的窗口时,在指定的窗口处理消息之 前,钩子函数将截获此消息,钩子函数既可以加工处理该消息,也可以 不作任何处理继续传递该消息。使用钩子是实现dll 注入的方法之一。 其他常用的方法有:注册表注入,远程线程注入。钩子函数是一个处理 消息的程序段。是在安装钩子的时候向系统注册的。 关于windows 钩子要清楚以下三点: 1:钩子是用来截获系统中的消息流的。利用钩子可以处理任何我们 感兴趣的消息,当然包括其他进程的消息。 2:截获该消息后,用于处理该消息的程序叫做钩子函数。它是自定 义的函数,在安装钩子时将此函数的地址告诉windows 。 3:系统同一时间可能有多个进程安装钩子,多个钩子构成钩子链。 所以截获消息并处理后,应该将此消息继续传递下去,以便其他钩子处 理这一消息。 注意:使用钩子会使系统变慢,因为它增加了系统对每个消息的处 理量。所以要仅在必要的时候才安装钩子。不需要时要及时卸载。 安装钩子: 1. SetWindowsHookEx( 2. 3. int idHook, //要安装的钩子的类型。 4. 5. HOOKPROC lpfn, //钩子函数的地址。 6. 7. HINSTANCE hMode, //钩子函数所在DLL 在进程内的地址。 8. 9. DWORD dwThread, //要安装钩子的线程 如为0,则为所有线程安装子。 10. ); idHook 指定要安装钩子的类型,他可以是下面的值: WH_CALLWNDPROC // 目标线程调用SendMessage 发送 消息时,钩子函数被调用。 WH_CALLWNDPROCRET // 当SendMessage 返回时,钩子函数 被调用。 WH_KEYBOARD //从消息队列中查询WM_KEYUP 或 WM_KEYDOWN 时。 WH_GETMESSAGE // 目标线程调用GetMessage 或 PeekMessage 时 WH_MOUSE //查询消息队列中鼠标事件消息时。 WH_MSGFILTER // 以下请参考MSDN。 WH_SYSMSGFILTER WH_JORNALRECORD WHJORNALPLAYBACK WH_SHELL WH_CBT WH_FOREGROUNDIDLE WH_DEBUG 2 : lpfn 是钩子函数的地址。钩子安装后如果有相应的消息发生, windows 将调用此参数指向的函数。一般钩子函数都是位于一个DLL 中。当为其他进程内的线程安装钩子时,如果钩子函数在DLL 中,系 统会把DLL 映射到那个进程内,使他能在该进程内被调用。 注意:钩子函数多是被其他进程内的线程调用,而不一定是安装钩 子的线程。 钩子函数被调用的过程: 当进程A 一个线程准备向一个窗口发送一个消息,系统检查该线程 是否被安装了钩子,如果该线程被安装了钩子且该消息与钩子要截获的 消息类型一致,此消息将被截获。系统检查该钩子的钩子函数所在的 DLL 是否已经被映射进程A 的地址空间中。如果尚未映射,系统会强制 将该DLL 映射到进程A 的地址空间。然后获得钩子函数在进程A 的虚 拟地址,并调用钩子函数。我们可以在钩子函数内定义我们对该消息处 理的过程。 注意:当系统把钩子函数所在的DLL 映射到某个进程地址空间时, 会映射整个DLL,而不仅仅是钩子函数,这也就说我们可以使用该DLL 中的所有导出函数。 3:hmod 参数是钩子函数所在dll 的实例句

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档