什么是API Hook不知道大家是否还记得,在DOS 系统中编程,经常会采取截取中断向量的技术:我们可以设置新的中断服务程序,当系统其他的程序调用这个中断时,就让它先调用我们自己设置的新的中断服务程 序,然后再调用原来的中断服务程序,这样就能够获得非凡的控制权。许多优秀的软件和大多数DOS 病毒程序都采用了这个方法。 在Windows 中,我们也可以采取类似技术。当系统调用某个API 函数时,就会先进入我们自己的函数,然后再调用原来的API 函数,这样,我们的程序就可以取得更多的控制权,我们就可对Windows 系统中的任意一个函数调用进行动态拦截、跟踪、修改和恢复,就可让Windows 系统中的任意一个函数按我们的设想工作。这种技术有许多名称,比如“陷阱技术”、“重入技术”等,不过我认为还是API Hook 最贴切。原因嘛,等一下你看编程就明白了。 ### Delphi API HOOK完全说明 #### 一、关于API Hook ##### 1.1 什么是API Hook? 在深入探讨之前,我们先了解下API Hook的基本概念。在DOS时代,程序员经常使用一种称为“截取中断向量”的技术:通过设置新的中断服务程序来替换原有的中断服务程序,这样当其他程序调用该中断时,首先会执行我们自定义的新中断服务程序,然后再调用原始的服务程序。这种方法能够让程序员获取到较高的控制权,许多优秀的DOS软件以及大部分DOS病毒都采用了这种方式。 到了Windows操作系统中,我们可以采用类似的技巧。当我们希望在不改变原API函数行为的情况下对其进行修改或监控时,就可以使用API Hook技术。具体来说,就是在调用某个API函数时,首先让调用进入到我们自定义的函数中,然后在这个自定义函数中决定是否继续调用原始的API函数。这样一来,我们的程序就可以对Windows系统中的任意函数调用进行动态拦截、跟踪、修改甚至恢复,从而实现对Windows系统行为的定制化控制。 这种技术有很多别称,如“陷阱技术”、“重入技术”等,但API Hook这个名字最为贴切。这是因为API Hook技术本质上是对API函数的一种“挂钩”,即通过某种手段将自定义的函数与目标API函数关联起来,实现对其调用行为的干预。 ##### 1.2 金山词霸的工作原理 金山词霸是一款知名的翻译软件,其核心功能之一是在用户将鼠标悬停在文本上时自动显示该文本的翻译结果。这一功能的实现主要依赖于API Hook技术。下面是具体的实现步骤: 1. **安装鼠标钩子**:金山词霸会在系统中安装一个鼠标钩子,用于捕获用户的鼠标移动事件。 2. **捕获鼠标位置**:一旦检测到鼠标移动,系统会调用鼠标钩子,词霸可以从钩子中获取鼠标的当前位置坐标(x, y)。 3. **安装API函数钩子**:接着,词霸会安装一系列与文本输出相关的API函数钩子,例如`TextOut()`和`ExtTextOut()`等。 4. **发送重画消息**:词霸向鼠标所在位置的窗口发送重画消息(`WM_PAINT`),负责绘制该点的应用程序在接收到消息后可能会调用`TextOut()`或`ExtTextOut()`等函数来重新绘制文本。 5. **拦截API调用**:当应用程序调用被钩子函数拦截的`TextOut()`等函数时,词霸可以截获这次调用,并从中获取待翻译文本的信息。 6. **完成一次“屏幕抓字”**:完成翻译后,词霸会退出跟踪程序,回到鼠标钩子,并解除对`TextOut()`等API函数的跟踪。 #### 二、用Delphi编写API Hook ##### 2.1 改写API函数 在使用Delphi编写API Hook时,最重要的是确保自定义的函数与要改写的API函数具有相同的参数类型。例如,如果要拦截`MessageBoxA`和`MessageBoxW`这两个函数,则需按照以下方式定义自己的函数: ```pascal function MyBoxA(hwn: hwnd; lptext: pchar; lpcaption: pchar; utype: cardinal): integer; stdcall; function MyBoxW(hwn: hwnd; lptext: pwidechar; lpcaption: pwidechar; utype: cardinal): integer; stdcall; ``` 这里使用了`stdcall`关键字,因为Windows API函数通常采用标准调用约定(`stdcall`)。 在编写具体的Hook函数时,需要注意以下几点: 1. **函数签名**:确保自定义的函数与要替换的API函数具有相同的函数签名。 2. **函数体**:在自定义的函数体内,可以根据需求进行额外的处理逻辑,如记录日志、修改传入参数等。 3. **调用原始API**:通常情况下,自定义的函数最终会调用原始的API函数,以保证原有功能的正常运行。 以上是使用Delphi进行API Hook的基本流程和技术要点。掌握这些内容后,开发者可以灵活地应用于各种应用场景,实现对Windows系统的高级控制。
剩余11页未读,继续阅读
- 粉丝: 0
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助