hook钩子技术,hook 钩子,详解易语言的钩子(钩子HOOK与APIHOOK区别)

hook钩子技术,hook 钩子,详解易语言的钩子(钩子HOOK与APIHOOK区别)

本文分享彝语hook的概念及相关知识点。感兴趣的朋友可以借鉴一下。

在本文中,我们给大家详细分析了易语言中hook的概念以及HOOK和APIHOOK的区别。

Hook的英文原名叫拦截或拦截的意思。作用是截取程序中的交互数据,先通过我们预先设定的钩子处理接口程序,然后返回给原处理程序,或者干脆停下来吃数据,让原处理程序什么也得不到。

本来钩子是Windows操作系统用来检查系统和程序之间通信的一些数据是否到达目标的,所以不是秘密。后来,随着一些专家的研究,这些秘密技术逐渐被发现并公开。与此同时,在掌握了这些技术之后,越来越多的人在自己的软件开发中使用这些技术,实现了超常的招数,超越了其他同类软件的功能,赢得了市场。勾手技术有很多种。

钩子API和钩子技术是完全不同的。尽管它们都是钩子。HOOK挂钩消息,在系统将消息交付给应用程序之前拦截消息,然后操作、修改消息或停止消息的交付;

钩子API拦截应用程序对系统API的调用。它在应用程序调用系统API之前拦截这个调用,让它调用我们定义的函数来代替(内容可能是在一些操作之后调用原来的系统API)。

关于HOOK技术,微软给我们提供了现成的API,有固定的使用步骤。

至于HOOK API技术,微软还没有给我们提供类似的API,也没有简明的步骤供我们参考。或许是因为微软不希望我们用这样的手段编程,所以相对麻烦。

WINDOWS的钩子功能可以认为是WINDOWS的主要特性之一。有了它们,您可以捕获自己的进程或其他进程的事件。通过挂钩,可以给WINDOWS一个回调函数来处理或过滤事件。这个函数也叫“钩子函数”,每次你感兴趣的事件发生时,WINDOWS都会调用这个函数。有两种类型的挂钩:本地和远程。

局部钩子只钩住你自己进程的事件。

远程钩子也可以钩住其他进程的事件。有两种远程挂钩:

基于线程,它将捕获其他进程中特定线程的事件。简而言之,它可以用来观察其他进程中特定线程的事件。

系统范围将捕获系统中所有进程的事件消息。创建钩子时,WINDOWS会先在内存中创建一个数据结构,其中包含钩子的相关信息,然后将该结构添加到已有的钩子链表中。新挂钩将添加到旧挂钩上。当一个事件发生时,如果你安装了一个本地钩子,你的进程中的钩子函数将被调用。如果是远程钩子,系统必须将钩子函数插入到其他进程的地址空间中。要做到这一点,钩子函数必须在动态链接库中,所以如果要使用远程钩子,必须把钩子函数放在动态链接库中。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个挂钩的挂钩功能一定是在安装挂钩的螺纹里。原因是:这两个钩子是用来监控和比较底层硬件事件的。因为它们被记录和回放,所以所有事件当然是有序的。所以如果把回调函数放在DLL里,输入事件是分几个线程记录的,所以我们不能保证顺序正确。因此,解决方案是将钩子函数放在一个单独的线程中,比如安装钩子的线程。

有14种挂钩。以下是它们被调用的时间:

WH _调用SendMessage时调用WNDPROC

对SendMessage的调用返回时,WH_CALLWNDPROCRET

调用GETMESSAGE或PeekMessage时的WH_GETMESSAGE

调用GetMessage或PeekMessage从消息队列中查询WM_KEYUP或WM_KEYDOWN消息时的WH _键盘

调用GetMessage或PeekMessage从消息队列中查询鼠标事件消息时的WH _鼠标

调用GetMessage或PeekMessage从消息队列中查询非鼠标和键盘消息时的WH硬件

当一个对话框,菜单或滚动条要处理一条消息时。钩子是本地的。它是为拥有自己的消息处理过程的控制对象而设计的。

WH_SYSMSGFILTER与WH_MSGFILTER相同,但它是系统范围的。

当WINDOWS从硬件队列中得到一个消息时,WH记录

WH _日志回放当系统的硬件输入队列请求一个事件时

WH _外壳当一个关于WINDOWS外壳的事件发生时,比如任务栏,它的按钮需要重画。

WH_CBT当基于计算机的培训(CBT)事件发生时

WH _前景空闲是WINDOWS自己用的,一般应用很少用。

WH调试用于调试钩子函数。

hook钩子技术,hook 钩子,详解易语言的钩子(钩子HOOK与APIHOOK区别)