windows HOOK学习(一)

news2024/12/26 22:27:45

了解HOOK

    • 一:HOOK是什么?
    • 二:HOOK的分类
    • 三:HOOK的原理?
    • 四:为什么全局钩子HOOK必须写到DLL中?
    • 五:HOOK的类型

一:HOOK是什么?

hook就是我们平时听到的钩子,它其实就是windows操作系统中的一种消息处理机制。

windows的消息在到达窗口处理函数之前,钩子(hook)可以提前获取这些消息(鼠标、键键盘,窗口移动等等消息),所以当我们获取到这些消息后,我们就可以把我们想做的事情,或者说要处理的某些逻辑放在钩子中。

所以:钩子实际上就是一段消息处理的程序段,通过系统调用,将程序段(钩子函数)挂入系统。每当特定的消息发出,在没有到达目的窗口之前,钩子程序就先捕获改消息,就是钩子函数先一步得到控制权。在这里插入图片描述

二:HOOK的分类

  • 进程内钩子:最对当前进程起作用
  • 全局钩子:对系统所有的进程起作用。也是最强大,也最常用的。但是全局钩子函数必须放在独立的动态链接库(DLL)中。至于为什么,后面我们会解释一下。

三:HOOK的原理?

任何一个钩子都有系统维护一个指针链表(钩子链);其中每个指针指向每个钩子的的处理函数。这个钩子链类似链表的头插:最后安装的钩子放在链表的开始,当监视的消息出现时,系统从链表的第一个钩子开始调用处理函数。

下面简单说下钩子安装,卸载用的API:

  • 安装钩子:SetWindowsHookEx()
  • 卸载钩子:UnhookWindowsHookEx()
  • 钩子传递(调用下一个钩子):CallNextHookEx()

这些函数具体的返回值,参数类型可以参考微软文档,后期我实现简单的例子的时候,会具体说说每个参数的作用。

四:为什么全局钩子HOOK必须写到DLL中?

先说一下DLL:
动态链接库文件(DLL)里面存放的各类程序的函数的实现过程,当程序需要调用函数时先载入DLL,取得函数的地址,然后进行调用。使用DLL的好处就是不需要再程序运行的开始前就要加载所有代码,只需在程序要用某个函数时,从DLL中取出得到这个函数地址,进行调用就行。

当多个进程共享一个DLL时,其实内存中只保留了一个分dll代码,而每个进程调用dll的带出函数是是在单独在自己进程的堆栈上分配空间的,也就是说:每个调用DLL的进程单独保留自己用到的数据。所谓的多进程共享其实就在内存中保留dll代码的空间内“做文章”,如多个进程共享一个dll时,使用LoadLibrary和GetProcAddress得到的地址是一样的,也说明内存中保留一份dll,每个进程共享dll

如果希望更加详细的了解动态库的原理,参考这篇大神的博客:多进程共享动态链接库的原理

【总结一下:】
全局钩子是对所有进程起作用,所有的GUI线程要调用钩子函数的时候。那如果全局钩子不做成一个共享的DLL。所有的进程都要加载一次钩子函数的代码到自己进程中,那属实浪费空间。所以钩子函数做成一个dll,在内存中只保留一份代码。

举个例子:
比如某流氓软件PP.exe 写了钩子函数HOOK_PassWord(),当我们运行微信.exe 输入密码时,HOOK_PassWord()要被成功执行,系统就得把函数实现加载到内存中去,如果钩子函数写在PP.exe 难不成系统要再把PP.exe 再加载一遍到内存中么? 既费内存,又引入了风险。DLL的优势就是模块化,随用随加载。

五:HOOK的类型

在这里插入图片描述
常见Hook技术介绍:

  • Inline Hook:
    API函数都保存在操作系统提供的DLL文件中,当在程序中调用某个API函数并运行程序后,程序会隐式地将API函数所在的DLL文件加载入内存中,这样,程序就会像调用自己的函数一样调用API。Inline Hook这种方法是在程序流程中直接进行嵌入jmp指令来改变流程的。
    Inline Hook流程
    1:构造跳转指令。
    2:在内存中找到欲Hook函数地址,并保存欲Hook位置处的前5字节。
    3:将构造的跳转指令写入需Hook的位置处。
    4:当被Hook位置被执行时会转到自己的流程执行。
    5:如果要执行原来的流程,那么取消Hook,也就是还原被修改的字节。
    6:执行原来的流程。
    7:继续Hook住原来的位置

  • 导入地址表钩子-IAT HOOK
    导入地址表是PE文件结构中的一个表结构。在可执行文件中使用其他DLL可执行文件的代码或数据,成为导入或者输入。当PE文件需要运行时,将被系统加载至内存中,此时windows加载器会定位所有的导入的函数或者数据将定位到的内容填写至可执行文件的某个位置供其使用。这个地位是需要借助于可执行文件的导入表来完成的。导入表中存放了所使用的DLL的模块名称及导入的函数名称或函数序号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1199552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品,订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库,可以在arduino的…

第 371 场 LeetCode 周赛题解

A 找出强数对的最大异或值 I 模拟 class Solution { public:int maximumStrongPairXor(vector<int> &nums) {int n nums.size();int res 0;for (auto x: nums)for (auto y: nums)if (abs(x - y) < min(x, y))res max(res, x ^ y);return res;} };B 高访问员工 …

Maya 2024 for Mac(3D建模软件)

Maya 2024是一款三维计算机图形软件&#xff0c;具有强大的建模、动画、渲染、特效等功能&#xff0c;广泛应用于影视、游戏、广告等行业。以下是Maya 2024软件的主要功能介绍&#xff1a; 建模&#xff1a;Maya 2024具有强大的建模工具&#xff0c;包括多边形建模、曲面建模、…

Technology Strategy Patterns 学习笔记6-Communicating the Strategy-Approach Patterns

1 30-Second Answer 1.1 类似麦肯锡电梯谈话 Map an outline of three bullet points in your head, and then give the executives the simple, declarative, definitive answerAdd your three reasons or characterizations with your three bullet points also as high-le…

计算机网络——b站王道考研笔记

第一章 计算机网络体系结构 1.计算机网络概述 &#xff08;1&#xff09;概念 计算机网络是一个将分散的&#xff0c;具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统&#xff1b; 是互连的&#…

第18章 类集框架

通过本章需要掌握Java设置类集的主要目的与实现原理&#xff0c;掌握Collection接口的作用及小狐妖操作方法&#xff0c;掌握Collection子接口List、Set的区别及常用子类的使用与核心实现原理&#xff0c;掌握Map接口的作用及与Collection接口的区别&#xff0c;理解Map接口设计…

云原生 黑马Kubernetes教程(K8S教程)笔记——kubernetes介绍。Master集群控制节点、Node工作负载节点、Pod控制单元

参考文章&#xff1a;kubernetes介绍 文章目录 1. Kubernetes介绍1.1 应用部署方式演变传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上虚拟化部署&#xff1a;可以在一台物理机上运行多个虚拟机&#xff0c;每个虚拟机都是独立的一个环境&#xff…

jQuery和BootStrap

文章目录 jQuery1、jQuery介绍2、jQuery的选择器2.1、直接查找2.2、导航查找 3、jQuery的绑定事件4、jQuery的操作标签5、jQuery的动画5.1、基本方法5.2、自定义动画 6、扩展方法 (插件机制)7、BootStrap jQuery 1、jQuery介绍 jQuery是什么 jQuery是一个快速、简洁的JavaSc…

前端面试题 计算机网络

文章目录 ios 7层协议tcp协议和udp协议的区别tcp协议如何确保数据的可靠http和tcp的关系url输入地址到呈现网页有哪些步骤post和get本质区别&#xff0c;什么时候会触发二次预检GET请求&#xff1a;POST请求&#xff1a;触发二次预检&#xff08;CORS中的预检请求&#xff09;&…

数据结构与算法 | 第四章:字符串

本文参考网课为 数据结构与算法 1 第四章字符串&#xff0c;主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion&#xff0c;开发环境 C14。 更新&#xff1a;2023 / 11 / 12 数据结构与算法 | 第四章&#xff1a;字符串 字符串概念字符串字符字符…

Unbuntu安装、测试和卸载gcc11

GCC 可用于编译 C、C&#xff0c;本文介绍如何 Ubuntu 上安装 gcc11、测试和卸载它。 1. 在Ubuntu 上安装 gcc11 添加工具链存储库 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test在 Ubuntu 上安装 gcc11 sudo apt install -y gcc-11验证 gcc11 版本 gcc-11 --v…

如何提升管理组织能力?

组织能力能力属于管理能力中的一部分&#xff0c;所以也称之为管理组织能力&#xff0c;组织是将人和事物的组合&#xff0c;有效的梳理和导向结果的能力。每个人都有组织能力&#xff0c;只是能力和效率上存在较大的差异。 一人的组织能力从学生时代就能体现出来&#xff0c;…

springboot高校全流程考勤系统-计算机毕设 附源码 27637

Springboot高校全流程考勤系统 摘 要 本文针对高校考勤等问题&#xff0c;对其进行研究分析&#xff0c;然后开发设计出高校全流程考勤系统以解决问题。高校全流程考勤系统系统主要功能模块包括&#xff1a;考勤签到、课程信息、考勤情况、申请记录列表等&#xff0c;系统功能设…

财务报告是什么

财务报告是什么 财务报告是企业对外提供的反映企业某一特定日期的财务状况和某一会计期间的经营成果、现金流量等会计信息的文件。 根据财务报告的定义&#xff0c;财务报告具有以下几层含义&#xff1a;一是财务报告应当是对外报告&#xff0c;其服务对象主要是投资者、债权人…

yolo系列报错(持续补充ing)

文章目录 export GIT_PYTHON_REFRESHquiet解决 没有pt权重文件解决 python文件路径报错解决 读取文件列名报错解决 导入不同文件夹出错解决 megengine没有安装解决然后你发现它竟然还没有用 export GIT_PYTHON_REFRESHquiet 设置环境变量 GIT_PYTHON_REFRESH &#xff0c;这个…

postgresql实现job的六种方法

简介 在postgresql数据库中并没有想oracle那样的job功能&#xff0c;要想实现job调度&#xff0c;就需要借助于第三方。本人更为推荐kettle&#xff0c;pgagent这样的图形化界面&#xff0c;对于开发更为友好 优势劣势Linux 定时任务&#xff08;crontab&#xff09; 简单易用…

【强化学习】18 —— SAC( Soft Actor-Critic)

文章目录 前言最大熵强化学习不同动作空间下的最大熵强化学习基于能量的模型软价值函数最大熵策略 Soft Q-learningSoft Q-IterationSoft Q-Learning近似采样与SVGD伪代码 Soft Actor-Critic伪代码代码实践连续动作空间离散动作空间 参考与推荐 前言 之前的章节提到过在线策略…

macOS Big Sur(macos11版本)

macOS Big Sur是苹果推出的最新操作系统&#xff0c;具有以下特点&#xff1a; 全新的设计风格&#xff1a;Big Sur采用了全新的设计语言&#xff0c;包括更加圆润的窗口和控件、更加鲜明的色彩和更加简洁的界面。这种设计风格使得操作系统更加美观和易用。强大的性能表现&…

国际阿里云:云服务器灾备方案!!!

保障企业业务稳定、IT系统功能正常、数据安全十分重要&#xff0c;可以同时保障数据备份与系统、应用容灾的灾备解决方案应势而生&#xff0c;且发展迅速。ECS可使用快照、镜像进行备份。 灾备设计 快照备份 阿里云ECS可使用快照进行系统盘、数据盘的备份。目前&#xff0c;阿…