作者|榴莲
| | | | |

IAT吊钩与我们过去研究过的吊钩很不相同。无论是InlineHook还是HotFixHook,都是基于指令修改和劫持过程来实现Hook的。而IATHOOK则采取了另一种劫持的思路。这里不得不提一下Windows系统的一种文件格式,PE文件格式。

我们在编写一个Windows程序的时候,通常需要调用很多系统或者第三方函数。要调用这些函数,必须加载并导出这些函数的动态链接库。对于动态链接库,这些函数是导出函数。对调用者来说,也就是对我们来说,这些函数是导入函数。导入函数的相关信息存储在PE文件格式的数据目录表中的导入表中。导入表有三个表,分别是序列号、地址和函数名,分别存储。当调用者调用一个函数时,它会去导入表中查找函数名对应的函数地址。那么我们可以在这个位置上做点什么。只需用我们自己的函数的地址替换我们想要挂钩到地址表中的函数的地址。然后当调用者再次调用该函数时,因为地址被我们替换了。将要调用的将是我们提供的钩子函数,而不是原来的函数。
所以以MessageBoxA为例,我们来实际体验一下IATHOOK的实现。
首先,我们需要一个包含以下代码的目标程序:
那么我们来看看HOOK之后的效果:
正常情况下:
挂钩后:
接下来,我们将使用代码来实现IAT钩子。我这里用的操作系统是Windows 10 20H2,集成开发环境是Visual Studio 2017。
阅读全文
微信官方账号:吉安宇信安全研究院


