钩子的内存空间
用户空间的钩子的问题之一是为了编写LoadLibrary参数或编写代码,钩子通常必须在远程进程中分配空间。在内核中存在一个可写区域,它映射到每个进程的地址空间。另一个技术利用了两个虚拟地址映射到同一个物理地址这个事实。内核地址0xFFDF0000和用户地址0x7FFE0000都指向同义物理页面。该共享区域内核地址是可写的,但用户地址则不能写。利用MDL的方法可以将代码写到内核地址并以用户地址来访问它。
该共享区域的大小是4k,内核占用其中的一部分,但还可以使用大约3k的空间用于代码和变量。该内存区域的名称是KUSER_SHARED_DATA,以下是一个写入该区域的示例:
DWORD d_shareM = 0x7ffe0800; // A user Address
DWORD d_sharedK = 0xffdf0800; // A Kernel Address
Unsigned char new_code[]= {
0x90, // NOP make INT 3 to see
0xb8, 0xff, 0xff, 0xff,0xff, // move ax, 0xffffffff
0xff, 0xe0 // jmp eax
};
If ( !gb_Hooked )
{
RtlCopyMemory((PVOID)d_sharedK, new_code, 8);
RtlCopyMemory( (PVOID)(d_sharedK +2), (PVOID)&pd_IAT[index], 4);
gb_Hooked = TRUE;
}
第一字节是操作码,若希望观察行为,则使用NOP指令或INT3(break)指令,后续7个字节只是将一个哑地址移入EAX,然后跳转到该地址。此时钩子函数的编写者需要向内存中写入一个更高级的函数以便真正函数的输出进行过滤。
分享到:
相关推荐
PB串口通讯数据监控,使用钩子HOOK API
windows hookHOOK API是指截获特定进程或系统对某个API函数的调用,使得API的执行流程...Windows下的应用程序都建立在API函数至上,所以截获API是一项相当有用的技术,它使得用户有机会干预其它应用程序的程序流程。
一个网友写的非常清晰明白的鼠标钩子看星星的程序
VC++ 2008编译的钩子源代码,编译通过,没错误
WINCE下的键盘钩子程序,让你轻松捕获键盘消息
API Hook基本原理和实现,钩子的特性
VB内嵌汇编实现单个类文件实现子类化钩子.
键盘钩子 hook 键盘钩子 hook 键盘钩子 hook 键盘钩子 hook 键盘钩子 hook 键盘钩子 hook 键盘钩子 hook 键盘钩子 hook
通过例子介绍了Windows系统服务调用的基本知识及Hook SSDT的方法
这是一个记录键盘输入的钩子,可是监听键盘输入,特定路径文本输出,并且还是实现任务栏托盘显示。
hook function for windows 7
枚举全局钩子_如何枚举系统中所有的钩子hook
线程钩子的事例代码。适合初学者。大家自己看吧。
windows CE的键盘钩子,已经过测试,sdk下测试。
钩子函数运用,结合java语言获取键盘、鼠标响应监控信息。
delphi开发的钩子测试程序,源代码中包含了各种系统钩子的使用方法。
一个简单的鼠标钩子程序 实现适时获取当前鼠标所在窗口的标题,并将其显示在一个EDITBOX中
c++钩子函数:copy hook c++调用钩子函数监视复制文件操作
Driver_hook Driver_hook Driver_hook Driver_hook
codeproject上的API HOOK相关文档整理稿