6941941
驱动牛犊
驱动牛犊
  • 注册日期2007-11-11
  • 最后登录2007-11-25
  • 粉丝4
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1663回复:7

Hook ServiceDescriptorTableShadow问题请教

楼主#
更多 发布于:2007-11-22 09:07
我是一个新手,请大家帮帮我。
我想恢复原始 SHADOW表。
操作系统XP SP1,装了虚拟机,用WINDBG调试内核,成功连接以后

0: kd> dd nt!KeServiceDescriptorTableShadow
8054a180  804fefd8 00000000 0000011c 804ff44c
8054a190  bf998c40 00000000 0000029b bf9927a0
8054a1a0  00000000 00000000 00000000 00000000
8054a1b0  00000000 00000000 00000000 00000000
8054a1c0  804fefd8 00000000 0000011c 804ff44c
8054a1d0  00000000 00000000 00000000 00000000
8054a1e0  00000000 00000000 00000000 00000000
8054a1f0  00000000 00000000 00000000 00000000
0: kd> dd bf998c40
bf998c40  ???????? ???????? ???????? ????????
bf998c50  ???????? ???????? ???????? ????????
bf998c60  ???????? ???????? ???????? ????????
bf998c70  ???????? ???????? ???????? ????????
bf998c80  ???????? ???????? ???????? ????????
bf998c90  ???????? ???????? ???????? ????????
bf998ca0  ???????? ???????? ???????? ????????
bf998cb0  ???????? ???????? ???????? ????????
0: kd> dd win32k!W32pServiceTable
bf998c40  ???????? ???????? ???????? ????????
bf998c50  ???????? ???????? ???????? ????????
bf998c60  ???????? ???????? ???????? ????????
bf998c70  ???????? ???????? ???????? ????????
bf998c80  ???????? ???????? ???????? ????????
bf998c90  ???????? ???????? ???????? ????????
bf998ca0  ???????? ???????? ???????? ????????
bf998cb0  ???????? ???????? ???????? ????????

为什么win32k!W32pServiceTable里面会是这样的呢?

引用第chenting1987于2007-07-21 10:53发表的  :
我做的步骤:
进入Csrss.exe的进程空间
找到序号为549的函数地址
修改为自己函数的地址,在当时看来确实是修改了
退出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
结果一看,还是在原来的进程
请问,我的操作对吗,如果不对,应该如何操作,才能正确的看到
函数地址。
我很菜,请多指教,谢谢大家
6941941
驱动牛犊
驱动牛犊
  • 注册日期2007-11-11
  • 最后登录2007-11-25
  • 粉丝4
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-23 02:35
请各位帮帮我。
wdnfa
驱动牛犊
驱动牛犊
  • 注册日期2007-10-16
  • 最后登录2008-12-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望29点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-24 19:15
一个很土的方法,先启动一个调用GUI相关的进程,然后切到改进程,这样就可以看到shadow表导出的函数了
驱网无线,快乐无限
wdnfa
驱动牛犊
驱动牛犊
  • 注册日期2007-10-16
  • 最后登录2008-12-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望29点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-24 19:36
突然想起以前的一个误区了,牛人们都说win32k是被换出内存的,同时操作系统教程告诉我换出的东西是要检查和磁盘上的数据是否一致,不一致就要写回磁盘文件的。不过由于当时没有把数据和代码这两个东西分清楚,所以我当时就想这个win32k导出的表和win32k磁盘上文件中的表不一样(我们HOOK了嘛),这下不就完了,win32k磁盘文件都要被修改了!!其实win32k中根本就没有这张表,换出内存的只是OS动态创建的表而已,以前真是   ....
不过到现在还是不明白的是,为什么win32k要被换出内存,现在的计算机上都跑的是GUI程序,每调一次就吧win32k换进换出,系统不怕开销啊,望达人来解惑下
驱网无线,快乐无限
6941941
驱动牛犊
驱动牛犊
  • 注册日期2007-11-11
  • 最后登录2007-11-25
  • 粉丝4
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-25 11:07
引用第2楼wdnfa于2007-11-24 19:15发表的  :
一个很土的方法,先启动一个调用GUI相关的进程,然后切到改进程,这样就可以看到shadow表导出的函数了

请问用WINDBG虚拟机调试,如何可以切换到指定进程?

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
结果一看,还是在原来的进程
应该如何做,请给我一个列子,谢谢
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
5楼#
发布于:2007-11-25 15:49
Win32k的表是又是换出而已,hook时如果换出就失败了,可以通过mdl把他放入的说~

另外说一下:windbg切换进程貌似有时会切换失败~~
建议local kernel测试一下
没有战争就没有进步 X3工作组 为您提供最好的军火
wdnfa
驱动牛犊
驱动牛犊
  • 注册日期2007-10-16
  • 最后登录2008-12-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望29点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-11-25 23:05
引用第5楼killvxk于2007-11-25 15:49发表的  :
Win32k的表是又是换出而已,hook时如果换出就失败了,可以通过mdl把他放入的说~

另外说一下:windbg切换进程貌似有时会切换失败~~
建议local kernel测试一下


呵呵,让我蒙了一下,“是又是换出而已”--我还以为又是黑语来了,原来是“是有时换出而已”,不过奇怪的是,好像这个表通常都是被换出去了。
不过KILLVXK说的MDL方法我还是第一次听说,得把它弄明白。
驱网无线,快乐无限
wdnfa
驱动牛犊
驱动牛犊
  • 注册日期2007-10-16
  • 最后登录2008-12-09
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望29点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-11-25 23:07
自己下断点断到GUI进程空间,可以看到表了哦
原来切换进程的命令是这个,学习了,英文帮助文档看起来真头大....无缘CET6,泪奔
驱网无线,快乐无限
游客

返回顶部