chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
阅读:4311回复:28

怎么Hook ServiceDescriptorTableShadow中的函数?

楼主#
更多 发布于:2007-07-17 20:08
首先我找到了KeServiceDescriptorTableShadow的地址
然后根据它找到了win32k(由win32k.sys导出的)的表的地址,如0xbf997600
但我一访问这个地址就蓝屏了,WHY?
bladellz
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望121点
  • 贡献值0点
  • 好评度120点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-18 11:53
ct...
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-07-18 13:03
WIN32K所在内存通常是被换出的~
驱动开发者 呵呵
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-18 14:38
那我怎么hook它呢?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2007-07-18 15:27
你在什么irql级别访问的,passive level访问不应该有问题
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-07-18 18:07
我是在Passive Level啊
我用MmIsAddressValid检查0xbf997600,返回FALSE
而且我用Windbg直接查看该地址的内容,都无法访问。怎么办呢?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2007-07-18 20:40
你找的KeServiceDescriptorTableShadow对吗?如果对,不应该有问题,用windbg看一下,你找的和KeServiceDescriptorTableShadow显示的一样吗?
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
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
zzzevazzz
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2020-06-29
  • 粉丝0
  • 关注0
  • 积分1008分
  • 威望242点
  • 贡献值0点
  • 好评度170点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2007-07-19 11:30
切换进程空间先。
[b][url]http://hi.baidu.com/zzzevazzz[/url][/b]
packze
驱动牛犊
驱动牛犊
  • 注册日期2005-09-19
  • 最后登录2008-01-19
  • 粉丝0
  • 关注0
  • 积分151分
  • 威望17点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-07-19 12:02
看看卡巴的驱动知道可以

KeStackAttachProcess((PKPROCESS)EProcess, &ApcState);

EProcess可以是Csrss.exe的    

还有最好处理一下ServiceDescriptorTableShadow
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-07-20 14:22
我按照各位的指点,进入了Csrss.exe的进程空间,这个问题解决了。但我遇到了另一个问题,我想像卡巴一样把NtSetWindowsHookEx给hook掉,我就直接把549那个序号的地址改了。但是我用snipesword这样的工具查看时,好像我并没有hook成功。因为我用这个工具看卡巴是hook成功了的,这个是为什么呢?
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-07-20 14:24
还有packze 大哥说的最好处理一下ServiceDescriptorTableShadow是什么意思?
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-07-21 10:22
怎么没有人解答啦,自己顶一个,期待答案哦
我怎么hook不成功啊?
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-07-21 10:53
我做的步骤:
进入Csrss.exe的进程空间
找到序号为549的函数地址
修改为自己函数的地址,在当时看来确实是修改了
退出Csrss.exe的进程空间
我用snipesword查看,并没有hook成功
难道要做一些其他的事??
期待解答啊
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-07-21 15:16
问题解决了,结贴了哈。
我上面的那个问题是我定位549号函数地址时出了错误,才没有HOOK到!
感谢 bladellz  zhaock WQXNETQIQI packze zzzevazzz 的细心解答!!!!
6941941
驱动牛犊
驱动牛犊
  • 注册日期2007-11-11
  • 最后登录2007-11-25
  • 粉丝4
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
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导出的地址。
我很菜,请多指教,谢谢大家
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-11-22 12:55
引用第10楼chenting1987于2007-07-20 14:22发表的  :
我按照各位的指点,进入了Csrss.exe的进程空间,这个问题解决了。但我遇到了另一个问题,我想像卡巴一样把NtSetWindowsHookEx给hook掉,我就直接把549那个序号的地址改了。但是我用snipesword这样的工具查看时,好像我并没有hook成功。因为我用这个工具看卡巴是hook成功了的,这个是为什么呢?


楼主能否把你的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;
}
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
17楼#
发布于:2007-11-22 13:47
用KiSystemService Hook多方便~~
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-11-22 14:22
现在已经全部改用Ki*拦截了,确实很方便,不用修改??dt表,处理比较优先,恢复比较容易。无论是shadow还是非shadow都能从容处理。
大概看了一下卡巴斯基的klif.sys驱动程序,发现
KeAttachProcess((PKPROCESS)EProcess, &ApcState);

Csrss.exe好像是与hook过程相关,在替换函数实现中没有见到KeAttachProcess调用。是不是在newNtUserSetWindowsHook中不需要调用KeAttachProcess切换进程上下文,即可弹框?那么如何让询问框关闭返回newNtUserSetWindowsHook后,内存不被切换出去啊?知道的,帮帮讲讲,谢谢~~
wdnfa
驱动牛犊
驱动牛犊
  • 注册日期2007-10-16
  • 最后登录2008-12-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望29点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-11-24 19:24
引用第17楼killvxk于2007-11-22 13:47发表的  :
用KiSystemService Hook多方便~~

这个函数调用太频繁了吧,不过够狠,VXK和KILLVXK是啥关系的索
驱网无线,快乐无限
上一页
游客

返回顶部