「windows平台」IATHook&原理与实现(4)

发布者:极安御信
发布于:2021-12-28 15:56





作者 | 榴莲

编辑 | 楌橪




IAT(Import Address Table) HOOK与我们以往学习过的HOOK有着较大的区别。无论是InlineHook还是HotFixHook,都是基于指令的修改,劫持流程来实现HOOK的。而IATHOOK则是采取另一种劫持思路。这里就不得不提到一个Windows系统的文件格式,PE(Portable Executable)文件格式。

在我们编写一个Windows程序的时候,通常需要调用许多系统或第三方的函数。而需要调用这些函数,就必须要加载导出这些函数的动态链接库。对于动态链接库来说,这些函数是导出函数。而对于调用者,也就是我们而言,这些函数就是导入函数。而导入函数的相关信息就存储在PE文件格式的数据目录表中的导入表中。导入表内有三个表,分别是序号,地址以及函数名,进行分别存储。当调用者调用一个函数的时候,就会去导入表中寻找对应函数名的函数地址。那么我们在这个位置就可以做一些事情了。只要将导入地址表(Import Address Table)中我们想要HOOK的函数的地址,替换成我们自己的函数的地址。那么当调用者再次调用函数的时候,因为地址被我们替换。被调用的将是我们提供的HOOK函数,而不是原来的函数。

那么以MessageBoxA为例,我们实际上来体验一下IATHOOK的实现方式。

首先,我们需要一个目标程序,代码如下:

然后我们来看一下HOOK后的效果:

正常情况下:

HOOK后:

 

接下来,我们将使用代码实现IAT Hook,我这里采用的操作系统是Windows 10 20H2(19042.1288),集成开发环境采用的是Visual Studio 2017。


阅读全文


公众号:极安御信安全研究院(即可获得文章全部内容)



声明:该文观点仅代表作者本人,转载请注明来自看雪