HOOK 钩子技术

HOOK钩子技术1 inline HOOK内联钩子 内联钩子改变函数的第一条指令,通过跳板跳到伪造的函数上。 函数在使用过程中有时候要执行本身已经挂钩的函数,这样就需要先解钩。 阅读详情

认识钩子 HOOK

消息传递机制

  • 我们先来学习一下 Windows 消息传递机制
  • 当我们在应用程序进行相关操作时,例如:点击鼠标、按下键盘,操作窗口等,操作系统能够感知这一事件,接着把此消息放到系统消息队列,然后到应用程序的消息序列中,应用程序通过 Getmessage 函数取出消息,然后调用 DispatchMessage 函数将这条消息调度给操作系统,操作系统会调用在设计窗口类时指定的应用程序窗口对这一消息进行处理
  • 处理过程如下图所示

消息处理过程

  • 在《VC深入详解》一书中,它将钩子过程比喻为警察为了抓逃犯而设置的检查站,基本原理也确实与此类似
  • 就是在应用程序将信息传递给操作系统时(图中的 ③ ),对消息进行捕获和过滤,从而阻止消息发送到指定的窗口过程,最终完成对某些消息的屏蔽功能

钩子基础知识

  • HOOK(钩子,挂钩)是一种 Windows 平台下实现类似于中断的机制
  • HOOK 机制允许应用程序拦截并处理 Windows 消息或指定事件,当指定的消息发出后,HOOK 程序就可以在消息到达目标窗口之前将其捕获,从而得到对消息的控制权,进而可以对该消息进行处理或修改,加入我们所需的功能
  • 钩子按使用范围分,可分为 线程钩子 和 系统钩子,其中,系统钩子具有相当大的功能,几乎可以实现对所有 Windows 消息的拦截、处理和监控
  • 钩子技术涉及到两个重要的 Windows API,一个是 SetWindowsHookEx,安装钩子;另一个是 UnHookWindowsHookEx,卸载钩子

钩子与系统

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

HOOK 分类

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

HOOK 工作原理

  • 在正确使用钩子函数前,我们先讲解钩子函数的工作原理

  • 当您创建一个钩子时,Windows 会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去,新的钩子将加到老的钩子前面

  • 当一个事件发生时,如果您安装的是一个 线程钩子,您进程中的钩子函数将被调用

  • 如果安装的是一个 系统钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用系统钩子,就必须把该钩子函数放到动态链接库中去

  • 当然有两个例外:工作日志钩子 和 工作日志回放钩子

  • 这两个钩子的钩子函数必须在安装钩子的线程中

  • 原因是这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。因此解决的办法是把钩子函数放到单个的线程中,譬如安装钩子的线程


补充说明

  1. 如果对于同一事件(如鼠标消息)既安装了 线程钩子 又安装了 系统钩子,那么系统会自动先调用 线程钩子,然后调用 系统钩子
  2. 对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了 钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权
  3. 钩子特别是 系统钩子 会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。
HOOK技术--键盘鼠标钩子实例 1.首先创建一个DLL项目,用以生成自定义的DLL文件,在DLL文件中对外有两个接口,安装钩子的函数SetHook和卸载钩子函数UnSetHook函数,对于    这些函数由于需要导出,所以在工程项目的.h文件中需要声明这些函数需要导出。 //MouseKeyboardHook.h#ifdef MOUSEKEYBOARDHOOK_EXPORTS #define MOUSEKEYBOARDH 阅读详情

相关推荐

【C++ Hook钩子技术(下)——抓取企鹅消息】Detour Hook框架实战,抓取Tencent企鹅消息,挂钩函数,解析数据一步到位!

光学不练假把式,当我们接触一个新知识的时候并非会认为这个知识很有用。只有当我们实际使用后才知道Hook是有多好“玩”,本期将带领各位进行Detour Hook框架的实战,抓取QQ消息并对抓取数据进行解析,注意这里是抓取本地消息并非获取他人的消息。博客仅供学习,不能用于其他商业和非法用途。另外,本期代码涉及到隐私内容,并不会完全公布代码,仅分享部分重要代码,再次申明本内容仅供学习!

luoqiaoliang的博客 1949

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

一、什么是HOOK(钩子) HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24]。HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK程序就可以在消息到达目标窗口之前将其捕获,从而得到对消息的控制权,进而可以对该消息进行处理或修改,加入我们所需的功能。钩子按使用范围分,可分为线程钩子和系统钩子,其中,系统钩子具有相当...

闲云野鹤的专栏 4549

VB中的鼠标和键盘钩子(HOOK)技术实现

Windows API提供了一组丰富的接口用于与操作系统的底层功能进行交互,其中HOOK技术是用于截获系统、应用程序或特定事件消息的一种机制。通过挂钩(Hooking),开发者可以在消息传递到目标之前进行拦截,执行自定义的代码逻辑,实现如输入监控、消息过滤等功能。SetWindowsHookEx是Windows API中的一个重要函数,用于安装一个钩子程序,从而允许监视系统中的某种类型的消息或事件。钩子程序可以安装在局部线程或全局系统范围内。

weixin_35734408的博客 1201

HOOK编程

<br />注明:该文转自sch0120的技术博客<br /> <br />一、什么是HOOK?<br />  "hook"这个单词的意思是“钩子”,"Windows Hook"是Windows消息处理机制的一个重要扩展,程序员可以通过它来钩住(截获)感兴趣的消息,并用事先编好的一个函数(钩子过程)来处理这些消息!当然,这个处理是在消息到达目标窗口之前进行的。<br />  钩子过程(hook procedure)实际上是一个用来处理消息的函数,通过系统调用,程序员可以把它挂入系统或进程的钩子链中,让它成为

清风盛开 3025

基于 Datawhale 开源量化投资学习指南(10):基于 LightGBM 的量化选股

通过本篇文章,我们深入探索了如何运用 LightGBM 机器学习模型实现量化选股。首先,我们通过获取股票的历史数据,进行特征工程和标签制作,将选股问题转化为一个分类问题。接着,我们使用 LightGBM 训练模型,并在验证集和测试集中评估了模型的表现。该选股策略的核心在于结合机器学习算法,从历史数据中寻找能够捕捉股票短期涨跌的关键特征,从而为投资者提供辅助决策支持。虽然本文的模型取得了一定的效果,但这只是量化投资领域的一小部分。

不想宅的冷同学 1346

LAMMPS实战指南 - 从in文件到分子动力学模拟的完整流程解析

本文详细解析了LAMMPS分子动力学模拟的完整流程,从理解in文件的核心作用与基础结构开始,逐步指导如何创建模拟体系、选择势函数、进行能量最小化与初始化,并深入讲解了NVT/NPT系综弛豫与生产模拟的关键步骤。文章还提供了常见问题的避坑指南与实战技巧,帮助初学者快速掌握从编写in文件到成功运行模拟的全过程。

weixin_28365523的博客 395

react-redux两种实现方式(connect和Hooks)以及TS+Hooks

react-redux两种实现方式(connect和Hooks)以及TS+Hooks

weixin_42662753的博客 2573

如何在R语言中使用Logistic回归模型

在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价、身高、GDP、学生成绩等,发现这些被预测的变量都属于连续型变量。然而有些情况下,被预测变量可能是二元变量,即成功或失败、流失或不流失、涨或跌等,对于这类问题,线性回归将束手无策。这个时候就需要另一种回归方法进行预测,即Logistic回归。 在实际应用中,Logistic模型主要有三大用途: 1)寻找危险因素,找到某些影响...

weixin_34056162的博客 9552

WPF钩子事件

这些函数一般都在 Win32 API 中提供,可以通过 P/Invoke 的方式在 C# 中调用。在使用钩子技术时,你需要使用这些函数来安装钩子、处理钩子事件,并在不需要时卸载钩子。:用于传递钩子信息给下一个钩子处理函数。通常在钩子处理函数中调用它。它接受四个参数:钩子句柄、钩子类型、wParam 和 lParam。它接受四个参数:钩子类型、钩子处理函数、模块句柄和线程 ID。它接受一个参数,即安装钩子函数返回的钩子句柄。WPF使用钩子(Hook)技术时,你需要引入。下面是一个示例:处理鼠标中键。

m0_52541394的博客 683

银河麒麟服务器操作系统V10SP2实战:基于vsftpd构建多角色精细化权限FTP服务

本文详细介绍了在银河麒麟服务器操作系统V10SP2上基于vsftpd构建多角色精细化权限FTP服务的实战指南。从环境准备、核心配置到多角色用户权限管理,全面解析了FTP服务的部署与优化技巧,特别针对企业级应用场景提供了安全加固和故障排查方案。

weixin_30312563的博客 357

5分钟搞定!用L型匹配电路优化窄带天线性能(附Smith圆图实操)

本文针对窄带天线阻抗匹配难题,提供了一套5分钟快速解决方案。通过详解L型匹配电路的核心原理,并结合Smith圆图这一射频工程师的“瑞士军刀”,手把手指导如何选择拓扑、计算元件值并进行实际调试,旨在帮助硬件工程师高效优化天线性能,实现最大功率传输。

yyy34的博客 443

hook介绍

一.hook(钩子):(按照生命周期和功能进行封装) 优势:逻辑简化. (1)要启用Hooks,所有React软件包都必须为16.8.0或更高版本. (2)钩子是允许从功能组件(function component)“挂钩”React状态和生命周期功能的功能。钩子在类内部不起作用-它们允许你在没有类的情况下使用React. (3)React提供了一些像useState这样的内置Hook。你还可以创建自定义Hook以在不同组件之间重用有状态行为. (4)Hook是一些可以让你在函数组件里“钩入” R

吃蛋糕的居居 6304

基于STM32L4XX、HAL库的 L76KB-A58定位模块驱动程序设计

/ 确保字符串终止。// 缓冲区溢出,重置。// 重置缓冲区索引。支持GPS、GLONASS、Galileo、北斗和QZSS多系统定位。case 1: // UTC时间。// 配置GPS模块(可选)// 查找GGA语句。// 启动UART接收。// USART1初始化函数。内置LNA和SAW滤波器。

zhusl6688的博客 349

Hook技术(钩子技术)

这里是在CPU异常的情况下,会根据知道好的函数跳转道哪里去的操作,而该转向哪里去处理这些情况的函数地址,而这些地址会存放道一张表中,让CPU进行查阅,而这里有所不同的是,CPU异常后可能跳转的次数有点多,所有会有多种表存放了跳转的函数地址,所以我们要进行修改的话必须知道每张表中的函数地址,这样我们才可以进行函数地址的修改,从而实现自己的操作。执行系统调用的时候,CPU将从用户模式切换到内核模式,进入内核后,将会根据系统调用的API编号,去找到对应的系统服务函数,实现对应API的功能。

weixin_62693307的博客 1497

【数字孪生工业应用实战】第2篇:数字孪生系统架构设计与技术选型——从“作秀”到“实干”的骨架构建

本文系统剖析了数字孪生系统从“作秀”到“实干”的架构设计关键。针对多数项目在POC转生产时因架构混乱、选型盲目而失败的问题,深入阐述了四层分层架构(感知层、传输层、模型层、应用层)的设计原则,重点解析了感知层的异构适配与边缘预处理、传输层的异步解耦与多模式通信等工程细节。结合OPC UA、MQTT、EdgeX Foundry等主流技术选型对比,以及汽车焊装车间边缘智能网关的实战代码,提供了从零搭建微型孪生系统的完整指导。旨在帮助工程师建立清晰的选型决策逻辑,构建稳定、可演进的数字孪生“骨架”。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 265

数学向量空间的对偶空间解析

对偶空间是线性代数的"进阶语法",它不仅深化了我们对向量空间的理解,还为解决实际问题提供了强大工具。用生活类比解释对偶空间的核心概念,打破"抽象数学"的壁垒;建立对偶空间与原向量空间的直观联系,揭示"对偶"的本质;通过数学推导和代码实现,让读者掌握对偶空间的基本运算;展示对偶空间在科学和工程中的应用,体现其理论价值。范围:本文从有限维实向量空间入手(便于理解),逐步扩展到对偶基、双对偶空间,最后简要提及无限维空间的特殊性。

AI天才研究院 879

HOOK技术(以键盘钩子为例)

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。定义一个回调函数;提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。

qq_67181251的博客 2726

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

「Win」HOOK钩子技术

Hook技术是一种在Windows系统中常用的技术,它可以截获并修改操作系统或应用程序的行为。通过使用Hook技术,我们可以实现以下功能:监视和记录系统和应用程序的行为。修改系统和应用程序的行为,以满足特定需求。在系统和应用程序的行为发生时,执行自定义代码。

何曾参静谧的博客 715

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[逆向工程]什么是HOOK(钩子)技术(二十一)

[逆向工程]什么是HOOK(钩子)技术(二十一)

曼岛_的博客 2242

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

vb.net使用hook技术之键盘鼠标钩子

Hook 概述: 关于Hook技术的讲解,我还没那能力讲的全面,但是大致了解的就是,它是一种监控的技术,通过挂载钩子,我们能够监控系统中的各种消息来往,以及拦截处理。甚至可以将应用程序注入进程。具体请百度,这里主要讲解如何用vb.net做全局键盘鼠标钩子。 Hook的大致过程 我看了微软和各位大佬博客关于SetWindowsHookEx的讲解,大致的过程就是,将应用程序的定义的钩子安装 钩子链中,...

weixin_42150685的博客 2361

Hook钩子技术

Dll注入技术 //如果我们想要加载一个dll,可以自己调用LoadLibrary //如果我们想要让目标进程自己加载一个dll,那么就要想办法让它调用Loadlibrary。 //这里有一个天大的巧合: //LoadLibrary有几个参数???1个参数 //线程回调函数有几个参数???也是1个 //我们可以在目标进程中创建一个线程,然后将Loadlibrary函数的地址设置位线程回调函数,然后将一个dll //文件的路径作为参数传递给线程回调函数。 #define DLL_PATH L

lili1312的博客 409

Windows消息拦截技术的应用(Hook钩子)

一、前 言 众所周知,Windows程式的运行是依靠发生的事件来驱动。换句话说,程式不断等待一个消息的发生,然后对这个消息的类型进行判断,再做适当的处理。处理完此次消息后又回到等待状态。从上面对Windows程式运行机制的分析不难发现,消息在用户与程式之间进行交流时起了一种中间“语言”的作用。在程式中接收和处理消息的主角是窗口,它通过消息泵接收消息,再通过一个窗口过程对消息进行相应的处理。 消息拦截的实现是在窗口过程处理消息之前拦截到消息并做相关处理后再传送给原窗口过程。通常情况下,程序员可以在窗口过程

lzzw的学习之路 1万+

钩子技术介绍(HOOK 编程)

【什么是HOOK API】HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24]。HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK程序就可以在消息到达目标窗口之前将其捕获,从而得到对消息的控制权,进而可以对该消息进行处理或修改,加入我们所需的功能。钩子按使用范围分,可分为线程钩子和系统钩子,其中,系统钩子具有相当大的功能,几乎可以实...

HelloKandy's Blog 2万+

Windows HOOK钩子技术

Windows HooK钩子技术是指基于Windows中窗口的程序的消息处理里机制,对系统或者进程中的消息进行截获和处理,并将截获和处理的消息在重新处理和发送,使其可以实现不同的功能。 钩子技术分为系统钩子技术和线程钩子技术 系统钩子:是用于监视真个系统中的消息的钩子技术,因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL) 中。做好之后使用其他程序将钩子挂载到系统的进程中。 线程钩子:指的是对指定线程进行监视。 钩子原理 在使用钩子技术的时候,WINDOWS会先在内存中创

qq_43812868的博客 2868

钩子技术、HOOK技术应用

http://hi.baidu.com/%BC%E2%C8%F1%C8%ED%BC%FE/blog/item/ae955d39c405dbf5b311c77c.html 钩子技术、HOOK技术应用基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处

Greenfire的专栏 1294

【HOOK技术】键盘钩子

  今天对WINDOWS的HOOK技术进行了应用: 主要包括以下: 1,HOOK技术原理的了解; 2,HOOK技术中的常见钩子应用:键盘钩子,鼠标钩子,消息钩子 3,钩子DLL在调用程序EXE中的调试。 首先,HOOK技术中的几个常用函数: View Code HHOOK SetWindowsHookEx( int idHook, // type of h...

weixin_30755709的博客 189
上一篇: 创建你的第一个Windows程序
下一篇: Python 爬虫的常用库
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值