阅读:4311回复:28
怎么Hook ServiceDescriptorTableShadow中的函数?
首先我找到了KeServiceDescriptorTableShadow的地址
然后根据它找到了win32k(由win32k.sys导出的)的表的地址,如0xbf997600 但我一访问这个地址就蓝屏了,WHY? |
|
沙发#
发布于:2007-07-18 11:53
ct...
|
|
板凳#
发布于:2007-07-18 13:03
WIN32K所在内存通常是被换出的~
|
|
|
地板#
发布于:2007-07-18 14:38
那我怎么hook它呢?
|
|
地下室#
发布于:2007-07-18 15:27
你在什么irql级别访问的,passive level访问不应该有问题
|
|
5楼#
发布于:2007-07-18 18:07
我是在Passive Level啊
我用MmIsAddressValid检查0xbf997600,返回FALSE 而且我用Windbg直接查看该地址的内容,都无法访问。怎么办呢? |
|
6楼#
发布于:2007-07-18 20:40
你找的KeServiceDescriptorTableShadow对吗?如果对,不应该有问题,用windbg看一下,你找的和KeServiceDescriptorTableShadow显示的一样吗?
|
|
7楼#
发布于:2007-07-19 10:14
是一致的啊,下面是我的windbg的结果:
0: kd> dd keservicedescriptortableshadow 8055c6a0 80504734 00000000 0000011c 80504ba8 8055c6b0 bf997600 00000000 0000029b bf998310 8055c6c0 00000000 00000000 00000000 00000000 8055c6d0 00000000 00000000 00000000 00000000 8055c6e0 80504734 00000000 0000011c 80504ba8 8055c6f0 00000000 00000000 00000000 00000000 那个bf997600就应该是win32.sys导出的表的地址吧,我用windbg看这个表的内容: 0: kd> dd bf997600 bf997600 ???????? ???????? ???????? ???????? bf997610 ???????? ???????? ???????? ???????? bf997620 ???????? ???????? ???????? ???????? bf997630 ???????? ???????? ???????? ???????? bf997640 ???????? ???????? ???????? ???????? bf997650 ???????? ???????? ???????? ???????? bf997660 ???????? ???????? ???????? ???????? bf997670 ???????? ???????? ???????? ???????? 无法访问哦? 大概是page fault! 有人有这方面的源码没有啊 8055c700 00000000 00000000 00000000 00000000 8055c710 00000000 00000000 00000000 00000000 |
|
8楼#
发布于:2007-07-19 11:30
切换进程空间先。
|
|
|
9楼#
发布于:2007-07-19 12:02
看看卡巴的驱动知道可以
KeStackAttachProcess((PKPROCESS)EProcess, &ApcState); EProcess可以是Csrss.exe的 还有最好处理一下ServiceDescriptorTableShadow |
|
10楼#
发布于:2007-07-20 14:22
我按照各位的指点,进入了Csrss.exe的进程空间,这个问题解决了。但我遇到了另一个问题,我想像卡巴一样把NtSetWindowsHookEx给hook掉,我就直接把549那个序号的地址改了。但是我用snipesword这样的工具查看时,好像我并没有hook成功。因为我用这个工具看卡巴是hook成功了的,这个是为什么呢?
|
|
11楼#
发布于:2007-07-20 14:24
还有packze 大哥说的最好处理一下ServiceDescriptorTableShadow是什么意思?
|
|
12楼#
发布于:2007-07-21 10:22
怎么没有人解答啦,自己顶一个,期待答案哦
我怎么hook不成功啊? |
|
13楼#
发布于:2007-07-21 10:53
我做的步骤:
进入Csrss.exe的进程空间 找到序号为549的函数地址 修改为自己函数的地址,在当时看来确实是修改了 退出Csrss.exe的进程空间 我用snipesword查看,并没有hook成功 难道要做一些其他的事?? 期待解答啊 |
|
14楼#
发布于:2007-07-21 15:16
问题解决了,结贴了哈。
我上面的那个问题是我定位549号函数地址时出了错误,才没有HOOK到! 感谢 bladellz zhaock WQXNETQIQI packze zzzevazzz 的细心解答!!!! |
|
15楼#
发布于:2007-11-22 09:21
请教楼主,是如何成功的
我仔细看了,这个帖子,楼主说,切换到Csrss.exe进程就可以,请帮我看看我的做法为什么不行。 -------------------------------------------------------------------------------------- 我在本地启动WINDBG,然后加载Csrss.exe进程,结果就死机。 -------------------------------------------------------------------------------------- 换了个方法,用虚拟机,连接上以后 0: kd> .process Implicit process is now 80549c00 然后 0: kd> !process 0 0 **** NT ACTIVE PROCESS DUMP **** PROCESS 81ef0280 SessionId: 0 Cid: 0254 Peb: 7ffdf000 ParentCid: 0214 DirBase: 06fee000 ObjectTable: e1386cf8 HandleCount: 312. Image: CSRSS.EXE 然后 0: kd> .process 81ef0280 Implicit process is now 81ef0280 0: kd> .process Implicit process is now 80549c00 结果一看,还是在原来的进程 请问,我的操作对吗,如果不对,应该如何操作,才能正确的看到 win32.sys导出的地址。 我很菜,请多指教,谢谢大家 |
|
16楼#
发布于:2007-11-22 12:55
引用第10楼chenting1987于2007-07-20 14:22发表的 : 楼主能否把你的NewNtSetWindowsHookEx函数实现贴出来啊?就直接把549那个序号的地址改了是什么意思? NtUserSetWindowsHookEx 在 2000 下服务号 1212h, XP 下 1225h, 2003下是0x1221,VISTA 是0x123D。 和549有什么关系?以前也曾在驱动中拦截过NtSetWindowsHookEx函数,如果直接放行或者拒绝都没有问题,可是如果要弹出窗口让用户选择,返回后就会直接崩掉。我也知道是因为内存已经被置换出去,变得不可访问。也想过使用下面的代码,但没有考虑过切换到csrss.exe 上下文环境。 killvxk巨牛提到过这是我处理方法不对才导致,不过killvxk没有透漏过这方面的细节。所以这个方案把暂时搁置起来。不过我可以参考一下卡巴斯基的驱动程序,也许会有所收获。 PEPROCESS selectedprocess; KAPC_STATE apc_state; RtlZeroMemory(&apc_state,sizeof(apc_state)); KeStackAttachProcess((PVOID)selectedprocess,&apc_state); //local process is much more fun!!!! __try { } __finally { KeUnstackDetachProcess(&apc_state); } } __except(1) { ntStatus=STATUS_UNSUCCESSFUL; break; } |
|
17楼#
发布于:2007-11-22 13:47
用KiSystemService Hook多方便~~
|
|
|
18楼#
发布于:2007-11-22 14:22
现在已经全部改用Ki*拦截了,确实很方便,不用修改??dt表,处理比较优先,恢复比较容易。无论是shadow还是非shadow都能从容处理。
大概看了一下卡巴斯基的klif.sys驱动程序,发现 KeAttachProcess((PKPROCESS)EProcess, &ApcState); Csrss.exe好像是与hook过程相关,在替换函数实现中没有见到KeAttachProcess调用。是不是在newNtUserSetWindowsHook中不需要调用KeAttachProcess切换进程上下文,即可弹框?那么如何让询问框关闭返回newNtUserSetWindowsHook后,内存不被切换出去啊?知道的,帮帮讲讲,谢谢~~ |
|
19楼#
发布于:2007-11-24 19:24
引用第17楼killvxk于2007-11-22 13:47发表的 : 这个函数调用太频繁了吧,不过够狠,VXK和KILLVXK是啥关系的索 |
|
|
上一页
下一页