简介

  通过钩子技术(HOOK)可以把一段代码插入到当前线程或插入到桌面上的所有其他线程。其中插入到当前线程的钩子叫局部钩子,插入到桌面上所有线程的钩子叫全局钩子。
  全局钩子之所以要位于动态链接库中,是因为所有的GUI线程要想调钩子函数就需要把钩子的dll模块加载到自己的内存空间。

Windows子系统

  Windows子系统进程(csrss.exe)是桌面操作系统的核心进程,所有打开的窗口都属于该进程的管辖范围,每个窗口都是Windows子系统中的对象,由win32k.sys来管理的内核对象,没错就是c++或面向对象编程的灵魂“万物万事皆对象”的那个对象。下图的箭头就是指向我当前打开的写文章的窗口,00070E90是窗口的句柄。

  下图是windows键鼠事件的消息流,键鼠消息通过RIT线程放到输入消息队列,最后到GUI线程进行处理。Windows子系统对每个GUI线程维护了一个钩子数组,我们用户模式的钩子函数入口会被放到这个数组中。也部署钩子就是我们注册了回调函数,供系统内核调用。

  下图为内核触发钩子函数,由内核态切换到用户态执行用户模式下钩子函数的执行过程。

举例说明系统这样设计的原因

  SetWindowsHookExA函数的第四个参数为0时,表示“lpfn对应的钩子程序”与所有桌面线程都关联,
比如某流氓软件PP.exe 写了钩子函数HOOK_PassWord(),当我们运行微信.exe 输入密码时,HOOK_PassWord()要被成功执行,系统就得把函数实现加载到内存中去,如果钩子函数写在PP.exe 难不成系统要再把PP.exe 再加载一遍到内存中么? 既费内存,又引入了风险。DLL的优势就是模块化,随用随加载,只不过被注册回调之后被系统自动调用了,不必大惊小怪。

HHOOK SetWindowsHookExA([in] int       idHook,[in] HOOKPROC  lpfn,//钩子程序[in] HINSTANCE hmod,[in] DWORD     dwThreadId//线程ID
);

为什么全局钩子必须写到dll里面?相关推荐

  1. Windows 钩子,基本的dll注入

    Windows操作系统是基于钩子完成的消息传递与用户交互,它以事件驱动的方式运行.每一个窗口都拥有自己的消息队列,当外部设备触发消息时,消息被发送到系统消息队列,再有操作系统安排将消息发送到特定进程上 ...

  2. 练习 进程钩子 全局钩子

    C++ 关于钩子的知识点博客网上基本写的都非常详细,这里只是简单分享一下本人练手的编程步骤和一些简单认识. 钩子程序就大概分成了2种: (1) 进程中的钩子:它 的作用范围只是限定在某个进程中,或者某 ...

  3. java hook全局钩子_钩子(hook)

    钩子(hook)编程 一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows应用程序传递消息的过程: 如在 ...

  4. MFC 全局钩子dll注入监听键盘消息

    MFC自带的键盘监听功能只有焦点在MFC程序界面时才能监听键盘消息,要想在MFC程序界面外监听键盘消息,可以通过DLL注入使用全局钩子来监听.首先,通过Visual Studio生成全局钩子的动态库, ...

  5. 关于dll注入方式的学习(全局钩子注入)

    何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程.我们注入的代码以动态链接库(DLL)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...

  6. Windows 全局钩子 Hook 详解

    监控程序的实现       我们发现一些木马或其他病毒程序常常会将我们的键盘或鼠标的操作消息记录下来然后再将它发到他们指定的地方以实现监听.这种功能其他是利用了全局钩子将鼠标或键盘消息进行了截取,从而 ...

  7. 通过全局钩子发送自定义消息,实现进程通信

    利用钩子进行进程通信,在网上搜了许多帖子还是不明所以. 没办法自己摸索了4,5天终于测试好了代码.写下来,希望不要有人像我这样云里雾里的在这上面浪费时间. 钩子的加载 使用函数SetWindowsHo ...

  8. VC++ Hook截取鼠标点击窗口消息的问题!全局钩子

    VC++ Hook截取鼠标点击窗口消息的问题!全局钩子,高手进! 悬赏分:0 - 提问时间: 2010年05月19日 06时20分 我在做毕业设计,现在遇到一个问题,像求教高手: 我想实现如下功能,当 ...

  9. 使用调试钩子屏蔽全局钩子

    WH_DEBUG为调试钩子,用来给钩子函数除错.在系统调用系统中与其他Hook关联的Hook钩子例程之前,系统会调用WH_DEBUG Hook钩子例程.你可以使用这个Hook来决定是否允许系统调用与其 ...

  10. 用键盘全局钩子[Hook]监视多进程键盘操作

    用键盘全局钩子[Hook]监视多进程键盘操作 闲来无事,在WIN2K下用BCB5做了个键盘挂钩小程序,监视全局按键情况.Hook安放和回调函数放在一个单独DLL中,DLL原码如下: //------- ...

最新文章

  1. 如何用 Python 打飞机?
  2. SQL Server pivot行列转换案例分析
  3. springmvc 全局编码_SpringMVC-设置UTF-8编码
  4. java spark环境配置文件_JAVA, SCALA, HADOOP, SPARK里的JAVA_HOME和环境变量设置
  5. linux IP、端口连通性测试
  6. matlab 里try用法,matlab在整个程序(全局)中使用try-catch来报告错误
  7. 如何自学java迅速成为java高手
  8. ELK下Kibana和Elasticsearch之间相互TLS身份验证
  9. linux内存管理之uboot第一步
  10. Vb与数据库学习总结博客
  11. 网站锦囊(逐渐更新中)
  12. 你知道台湾Android开发面試題是什么样的吗(附答案解析)
  13. 区块链的正确应用方式与前景
  14. 咋把计算机程序固定到任务栏中,win10我的电脑固定到任务栏如何操作_win10怎么把我的电脑放到任务栏...
  15. 离散点插值反距离加权法IDW C#实现
  16. 计算机中的PS颜色填充快捷键,ps颜色填充快捷键【解决技巧】
  17. Java实现的信号灯
  18. java开发环境搭建小结
  19. Android中读values/xml arrays attrs colors dimens string styles
  20. js根据数组对象属性删除里面的指定对象

热门文章

  1. ADRC自抗扰控制,有手就行
  2. 位置式数字PI控制器C语言
  3. 计算机车牌识别的步骤,车牌识别流程图
  4. 申通核心业务系统上云战役
  5. ecno是什么的缩写_美国的英文缩写是什么简写
  6. php那好,php那好【货币问答】- php那好所有答案 - 联合货币
  7. 业务需求分析师最重要的5项顶级技能
  8. python仿真,clark变换和park变换
  9. 批量创建文件夹并命名的方法
  10. php 多元数组,php数组_php多元数组