Windows API HOOK

HOOK技术是当前用于Windows API拦截的主要技术,许多应用程序的功能都以HOOK技术为基础核心技术进行扩展实现。

以屏幕取词为例,通过安装鼠标钩子,拦截TextOut()、ExtTextOut()等函数,当应用程序收到WM_PAINT消息后,正常系统函数被拦截,跳转至钩子函数完成取词翻译等工作。

Intel的CPU制定Ring0、Ring1、Ring2、Ring3四个特权级别,Windows只在Ring0、Ring3级别上进行工作。我们把Ring0级别进行的HOOK操作称为内核级HOOK,Ring3级别进行的HOOK操作称为用户级HOOK。

内核级HOOK技术安全级别高,隐蔽性好,拦截范围广,但实现复杂,涉及众多内核操作、且由于Microsoft对操作系统内核采取的商业保护,导致缺乏完整的技术文档支持,开发难度大,极易造成系统瘫痪。

与内核级HOOK相比,用户级HOOK易于实现、且有完善的文档支持。虽然其安全级别低于内核级HOOK,且拦截范围较小,但恶意行为检测有别于制作木马病毒,并不需要较高的隐蔽性。除此之外,经过实际测试,用户级HOOK完全可以支持与检测相关的Windows API拦截。故检测技术涉及到的API拦截均在用户级别进行。

HOOK API技术通俗的说就是API函数的重定向操作。常见的用户级HOOK有Debugger HOOK、Inline HOOK和IAT HOOK。Debugger HOOK可行性低、操作性差,在此不做深入探讨。Inline HOOK通过内嵌汇编代码,替换函数头5个字节长度的机器码以实现函数跳转。该方法对CPU有严重的依赖性,各CPU的跳转指令各不相同,利用该技术实现的API 拦截基本不具备系统移植能力。

前文提到IAT(Import Address Table)是PE文件的导入地址表,其中包含了PE文件导入的所有系统API信息。PE文件载入内存后,动态载入导入模块及调用函数,IAT表记录导入函数的实际地址。API HOOK将IAT表中原函数地址保存并替换成相应钩子函数的实际地址,当应用程序尝试调用被拦截函数时,将跳转至我们自定义的钩子函数,钩子函数执行结束后返回继续执行原函数工作,至此完成一次HOOK工作。真正的HOOK要求被拦截API在钩子函数执行后仍能恢复原函数功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值