Hook(钩子技术)基本知识讲解,原理

标签: Hook技术介绍 Hook技术原理
20人阅读 评论(0) 收藏 举报
分类:

一、什么是HOOK(钩子) 

        对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。
        钩子的种类很多,每种钩子可以截获相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。钩子可以分为线程钩子和系统钩子,线程钩子可以监视指定线程的事件消息,系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL) 中。
       所以说,hook(钩子)就是一个Windows消息的拦截机制,可以拦截单个进程的消息(线程钩子),也可以拦截所有进程的消息(系统钩子),也可以对拦截的消息进行自定义的处理。Windows消息带了一些程序有用的信息,比如Mouse类信息,就带有鼠标所在窗体句柄、鼠标位置等信息,拦截了这些消息,就可以做出例如金山词霸一类的屏幕取词功能。

二、Hook 分类

 (1) 线程钩子监视指定线程的事件消息。
(2) 系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。这是系统钩子和线程钩子很大的不同之处。

三、HOOK(钩子)的工作原理

       正确使用钩子函数前,我们先讲解钩子函数的工作原理。当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个线程钩子,您进程中的钩子函数将被调用。如果是一个系统钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用系统钩子,就必须把该钩子函数放到动态链接库中去。

      当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。
       几点需要说明的地方: 
  (1) 如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。 
  (2) 对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 
  (3) 钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。

查看评论

钩子技术介绍(HOOK 编程)

【什么是HOOK API】HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24]。HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK程序...
  • hellokandy
  • hellokandy
  • 2017-05-25 23:14:48
  • 3646

HOOK钩子机制学习笔记

HOOK钩子机制学习笔记(1) 收藏  一、什么是钩子(hook)     Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。钩子(hook)是一种特殊的消息...
  • AstrayLinux
  • AstrayLinux
  • 2012-11-25 20:22:09
  • 11484

hook 钩子技术

  • 2011年09月28日 10:50
  • 4.4MB
  • 下载

Java HOOK - 钩子机制扫盲

一、什么是HOOK(钩子)          对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者...
  • hjxwudiha931721
  • hjxwudiha931721
  • 2017-07-25 14:14:46
  • 2561

应用层HOOK技术的一些简单总结

在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常用的Hook技术。 SetWindowsHookEx 基本上做W...
  • FlowShell
  • FlowShell
  • 2016-07-31 23:17:42
  • 1127

HOOK钩子机制

最近在看一些编程相关的书籍和资料,知识碰见了,就想把它记下来,以便日后能用的上,也可能只是浅显的概念!可能有错,但是有值得参考的地方,慢慢充电吧! 一、理解:钩子,顾名思义就是钩东西的,...
  • gogoky
  • gogoky
  • 2016-05-03 20:44:44
  • 2188

高级Linux Kernel Inline Hook技术分析与实现

[目录] 1. 简述 2. 更改offset实现跳转 3. 补充 4. 如何查杀 5. 实例 一、简述 目前流行和成熟的kernel inline hook技术就是修改内核函数的op...
  • Tomstrong_369
  • Tomstrong_369
  • 2016-05-13 14:39:49
  • 738

Android安全:Hook技术

一、Hook技术 1.Hook英文翻译为“钩子”,而钩子就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件; 2.Hook使它能够将自己...
  • p106786860
  • p106786860
  • 2016-08-15 18:39:23
  • 17966

钩子系统原理及ThinkPHP 钩子分析

钩子系统,乍一看,好高大上,让人摸不到头脑。其实,大多技术或者方案,它总要起个名字,要是了解了其原理,这个名字其实也不必纠结。...
  • u014290054
  • u014290054
  • 2015-06-19 08:28:03
  • 1622

钩子模式 HooK 模板方法模式

有一个模板来执行一段代码,就好比一个造车的工厂在造车, 我写了一个造车的逻辑,但是我不知道客户每次的需求是想造 什么车,那好我们做一个模板,把造车相同的工艺流程提取出来 做成一个模板,然后在有分歧的位...
  • shasiqq
  • shasiqq
  • 2015-03-26 16:29:19
  • 1672
    个人资料
    持之以恒
    等级:
    访问量: 1117
    积分: 464
    排名: 10万+
    文章存档
    最新评论