读书笔记_windows的APIHook技术_part 2

IAT钩子简单强大,但缺点是这种钩子比较容易被发现。另外一方面这种方式经常使用,驱动程序验证机制就是使用的IAT hook这种方式,还有操作系统在一个称为DLL转发(DLL forwarding)的进程中也用到了IAT hook。所以即使检测到了IAT hook,但区分良性钩子和恶意钩子仍然是困难的。

IAT hook的另外一个缺点就是只有当隐式调用DLL时,IAT hook才起作用,而通过LoadLibrary 和GetProcAddress来调用dll时,IAT hook将不会起作用。原因显示调用采用的是后期按需绑定技术,这种绑定方法在调用函数时才解析函数地址,当钩住这些函数时,IAT中可能不存在它们的地址。

IAT hook的实验方法,可以按IAT hook的第一部分的描述完成驱动的编写,但注意在回调函数中以下两个变量

        char *pc_dlltar = "kernel32.dll";

       char *pc_fnctar = "GetProcAddress";

最好设置称为自己编写的dll和函数名,我这里设置成为DriverDll.dll与test函数。

然后是安装这个驱动,可以使用SRVINSTW.EXE进行安装,假设设置的服务名为APIhook

然后是编写一个测试程序,分别采用显示和隐式两种方法调用DriverDll.dll的test函数,注意是分别使用。

然后在运行中输入cmd,再输入net start APIhook. 此时该服务已启动,IAT hook已经工作。

可以使用Dbgview进行观察IAT hook的执行过程,注意一定要在DbgView中的Caputure选项中勾选Capture Kernel。

然后分别运行测试程序,结果为:

当显示调用dll时发现不了test函数的地址,而隐式调用时则能够扑捉到test函数在IAT中的地址。结果如下图所示:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值