IAT HOOK

本文介绍了IAT Hook的基本原理和实现思路,通过修改PE文件的导入表来实现API函数的Hook。详细阐述了 Hook WinExec 函数的过程,包括编写shellcode、获取调试权限、修改远程进程IAT表等步骤,并提供了测试程序源码和运行截图。文章末尾提醒读者,可通过提供的内存注入程序获取PID和WinExec在IAT表的位置,以验证Hook的成功。
摘要由CSDN通过智能技术生成

  内存攻击中,最简单的就是IAT Hook,这里,结合前面对PE文件的了解,从我写的内存注入代码中剪切出了IAT Hook的部分进行讲解,因为是部分代码,所以在测试的时候,只Hook了WinEx这个函数,而且函数地址都是直接在代码中写进去的,并没有动态获取,具体的动态获取方法,可以看我接下来的博客<<内存注入只IAT Hook和Inline Hook>>,相关源码和测试程序都已经上传了,资源地址 http://download.csdn.net/detail/enjoy5512/9539443
  注:转载请注明来源 enjoy5512的博客 http://blog.csdn.net/enjoy5512


IAT Hook原理


  在windows系统下编程,应该会接触到api函数的使用,常用的api函数大概有2000个左右。今天随着控件,stl等高效编程技术的出现,api的使用概率在普通的用户程序上就变得越来越小了。当诸如控件这些现成的手段不能实现的功能时,我们还需要借助api。最初有些人对某些api函数的功能不太满意,就产生了如何修改这些api,使之更好的服务于程序的想法,这样api hook就自然而然的出现了。我们可以通过api hook,改变一个系统api的原有功能。基本的方法就是通过hook“接触”到需要修改的api函数入口点,改变它的地址指向新的自定义的函数。api hook并不属于msdn上介绍的13类hook中的任何一种。所以说,api hook并不是什么特别不同的hook,它也需要通过基本的hook提高自己的权限,跨越不同进程间访问的限制,达到修改api函数地址的目的。对于自身进程空间下使用到的api函数地址的修改,是不需要用到api hook技术就可以实现的。
常见的API Hook包括2种, 一种是基于PE文件的导入表(IAT), 还有一种是修改前5个字节直接JMP的inline Hook.
  对于基于IAT的方式, 原理是PE文件里有个导入表, 代表该模块调用了哪些外部API,模块被加载到内存后, PE加载器会修改该表,地址改成外部API重定位后的真实地址, 我们只要直接把里面的地址改成我们新函数的地址, 就可以完成对相应API的Hook。


IAT Hook基本思路


1) 编写shellcode,shellcode用于Hook相应函数后,需要执行的代码,还用于执行完我们的代码后恢复原函数的调用
2) 获取调试权限
3) 根据进程PID获取远程进程句柄
4) 申请空间写入我们shellcode会用到的数据
5) 动态修改shellcode中需要重定位的数据
6) 写入shellcode
7) 修改远程进程IAT表,用shellcode的首地址替换需要Hook的函数保存在IAT表中的地址


代码实现 :


/////////////////////////////////////////////////////////////////////////////
//  文件名 : test.c
//  工程 : test
//  作者 : enjoy5512   修改者 : enjoy5512   最后优化注释者 : enjoy5512
//  个人技术博客 : blog.csdn.net/enjoy5512
//  个人GitHub   : github.com/whu-enjoy
//  csdn code    : code.csdn.net/enjoy5512
//  描述 : 对测试进程的WinExec函数进行IAT Hook
//  编译环境 : Windows XP SP3 + vc6.0
//  主要函数 :
//  版本 : 最终确定版  完成日期 : 2016年6月2日 20:29:56
//  修改 :
/////////////////////////////////////////////////////////////////////////////

#include &l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值