Ring3层Native API hook 的实现
系统:Windows Xp sp3
工具:OD, vs 2008
前几天看到这篇帖子http://bbs.pediy.com/showthread.php?p=833045#post833045让我想来试着hook 一下native api
毋庸置疑,API hook在各种类型项目中使用广泛,已经研究了长一段时间了。参考文献1可以说是APIhook的一个综述。其中主要讲了Ring3层的hook。Ring0层hook难度要大点,驱动程序的稳定性也不能保证,所以我现在还没有勇气去搞驱动层的hook。
关于ring0 api hook 可以参考文献2. 其中详细的讲解了怎样编写驱动程序进行API hook,包含源码。这里主要说Ntdll.dll中的Native API 的hook。Ntdll.dll中函数在window Xp系统中形如:
7C92DF7E > B8 12010000 mov eax,112 ; ZwWriteFile
7C92DF83 BA 0003FE7F mov edx,7FFE0300
7C92DF88 FF12 call dword ptr ds:[edx] ; ntdll.KiFastSystemCall
7C92DF8A C2 2400 retn 24
在windows 2000中有所不同.
hook的基本思路是:修改函数入口处的第512字节,既是把
7C92DF83 BA 0003FE7F mov edx,7FFE0300
7C92DF88 FF12 call dword ptr ds:[edx] ; ntdll.KiFastSystemCall
修改成:
mov edx,[自定义的hook函数地址]
call edx
修改后的代码如下:
7C92DF7E > B8 12010000 mov eax,112 ; ZwWriteFile
7C92DF83 BA 0003FE7F mov edx,xxxxxxxx ;xxxxx是hook函数的地址,定义在你的dll中
7C92DF88 FF12 call edx ;call到你的hook函数中
7C92DF8A C2 2400 retn 24
这个通过打内存补丁来实现,参考文献3。代码如下:
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
