对于HOOK函数的一点认识

关于Android x86平台 函数hook知识的一点记录 对x86平台更熟悉一些,所以就写一下x86的吧,至于arm平台,只是寄存器有些不同,其他的思路应该还是差不多的。 其实主要是对了解的知识做一下记录,方便以后翻出来看看   Linux系统的注入一般是使用ptrace函数,对指定进程使用ptrace,可以暂停进程,并可以读/写目标进程指定内存/寄存器,整个注入的流程其实很简单, 假设我们要替换运行进程P中的某个函数调用M_org,大致的思路如 阅读详情

这种函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可

以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。当然,这

么做也是需要付出一定的代价的。由于多了这么一道处理过程,系统性能会受到一定的

影响,所以大家在必要的时候才使用“钩子”,并在使用完毕及时将其删除。

首先让我们看看HOOK函数是怎么安装、调用和删除的。应用程序通常是调用SetWin

dowsHookEx()函数来进行安装的,其函数的原型如下:

参数说明:

idHook 是”钩子”的类型,”钩子”的类型一共有13种,具体如下表:

“钩子”类型

解释

WH_CALLWNDPROC

系统将消息发送到指定窗口之前的“钩子”

WH_CALLWNDPROCRET

消息已经在窗口中处理的“钩子”

WH_CBT

基于计算机培训的“钩子”

WH_DEBUG

差错“钩子”

WH_FOREGROUNDIDLE

前台空闲窗口“钩子”

WH_GETMESSAGE

接收消息投递的“钩子”

WH_JOURNALPLAYBACK

回放以前通过WH_JOURNALRECORD“钩子”记录的输入消息

WH_JOURNALRECORD

输入消息记录“钩子”

WH_KEYBOARD

键盘消息“钩子”

WH_MOUSE

鼠标消息“钩子”

WH_MSGFILTER

对话框、消息框、菜单或滚动条输入消息“钩子”

WH_SHELL

外壳“钩子”

WH_SYSMSGFILTER

系统消息“钩子”

lpfn 指向“钩子”过程的指针。

hMod “钩子”过程所在模块的句柄。

dwThreadId “钩子”相关线程的标识。

通常我们都是把”钩子”做成动态链接库,这样的好处是可以是系统内的每个进程

访问。但是也可以在系统中直接调用,我的建议还是用动态库。如果用动态库的话,那

么SetWindowsHookEx()中的第三个参数就是该动态链接库模块的句柄;对于一个只供单

个进程访问的”钩子”,可以将其”钩子”过程放在安装”钩子”的同一个线程内,此

时SetWindowsHookEx()中的第三个参数为该线程的hInstance。安装”钩子”有两种方法

:1.你可以把他做成动态连接库文件,和程序一起编译。2.你可以在程序的任何地方直

接调用。第2种的方法太麻烦,我不建议用,在这里我就不详细介绍啦。相比之下第1种

比较简单。其”钩子”的过程都在动态链接库内完成。SetWindowsHookEx()函数是一个

安装函数,如故一个由某种类型的”钩子”监视的事件发生,系统就会调用相应类型的

”钩子”链开始处的”钩子”过程,”钩子”链的每个”钩子”过程都要考虑是否把事

件传递给下一个”钩子”过程。如果要传递的话,就要调用CallNestHookEx()函数。这

个函数成功时返回”钩子”链中下一个”钩子”过程的返回值,返回值的类型依赖于”

钩子”的类型。这个函数的原型如下:

其中hhk为当前”钩子”的句柄,由SetWindowsHookEx()函数返回。NCode为传给”

钩子”过程的事件代码。wParam和lParam 分别是传给”钩子”过程的wParam值,其具体

含义与”钩子”类型有关。

释放”钩子”

释放”钩子”比较简单,他只有一个参数。当不在需要”钩子”时,应及时将其释

放。他是调用UnhookWindowsHookEx()函数来实现的,函数原型如下:

函数成功返回TRUE,否则返回FALSE。

如果我这样讲您还是不明白的话,请看下面给出的一些典型“钩子”代码和说明。

这是WH_CALLWNDPROC”钩子”的代码,此”钩子”允许程序监视由函数SendMessag

e发送给窗口过程的消息。系统将消息发送到目的窗口之前调用WH_CALLWNDPROC “钩子

”过程。

这是调用WH_GETMESSAGE的函数,此函数允许应用程序监视函数GetMessage和 Peek

Message返回的消息。应用程序可以用钩子WH_GETMESSAGE来监视鼠标和键盘的输入以及

其他系统发送到消息队列中的消息。

每种”钩子”类型都有其对应的函数,这些函数的参数都是一样的,有兴趣的朋友

可以在 停樱模沃姓业 他们的详细说明。

下面我给出一个完整的”钩子”安装和删除的过程的代码。

注意:这是一个动态链接库文件。

在程序中要想调用“钩子”的时候,有EnableKeyboardCapture()函数就可以啦,但你按

键的时候就回发出声音。

SAP 财务快速记账之--科目分配模型(Account assignment model ) SAP FICO 运维解决方案 阅读详情

相关推荐

2026年7月19日 从可插拔到共封装:技术路线研究报告

AI 算力的爆发正在重写数据中心光互连的技术路线。本报告对当前并存的四代光互连架构——

weixin_51184047的博客 586

hook函数

在计算机编程中,hook函数是指在特定的事件发生时被调用的函数,用于在事件发生前或后进行一些特定的操作。通常,hook函数作为回调函数被注册到事件处理器中,当事件发生时,事件处理器会自动调用相应的hook函数。hook函数通常用于实现程序的扩展性和可定制性,允许用户在程序运行时添加自定义的操作或修改程序的行为。在很多框架和库中,hook函数被广泛应用于实现特定的功能和操作,例如在深度学习框架中,hook函数可以用于记录指标、可视化网络结构、保存模型和优化器状态等。一些常见的hookpre-hook。

qq_44089890的博客 4730

【项目实战】Qt6 录制屏幕、录制声音生成MP4、AVI、MA3等(完整源码,可直接编译使用)

本文将详细介绍如何利用Qt6多媒体模块中的QMediaCaptureSession、QMediaRecorder、QScreenCapture、QAudioInput、QMediaFormat等功能,实现对屏幕和声音的录制,并生成常见的媒体格式文件,如MP4、AVI、MA3等。我们将探讨如何利用这些功能来实现灵活的视频和音频参数设置,以满足不同需求下的录制和生成要求。我们将重点讨论如何配置视频和音频参数,包括分辨率、帧率、编解码器选择、音频采样率、声道设置等。

yegu001的博客 4939

Python中的钩子函数(hooks)介绍使用

python钩子函数的使用、注意事项

zpsimon的博客 5241

图像质量评估(5) -- 畸变(Distortion)

当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时,我们称为图像畸变。有三种类型的镜头畸变:桶形畸变(后文使用英文barrel),枕形畸变(后文使用pincushion)和胡子畸变(后文使用英文wavef或mustache,这种畸变里包含了桶形畸变和枕形畸变)。有一个重要的点需要注意,根据透镜的类型以及透镜是否能够从相机中移除等条件不同,畸变会有不同的表现。 总的来说,旋转对称光学系统功能上会产生和物体几何相似的图形。但也有少数特殊的系统是例外,例如鱼眼镜头,这种镜头几何是故意设计为

vivo01的专栏 2万+

Elasticsearch 8.17.1 JAVA工具类

整理了Elasticsearch8.17最新版的API工具类

weixin_39555954的博客 1123

python强大的hook函数

钩子函数(hook function),可以理解是一个挂钩,作用是有需要的时候挂一个东西上去。具体的解释是:钩子函数是把我们自己实现的hook函数在某一时刻挂接到目标挂载点上。

apex_eixl的博客 2498

汽车诊断服务(UDS——0x11服务解析)

ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。

从事汽车行业 979

钩子(HOOK)函数教程

http://blog.sina.com.cn/s/articlelist_1585708262_3_1.html钩子(HOOK)函数教程(一)我们可以首先从字面上了解钩子,钩子是干什么的呢?日常生活中,我们的钩子是用来钩住某种东西的,比如,说,鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。同样的,Windows的钩子Hook也是用来钩东西的,比较抽...

心情第一 5万+

深度学习赋能胶囊内镜:AI如何实现胃肠道出血的自动检测与分割

在计算机视觉领域,图像分类与目标检测是处理医学影像分析的核心技术。其原理在于通过卷积神经网络(CNN)自动学习图像中的多层次特征表示,实现对特定目标的识别与定位。这项技术的价值在于能够将医生从海量、重复的阅片工作中解放出来,提升诊断效率与一致性,尤其在处理如胶囊内镜产生的数万张连续图像时优势显著。其应用场景广泛覆盖了医学影像的辅助诊断,例如在消化内科,对胃肠道出血的早期发现与精准定位具有重要临床意义。本文聚焦于利用深度学习模型,如U-Net和EfficientNet,构建一个能够从复杂多变的胶囊内镜图像中,

weixin_42533910的博客 378

MFC下使用C++操作Word文档

由于项目需求,在MFC环境下操作将数据和图片写入word文档,之前没有接触过,网上查阅了很多资料,终于把任务完成。理解的不是很透彻,但是这些东西应该够用了,写篇博客记录一下,以便以后再用到。 (1)VS环境下创建一个MFC应用程序,然后在项目上单击右键,选择 类向导-----添加类----类型库中的MFC类。在弹出的对话框中选择文件,位置选择office安装目录下的...

GIS_yuhua的博客 7577

钩子函数(HOOK)完整的教程

基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩

camly的专栏 1万+

【脑电信号】脑电信号EEG形态学滤波处理【含Matlab源码 4023期】

脑电信号EEG形态学滤波处理 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 823

[转]对于HOOK函数的一点认识

对于HOOK函数的一点认识 iBreathe(收藏)一、序言对大多数的Windows开发者来说,如何在Win32系统中对API函数的调用进行拦截一直是项极富挑战性的课题,因为这将是对你所掌握的计算机知识较为全面的考验,尤其是一些在如今使用RAD进行软件开发时并不常用的知识,这包括了操作系统原理、汇编语言甚至是关于机器指令代码的(听上去真是有点恐怖,不过这是事实)。当前广泛使用的Wi

宋雷的技术博客 1011

OV9734 DATASHEET,完整规格书

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

对于HOOK函数的一点认识 (转)

对于HOOK函数的一点认识 (转)[@more@]对于HOOK函数的一点认识maco·cpcw 这种函数是windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正...

circularr9834的博客 93

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

对于HOOK函数的一点认识 (收藏)

 一、序言对大多数的Windows开发者来说,如何在Win32系统中对API函数的调用进行拦截一直是项极富挑战性的课题,因为这将是对你所掌握的计算机知识较为全面的考验,尤其是一些在如今使用RAD进行软件开发时并不常用的知识,这包括了操作系统原理、汇编语言甚至是关于机器指令代码的(听上去真是有点恐怖,不过这是事实)。当前广泛使用的Windows操作系统中,像Win 9x和Win NT

FISH 的专栏 1942

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: [转载]C++入门解惑——为什么学习C++
下一篇: (转载)玩转ARP
csdboy
博客等级 码龄25年 0粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值