查看: 5598|回复: 26
收起左侧

[分享] 关于 Windows钩子的注释

[复制链接]
sxingang
头像被屏蔽
发表于 2009-5-5 10:38:22 | 显示全部楼层 |阅读模式
关于 钩子 的解释以前的帖子都有,但我发现没有比较具体的详述。这个帖子确实也是简单说明,但更进一步的给出了说明。
关于钩子的解释如下:
      所谓的钩子其实是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递.钩子程序可以通过API调用来驻留和脱钩。

       专门有一种函数叫 钩子函数,钩子函数在Microsoft的Win32 SDK手册(不同的操作系统对于不同SDK手册)的上就有记载,使用SDK编写。钩子函数,分为全局钩子和线程钩子两种。线程钩子就只监视某个线程,全局钩子可以监视Windows的所有线程。具体的你可以看看Delphi 带的Win32 SDK,全局钩子是必须用DLL加载,也就是说钩子函数必须包装为一个DLL文件,然后再在主程序中调用钩子DLL中函数才可以

       SDK中包括开发版本Windows所需要的函数和常数定义、API函数说明文档、相关的工具和示例.使用C语言,不包括编译器。

        具体关于SDK就不说了,简单的理解 SDK就是一个函数和各种定义的封包集操作系统直接支持SDK里面的函数,所有不需要编译器自己封包成DLL文件,就可以使用。
        
由于钩子函数的类型太多了 在这里列出长用的:
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET
    WH_CALLWNDPROC和WH_CALLWNDPROCRET  使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC  ,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET 。
    WH_CALLWNDPROCRET 传递指针到CWPRETSTRUCT结构,再传递到WH_CALLWNDPROCRET 。CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。

2、WH_CBT  
    系统都会调用WH_CBT ,监控事件包括:
    1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
    2. 完成系统指令;
    3. 来自系统消息队列中的移动鼠标,键盘事件;
    4. 设置输入焦点事件;
    5. 同步系统消息队列事件。
    子程的返回值确定系统是否允许或者防止这些操作中的一个

3、WH_DEBUG  
    辅助调试其他钩子函数
    在系统调用系统中与其他钩子函数关联的钩子之前,系统会调用WH_DEBUG 。你可以使用这个WH_DEBUG来决定是否允许系统调用与其他钩子关联的钩子进程

4、WH_FOREGROUNDIDLE
    当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务

5、WH_GETMESSAGE
    应用程序使用WH_GETMESSAGE 来监视从GetMessage or PeekMessage函数返回的消息。你可以使用WH_GETMESSAGE 去监视鼠标和键盘输入,以及其他发送到消息队列中的消息。

6、WH_JOURNALPLAYBACK
    WH_JOURNALPLAYBACK 使应用程序可以插入消息到系统消息队列。可以通过使用WH_JOURNALRECORD 记录连续的鼠标和键盘事件。只要WH_JOURNALPLAYBACK 已经安装,正常的鼠标和键盘事件就是无效的。
    WH_JOURNALPLAYBACK Hook是全局钩子。
    WH_JOURNALPLAYBACK是system-wide local(全系统范围的控制),它们不会被注射到任何行程位址空间。(按键精灵就是用这种函数做的)

7、WH_JOURNALRECORD
    WH_JOURNALRECORD 用来监视和记录输入事件。
    WH_JOURNALRECORD Hook是全局Hook。
    WH_JOURNALRECORD是system-wide local hooks,它们不会被注射到任何行程位址空间。

8、WH_KEYBOARD
    在应用程序中,WH_KEYBOARD 用来监视WM_KEYDOWN 和 WM_KEYUP(API里的函数)消息,这些消息通过GetMessage or PeekMessage function返回。可以使用这个来监视输入到消息队列中的键盘消息


9、WH_KEYBOARD_LL  
    WH_KEYBOARD_LL  监视输入到线程消息队列中的键盘消息

12、WH_MSGFILTER 和 WH_SYSMSGFILTER
    WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。
    WH_MSGFILTER 只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了钩子的应用程序建立的对话框的消息。
    WH_SYSMSGFILTER 监视所有应用程序消息。
    WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过滤消息。通过调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样。(这句话可以不用理解,涉及到编程的知识)

13、WH_SHELL
    外壳应用程序可以使用WH_SHELL 去接收重要的通知。当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELL 。
    WH_SHELL 共有5钟情况:
    1. 只要有个top-level、unowned 窗口被产生、起作用、或是被摧毁;
    2. 当Taskbar需要重画某个按钮;
    3. 当系统需要显示关于Taskbar的一个程序的最小化形式;
    4. 当目前的键盘布局状态改变;
    5. 当使用者按Ctrl+Esc去执行Task Manager(或相同级别的程序)。
    按照惯例,外壳应用程序都不接收WH_SHELL消息。所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfo function注册它自己。


另外说明下:
      如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了全局钩子,那么系统会自动先调用线程钩子,然后调用全局钩子。
        对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。
       钩子特别是系统钩子会消耗消息处理时间,降低系统性能。
       如果想了解钩子函数 和 API函数 的所有的情况,请参看win32 sdk手册。

这是关于钩子的简单介绍,本来早该写了怎奈感冒发烧躺了3天 ,期间虽坚持上卡饭,但只是看看就走。


我这里有一个钩子查看器,大家可以看看(注意报毒不是误报,D+监控要阻止它IE和csrss.exe 的执行和修改,对内存要放行)


由于上一个报毒,还反映联网下文件。现在不建议用 钩子查看器
冰刃上也有 查看钩子的看图大家可以用冰刃(我真笨 居然没发现


[ 本帖最后由 sxingang 于 2009-5-16 23:20 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 1人气 +1 收起 理由
月光下的忍者 + 1 经验值+5

查看全部评分

月光下的忍者
发表于 2009-5-5 10:50:13 | 显示全部楼层
感谢楼主分享,如果能写一篇关于HIPS危险钩子经验总结,我想会更好~
sxingang
头像被屏蔽
 楼主| 发表于 2009-5-5 10:56:56 | 显示全部楼层

回复 2楼 月光下的忍者 的帖子

那需要了解SDK文档,可惜没有办法根本找不到SDK文档。
书店里没有买到,网上没有下的,可以下载SDK程序安装,但不要指望从N多的函数里了解信息没有 说明文档 根本不可能

[ 本帖最后由 sxingang 于 2009-5-5 11:07 编辑 ]
月光下的忍者
发表于 2009-5-5 11:12:29 | 显示全部楼层

回复 3楼 sxingang 的帖子

其实可以考虑运行100个利用钩子为主要手段的木马病毒,然后总结一下~

哈哈,不过好像只有中网S3有对钩子函数有明确的提示~~(MD好像也有~)
V!RTUAL
发表于 2009-5-5 11:35:23 | 显示全部楼层
学习
大少爷
发表于 2009-5-5 11:37:07 | 显示全部楼层
谢谢技术文档分享!~!
abcdefgxw
发表于 2009-5-5 11:51:59 | 显示全部楼层
这么好的文章,收藏了,慢慢学习
elst5523183
发表于 2009-5-5 11:54:04 | 显示全部楼层
收藏学习!
sxingang
头像被屏蔽
 楼主| 发表于 2009-5-5 13:22:10 | 显示全部楼层
原帖由 月光下的忍者 于 2009-5-5 11:12 发表
其实可以考虑运行100个利用钩子为主要手段的木马病毒,然后总结一下~

哈哈,不过好像只有中网S3有对钩子函数有明确的提示~~(MD好像也有~)

其实严格说没有常见的危险钩子,要我说所有钩子都是危险的(是不是太极端了
关键是调用钩子的程序,这才是关键。木马病毒可以用任何一种钩子,病毒也在不断更新今天这种钩子用的很多,明天就很少用了。
我这有比较常见的钩子实例,报毒没办法,从本质上说都是后门程序触及底层操作不报毒才怪

[ 本帖最后由 sxingang 于 2009-5-6 00:59 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
levith
发表于 2009-5-5 21:17:41 | 显示全部楼层
楼主,你放的程序打开时自动打开一个网页
安全工具还这样。。。。
不太好吧,红伞报毒了。。。。。。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-5-9 10:56 , Processed in 0.122790 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表