Window s 下 API hook 和 Window s hook 应用区别 Hook 字面的意思是钩子,但是实际上更像提供一种过滤,或者说修改消息处理,或者API 的机制
API hook 什么是API 的hook 呢,其实就是将 API 调用的地方进行了转移,或者重新实现的一种技术
这种技术不仅仅可以用在 w indow s 上,其他 OS 上一样可以使用,我曾经在 brew mp 上的手机开发上测试过API hook
所以这里主要只讲 w indow s 下的API hook
API的hook 基本思路都是想办法替换原来的API,使函数的调用关系,直接进行转换, 典型的如下 可以看到 client 端要调用的FunctionA,在 A 进入之后,就调用了 FunctionB , 在 Function B 中回到 FunctionA 做具体 A 应该做的事情,从 A 返回之后,FunctionB 然后在返回给 Client,那么在 FunctionB 中使用 FunctionA 的前后,它自己都可以干自己想要干的事情,这样就是一个 API 的hook, 下面我们主要讨论 Window s 上最常用的两种API hook 策略
A)IAT 替换 API hook 所谓的IAT (import address table ) 这个是PE 文件中一个重要的部分,这里我们不详细讨论 PE 文件的构成,因为这个本来就可以写一张内容
我们主要了解的是PE 如何在一个已经加载在内存中的PE 文件如何找到它的IAT
(1) 为什么要找 IAT
一个模块,可能依赖别的API,也可能提供API,供别的模块调用,MS 为了在PE 文件中,分别用导入表和导出表进行描述两种关系
导入表 IAT 主要是描述了这个模块依赖那些其他模块提供的API
而导出表 EAT 是描述这个模块中都