揰掵佲 发表于 2025-5-18 17:28:51

火山视窗EAT_HOOK源码分享 支持32和64





EAT(Export Address Table)用于修改动态链接库(DLL)中导出函数的调用。与IAT Hook不同,EAT Hook是在DLL自身中进行钩子操作,而不是修改应用程序的导入表。它的原理是通过修改DLL的导出函数地址,将原本要导出的函数指向另一个自定义的函数。这样,在应用程序调用DLL的导出函数时,实际上会执行自定义的函数。

EAT Hook的步骤通常包括以下几个步骤:

获取目标DLL的基址:通过模块加载和遍历PE文件的导出表,找到目标DLL的基址。
定位导出函数:根据导出函数的名称或序号,在导出表中找到目标函数的位置。
保存原始函数地址:将目标函数的地址保存下来,以便后续恢复。
修改导出函数地址:将目标函数在导出表中对应的地址修改为自定义函数的地址。
实现自定义函数:编写自定义的函数,该函数会在被钩子函数被调用时执行。
调用原始函数:在自定义函数中,可以选择是否调用原始的被钩子函数。
与IAT不同是EAT存放的不是函数地址,而是导出函数地址的偏移,使用时需要加上指定Dll的模块基地址,当Hook挂钩之后,所有试图通过导出表获取函数地址的行为都会受到影响,EATHook并不会直接生效,它只能影响Hook之后对该函数地址的获取。

实现导出表劫持的详细流程如下所示:

首先获取到DOS头,并加上偏移得到NT头,再通过Nt头得到数据目录表基地址。
数据目录表DataDirectory中的第0个成员指向导出表的首地址,直接拿到导出表的虚拟地址。
循环查找导出表的导出函数是否与我们的函数名称一致,一致则取出导出函数地址。
设置导出函数位置读写属性,将新的导出函数地址写入到该位置

源码回复可见
**** Hidden Message *****

雪很冷 发表于 2025-5-18 17:59:56

收到。感谢分享

netandy 发表于 2025-5-19 00:18:27


感谢分享,很给力!~

hjf571x 发表于 2025-5-19 08:54:22

好复杂,谢谢分享,我收藏了

ybhrokeo 发表于 2025-5-19 17:52:47

好工具         

nbxcirhc 发表于 2025-5-20 08:45:56


支持开源~!感谢分享

wq297528971 发表于 2025-5-23 15:24:34

[重磅]火山编程资源网 https://www.leybc.cn

fengyishen 发表于 2025-5-27 10:20:16

查看本帖隐藏内容

juwphoxg 发表于 2025-5-27 19:53:31

学习一波

xeqcoinb 发表于 2025-5-28 10:30:18

感谢分享
页: [1] 2
查看完整版本: 火山视窗EAT_HOOK源码分享 支持32和64