windows hook知识讲解

简介: windows hook知识讲解

1.Windows Hook的概念


  • Windows操作系统的图形用户界面(Graphic User Interface)以事件驱动 (Event Driven)的方式工作

  • 在操作系统中键盘、鼠标,选择菜单、按钮,以及移动鼠标、改变窗口大小 与位置等都是事件

  • 发生这样的事件时,OS会把事先定义好的消息发送给相应的应用程序,应用 程序分析收到的信息后执行相应动作(上述过程在《Windows程序设计》一书中有详尽说明)

  • 也就是说,敲击键盘时,消息会从操作系统内核移动到应用程序。所谓的 “消息钩子”就在此间偷看这些信息


2.常规Windows消息流


  • 发生键盘输入事件时,WM_KEYDOWN消息 被添加到 [OS message queue]

  • OS 判断哪个应用程序中发生了事件,然后从[OS message queue]取出消息,添加到相应应 用程序的[application message queue]

  • 应用程序(如记事本)监视自身的[application message queue],发现新添加的WM_KEYDOWN消息后,调用相应的事件处理程序处理


58198736ad0f9a178c24ba356c0efea7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


3.被Hook后的消息流


  • OS消息队列与应用程序消息队列之间存在一条“钩链”(Hook Chain),设置好键盘消息钩子之后,处于“钩链”中的键盘消息钩子会比应用程序先看到相应信息。

    在键盘消息钩子函数的内部,除了可以查看消息之外,还可以修改消息本身,而且还能对消息实施拦截,阻止消息传递

  • 可以同时设置多个相同的键盘消息钩子,这些钩子按照设置的先后顺序被触发,最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权


1c96f955328f2342884db8125922c510_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


4.SetWindowsHookEx()


  • 使用SetWindowsHookEx( ) API设置消息钩子 - 若dwThreadID参数被设置为0
    则安装的钩子为“全局钩子”(GlobalHook),
    它会影响到运行中的(以及以后要运行的)所有进程。

  • 使用SetWindowsHookExO设置好钩子之后,在某个进程中生成指定消息时,操作系统会将相关的DLL文件强制注入到相应进程然后调用注册的钩子


5.Hook键盘输入


程序代码由两部分组成


  • 1. HookMain:用于加载DLL文件并控制Hook的设置和取消
    编译后为一个.exe可执行文件

  • 2. - KeyHook:Hook相关的主要代码
    编译后为一个.dll文件


5.1.HookMain

相当于一个DLL加载器

1c6fbee8baa64a92d036d4ddfc01a9dc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


5.2.KeyHook


KeyHook.dll的核心代码


安装好键盘 “钩子” 后,无论哪个进程,只要发生键盘输入事件,

OS就会强制将KeyHook.dll 注入相应进程。


加载了KeyHook.dll的进程中,发生键盘事件时会首先调用执行KeyboardProc( )


393e7867074cb500dd5eb0301ac9d455_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


5.3.在编译时注意选择合适的版本:


Release x64

3f3520ecc8c081909544f0e3e2069e93_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


387fe5d971e9f6f2b87197d90fd1e40c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


5.4.打开HookMain.exe


无法在1.txt中输入任何内容


fc101548f39c8485558881ef799f76fa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


5.5.


在exe中输入q退出后,又可以在1.txt中输入了


6.其他


6.1.Hook还有很多种实现方式


- 注入:inline、DLL

- 调试:通过调试相关的API进行Hook


6.2.Hook的目标也有多种


- IAT、代码、EAT


相关文章
|
程序员 API Windows
[笔记]Windows核心编程《番外篇》几种Hook类型
[笔记]Windows核心编程《番外篇》几种Hook类型
|
程序员 API Windows
[笔记]Windows核心编程《番外篇》几种Hook类型
Windows核心编程《番外篇》几种Hook类型
359 0
|
监控 C# Windows
|
API 数据安全/隐私保护 Windows
|
监控 安全 C++
在不熟悉C/C++情况下,hook windows事件
本文讲的是在不熟悉C/C++情况下,hook windows事件,WMI(Windows 管理规范)是基于Windows操作系统的管理数据和操作的基础架构。可以编写WMI脚本或应用程序来自动执行远程计算机上的管理任务,但是WMI会将管理数据提供给操作系统和产品的其他部分。
1665 0
|
Windows 移动开发
Windows 内核Hook之IOAPIC编程
Windows 内核Hook之IOAPIC编程 HOOK系列中,包括应用程序HOOK编程、IDT和IOAPIC编程,其中IOPIC顾名思义I/O ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER中断控制器。
1476 0
|
6天前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
下一篇
无影云桌面