关于 Hook Win32 API 的一点研究

转载 2016年12月01日 14:27:08

原文地址::http://blog.csdn.net/eagletian/article/details/1374028


相关文章

1、 

Hook Win32 API 的应用研究之一:网络监控----http://blog.csdn.net/eagletian/article/details/1374033

2、 

Hook Win32 API 的应用研究之二:进程防杀----http://blog.csdn.net/eagletian/article/details/1374034

3、 

Hook Win32 API 的应用研究之三:变速控制----http://blog.csdn.net/eagletian/article/details/1374042

4、 

Hook Win32 API 的应用研究之四:屏幕取词----http://blog.csdn.net/eagletian/article/details/1374048


Hook Win32 API 是一项有趣而实用的WINDOWS系统编程技术,应用领域十分广泛。虽然已经有不少的文章介绍过 Hook Win32 API 的方法了,我还是来作些简单的介绍,以便大家了解其工作原理。

    Hook Win32 API 是什么意思?就是钩住Win32 API;那又何谓“钩”呢?就是绕弯的意思,让Win32 API函数的调用先绕一个弯路,在它执行实际功能之前,我们可以先做一些“预处理”,这样我们可以监视或定制某个Win32 API的调用,以实现一些特殊的功能。至于具体可以实现些什么样的功能,那就取决于程序设计者的想象力了。

    为什么要Hook Win32 API呢?因为在很多情况下,我们想监视或改变某个应用程序的一些特定的行为,但是那个应用程序却没有提供相应的接口,而我们又几乎不可能得到其源代码,怎么办呢?因为大多数WINDOWS引用程序的行为很大程度上依赖于Win32 API,所以我们可以采用Hook Win32 API的方式来试图监视和改变应用程序的行为。

    如何Hook Win32 API呢?实际上Win32 API是由一组动态链接库实现的,使用动态链接库是为了尽可能的共享内存。由于动态链接库是动态装入的,所以Win32 API函数的入口点也是动态确定的。当WINDOWS应用程序在调用Win32 API的时候,并不是直接调用某个函数地址,而是调用某处所存储的一个动态确定的函数地址来实现间接调用地,该处被命名为Import Address Table(简称IAT)。知道了这一点,接下来要做的就是想办法找到这个存储单元的位置,然后将其内容替换为接管函数的入口地址,不过得事先保存原函数的入口地址,以便执行了接管函数的代码后,可以在适当的地方以适当的方式再调用原函数。最后退出的时候或是不想再钩着它的时候,再将其恢复为原函数的入口地址。这就是Hook Win32 API的基本步骤,具体实现过程这里就不赘述了,可以参阅《WINDOWS 核心编程》(Jeffrer Richter著)

    向大家强烈推荐由微软开发的一个用于Hook Win32 API的库(有源代码):Detours 1.5 - 微软对自家的操作系统当然是最了解的了,相信Detours能在WINDOWS平台上运行得很好。点击这里下载:

Detours 1.5 (538KB)

关于 Hook Win32 API 的一点研究

Hook Win32 API 是一项有趣而实用的WINDOWS系统编程技术,应用领域十分广泛。虽然已经有不少的文章介绍过 Hook Win32 API 的方法了,我还是来作些简单的介绍,以便大家了解其...
  • eagletian
  • eagletian
  • 2006年11月08日 18:28
  • 1464

[Win32] API Hook(1)在32位系统上的实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: API Hook技术,虽然很老了,但是依旧是很有用的技术,同时网上的资料往往不能直接拿过...
  • zuishikonghuan
  • zuishikonghuan
  • 2015年08月25日 14:57
  • 3694

一个win32下的api hook方案

api hook还是挺常用的, 成熟的方案有微软自己的,  支持32位Detours。  还有支持32位、64位的开源库MHook。     按照MHook的api, 自己仿造了一个简化的, 用作学...
  • FreeWave
  • FreeWave
  • 2017年09月04日 20:36
  • 173

[Win32] API Hook(2)在64位系统上的实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/d...
  • zuishikonghuan
  • zuishikonghuan
  • 2015年08月25日 17:19
  • 4645

Windows API Hook

原文地址:http://blog.sina.com.cn/s/blog_628821950100xmuc.html 原文对我的帮助极大,正是因为看了原文,我才学会了HOOK,鉴于原文的排版不是很好, ...
  • friendan
  • friendan
  • 2013年10月02日 12:22
  • 29266

Hook api! 如何拦截系统api, 让它做你想做的事!

正文:   拦截api的技术有很多种,大体分为用户层和内核层的拦截.这里只说说用户层的拦截.而用户层也分为许多种:修改PE文件导入表,直接修改要拦截的api的内存(从开始到最后,使程序跳转到指定的地...
  • lonelyrains
  • lonelyrains
  • 2014年05月05日 20:35
  • 6708

揭示Win32 API拦截细节

原文出处:http://www.codeproject.com/system/hooksys.asp 简要介绍 拦截win32 API 调用对于多数windows开发人员来说都一直是很有挑...
  • Steven6977
  • Steven6977
  • 2013年09月03日 13:28
  • 2805

Hook Win32 API 的应用研究之四:屏幕取词(END)

                 用过金山词霸吧?用过的人一定对它的屏幕取词功能印象很深刻,因为这种功能使翻译过程更加简便快捷,屏幕取词是金山词霸的核心技术之一。                   ...
  • hyblusea
  • hyblusea
  • 2006年11月03日 00:30
  • 2411

win32 hook 详解

WIN32钩子 摘译自Win32 Hooks 作者:Kyle Marsh         本文描述钩子及其子MS Win32应用编程接口中的使用,讨论钩子函数、 过滤函数、以及以下类...
  • jklfjsdj79hiofo
  • jklfjsdj79hiofo
  • 2014年07月22日 11:38
  • 2039

WIN32 API - http编程

1. 一般的步骤是,首先通过InternetOpen()函数创建位于根部的HINTERNET句柄,然后才能进一步建立HTTP、FTP会话,使用InternetConnect()函数创建一个指定的会话,...
  • cai_huan_123
  • cai_huan_123
  • 2014年01月09日 16:48
  • 1477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于 Hook Win32 API 的一点研究
举报原因:
原因补充:

(最多只允许输入30个字)