看流星社区

 找回密码
 注册账号
查看: 6854|回复: 23

从PE文件入手绕过IAT HOOK

[复制链接]

该用户从未签到

发表于 2011-8-8 08:33:41 | 显示全部楼层 |阅读模式
IAT HOOK简介

API HOOK估计没必要多介绍了,简单的来讲就是通过某种方式来改变API函数的工作流程.一般来讲有两种方法:IAT HOOK和INLINE HOOK.前一种应用较为广泛,一方面因为简单,还一方面因为稳定.他的原理就是改写进程空间中要HOOK的API所在模块的函数引入表,使之指向替换原API函数的函数地址(某些木马就是利用IAT HOOK的方式,挂钩NtQuerySystemInformation的方式来实现进程隐藏).这里感觉还是有必要再说一点INLINE HOOK,这个复杂点,直接进入被HOOK的API函数内部去修改他,采用指令call或者jmp等,迫使API改变流程,跳到自己的替换函数中.通常都是在函数头部前10个字节内修改.

如何搞定IAT HOOK

注意这里说的是搞定,而不是修复IAT HOOK,搞定所指的就是只要不让那个IAT HOOK起作用就行了.

方案1:通过LoadLibrary和GetProcAddress来动态获取API地址.

忘了是在哪看到过这个方法,实际上这个方法可以说根本无效,Jeffrey Richter在核心编程里面给出的例子就提到过这个问题,为了在动态获取API调用的情况下也能让HOOK生效,首先就应该把LoadLibraryA,LoadLibraryW......等等那几个可以实现动态获取的函数全部都HOOK住.这种方案被直接否决了.

方案2:直接硬编码,从ntdll.dll里面调用NativeAPI.

虽然听起来有点恐怖,但这种方式确实比方案1要有效,只是ntdll.dll有500多函数,全部应编码有点天方夜谭,如果单纯了为了对付某几个特定的HOOK还是可以的.

方案3:直接从PE文件入手,自己读取导出表获取API地址

这也是我认为对付IAT HOOK最有效的方式,无论是检测IAT HOOK还是绕过IAT HOOK或者是修复IAT HOOK都必须走这一步.

实现方式
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2011-8-24 09:49:34 | 显示全部楼层
我想快點搞定IAT Hook

该用户从未签到

发表于 2011-10-27 02:37:25 | 显示全部楼层
我想快點搞定IAT Hook

该用户从未签到

发表于 2012-1-14 22:34:21 | 显示全部楼层
回复 1# 小局2005


    dddddddddddd

该用户从未签到

发表于 2012-3-11 22:26:03 | 显示全部楼层
回复 1# 小局2005


    这种HOOK不懂

该用户从未签到

发表于 2014-1-10 16:48:31 | 显示全部楼层
111111111111111111

该用户从未签到

发表于 2014-5-5 10:29:38 | 显示全部楼层
我想快點搞定IAT Hook

该用户从未签到

发表于 2014-5-14 19:39:51 | 显示全部楼层
啊啊啊啊啊啊啊啊啊啊

该用户从未签到

发表于 2018-7-16 21:34:51 | 显示全部楼层
非常感谢,看看再说

该用户从未签到

发表于 2018-11-14 07:15:59 | 显示全部楼层
支持楼主21
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-28 18:03

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表