我本来想在ring3下全局hook,大约有这么几种方法:
1: 用SetWindowsHookEx,安装的钩子类型,如WH_GETMESSAGE,WH_KEYBOARD等,但这种方法只能挂接系统中的所有GUI线程。
2: 还有一种通过插入注册表来实现 HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Windows/AppInit_DLLs,这种方法简单,但是还是只能挂钩GUI 程序,并且这个键值已经被广大HIPS所关注,吃力不讨好。
3: 用CreateRemoteThread注入到系统所有进程,但这种方法效率太低,特别是实时性太差,因为它要不停循环扫描所有进程,如果突然新建一个进程可能要过好久才能注进去,可能会漏掉很多API。
4: 通过挂钩NtResumeThread实现全局Hook,这种方法比较好,可以看http://www.xfocus.net/articles/200805/981.html
5: 禁用Copy-On-Write机制实现全局hook,但是难度很大,最终还是要去ring0禁用,http://www.xfocus.net/articles/200510/830.html (它是非PAE的)
说起Copy-On-Write,先看一个结构
struct _hardware_pte_x86 (sizeof=4)
+0 bits0-0 valid
+0 bits1-1 write
&nb

本文探讨了在Ring3下全局Hook的多种方法,包括SetWindowsHookEx、注册表注入、CreateRemoteThread等。重点介绍了通过禁用Copy-On-Write(COW)机制实现全局Hook的原理,详细解析了_x86_硬件页表结构,指出COW在DLL页面中的作用。通过调试器实验展示了如何改变页面权限触发COW,强调了COW与写保护位的配合使用。
&spm=1001.2101.3001.5002&articleId=5912585&d=1&t=3&u=f4552bf3049a401fac21739e8d8b7aab)
708

被折叠的 条评论
为什么被折叠?



