[转] Delphi API HOOK 完全说明

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2011-01-28 11:42:23

一、关于 API Hook


1. 什么是 API Hook
不知道大家是否还记得,在 DOS 系统中编程,经常会采取截取中断向量的技术:我们可以设置新的中断服务程序,当系统其他的程序调用这个中断时,就让它先调用我们自己设置的新的中断服务程序,然后再调用原来的中断服务程序,这样就能够获得非凡的控制权。许多优秀的软件和大多数 DOS 病毒程序都采用了这个方法。

在 Windows 中,我们也可以采取类似技术。当系统调用某个 API  函数时,就会先进入我们自己的函数,然后再调用原来的 API 函数,这样,我们的程序就可以取得更多的控制权,我们就可对 Windows 系统中的任意一个函数调用进行动态拦截、跟踪、修改和恢复,就可让 Windows 系统中的任意一个函数按我们的设想工作。这种技术有许多名称,比如“陷阱技术”、“重入技术”等,不过我认为还是 API Hook 最贴切。原因嘛,等一下你看编程就明白了。

这样重要的技术,大家已经都知道了吧?哈哈,知道的都不说,不知道的呢,你就自己慢慢去摸索吧。偶尔有一两篇文章见于报端,不是藏头露尾,就是已经过时了。还有的即使把原理都告诉你了,但就是不说它调用了哪些函数。要源代码?行,拿钱来。有人说了,这种技术用来编病毒最合适,所以..(因为菜刀可以杀人,所以菜刀已被禁止使用了)。而实际呢,你看看使用了这种技术的国产软件就知道了:金山词霸、东方快车、RichWin、东方词圣..在这里,我感觉有必要简单说说金山词霸的工作原理。

2. 金山词霸的工作原理
大家都用过金山词霸吧?当你把光标指向一个单词,词霸就会自动弹出一个窗口并把单词的意思翻译出来。这究竟是怎么做出来的呢?我在这里简单说明一下。

(1) 安装鼠标钩子。
(2) 一旦光标在屏幕上移动,系统就会调用鼠标钩子,词霸通过鼠标钩子能够获得光标的坐标 (x, y) ,并安装 TextOut()、ExtTextOut() 等 API 函数钩子。
(3) 词霸向光标下的窗口发重画消息,负责绘制该点的应用程序在收到 WM_PAINT 消息后,就可能调用 TextOut()、ExtTextOut() 等函数重绘字体。
(4) 调用的函数将被钩子函数拦截,词霸就能够截获该次调用,从应用程序的数据段中将“文字”指针的内容取出,并作翻译处理。
(5) 退出跟踪程序,返回到鼠标钩子,解除对 TextOut()、ExtTextOut() 等 API 函数的跟踪。
(6) 完成了一次“屏幕抓字”。
这里的关键有两点:安装鼠标钩子和 API 钩子。安装鼠标钩子非常简单,而 API 钩子正是取词的核心代码。

3. 关于 Delphi
事实上,随着互联网的普及,许多秘密都已不再是秘密,API Hook 也一样。在网上,你已经可以找到这样的免费源代码,但是大部分可能已经过时,而且这些源代码大都是基于 VC++ 的。如果你想找到用 Delphi 编写的源代码,那么,你还是读一读我的文章吧。
Delphi 是编程工具史上的一个里程碑式的作品。如果你在使用它,我向你表示祝贺。如果你没有使用它,你也没有什么损失。网上关于几种语言谁好谁坏都吵得天翻地覆的了,我不想增加新仇也不想算算旧恨。每种语言都有它的优缺点,每个人都有自己选择的权利嘛!
不过,用 Delphi 编写 API Hook 有几处“陷阱”。我想,除了介绍 API Hook 以外,这也是为什么我要写这篇文章的一个原因吧!

4. 哪些人可以读这篇文章
当然,读这篇文章并没有什么限制。但是你最好已经懂得鼠标钩子的制作过程,手边有 MSDN 那就再好不过了。我认为,只要你是 Windows 的程序员,就一定要有 MSDN。原因?有一套就明白啦。如果你懂得 PE 文件结构,那就更好了。在这篇文章里,我给出了所有的源代码(还不到 200 行)。如果你想修改程序,最好用 SoftIce。

5. 关于我的程序
本文中的程序在 Windows Me 的操作环境下,使用 Delphi5.0 编程调试通过。无论是商用还是个人使用,你都可以随意使用和修改本文中的程序,并且不需要在程序中加注我的个人信息。

[1] [2] [3] [4] [5] [6]  下一页

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

广告位置B