2024年10月消息钩子的介绍?全局消息钩子的介绍
⑴消息钩子的介绍?全局消息钩子的介绍
⑵应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们,是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,系统钩子监视系统中的所有线程的事件消息,也可以是系统中所有线程的事件,避免这些消息传递到下一个Hook子程或者目的窗口,应用程序可以在上面设置子程以监视指定窗口的某种消息,用以监视系统或某一特定类型的事件,系统就把这个消息传递到Hook子程。
⑶钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。
⑷钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。
⑸子类化和消息钩子的区别
⑹完全是两码事。Windows的消息分配机制大致如下总线程接收消息-》将消息发送给对应窗口的总处理器-》总处理器将消息分配给各个专职消息处理程序子类化相当于注册新的或者覆写已有的窗口的专职消息处理程序,实现对不同消息的响应而消息钩子则比较具有“破坏性”,它是直接在第一步“总线程接收消息-》将消息发送给对应窗口的总处理器”这里拦截得到消息,钩子拦截的时候窗口甚至都还没看到消息,此时钩子可以对消息进行读取、消除、篡改,功能比子类化要强大得多,也危险得多
⑺若在dll中使用SetWindowsHookEx设置一全局钩子,系统会将其加载入使用user的进程中,因而它也可被利用为无进程木马的进程注入手段。《/CA》钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。Windows并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。钩子子程是一个应用程序定义的回调函数(CALLBACKFunction),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。线程钩子用于监视指定线程的事件消息。线程钩子一般在当前线程或者当前线程派生的线程内。系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。系统自动将包含“钩子回调函数”的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。(如果对于同一事件(如鼠标消息既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。(对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。(钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。