首页
社区
课程
招聘
[求助]关于hook ssdt shadow,请问一句话
发表于: 2008-2-20 16:49 6385

[求助]关于hook ssdt shadow,请问一句话

2008-2-20 16:49
6385
堕落天才在他的大作中提到:
内核中有两个系统服务描述符表,一个是KeServiceDescriptorTable(由ntoskrnl.exe导出),一个是KeServieDescriptorTableShadow(没有导出)。两者的区别是,KeServiceDescriptorTable仅有ntoskrnel一项,KeServieDescriptorTableShadow包含了ntoskrnel以及win32k。一般的Native API的服务地址由KeServiceDescriptorTable分派,gdi.dll/user.dll的内核API调用服务地址由KeServieDescriptorTableShadow分派。还有要清楚一点的是win32k.sys只有在GUI线程中才加载,一般情况下是不加载的,所以要Hook KeServieDescriptorTableShadow的话,一般是用一个GUI程序通过IoControlCode来触发(想当初不明白这点,蓝屏死机了N次都想不明白是怎么回事)。

蓝屏2此后想到了这句话。那个start driver之后,鼠标保持一秒不动的感觉真是糟透了!!!

请问红色部分怎样实现?

随便怎么回答都行,
简要步骤,谢谢,我会去google具体东西。
链接,感谢,我直接去看啦~
代码,我靠,

提前感谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写两个模块,一个sys一个exe,exe是个有界面的程序。在exe里用DeviceIoControl与sys通讯。DeviceIoControl可以查MSDN。
2008-3-11 19:17
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
void *get_sdt_shadow()
{
  void **addr, *x;
  addr = (void **)KeAddSystemServiceTable;
  for (i = 0; i < 100; i++)
  {
    x = *addr;
    addr = (void **)((unsigned long)addr+1);
    if ( MmIsAddressValid(x) &&
         x != KeServiceDescriptorTable &&
         RtlCompareMemory(x, KeServiceDescriptorTable, 0x10) == 0x10 )
    {
      return x;
    }
  }
  return 0;
}
2008-3-11 19:36
0
游客
登录 | 注册 方可回帖
返回
//