zxl200406
驱动牛犊
驱动牛犊
  • 注册日期2010-11-17
  • 最后登录2010-11-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1513回复:1

SSDT分配表(的疑问,请大虾们指正)

楼主#
更多 发布于:2010-11-17 10:31
关于概念的理解,我不知道。我理解是否正确,想大虾们,指正一下,我理解有错的一定多多指出,概念迷糊的地方也详加解释一下。
谢谢大虾


我理解的是:
(我不懂汇编)他们在汇编模式下调试,mov eax,7ah他们说这个数值称为系统的服务号,因为我不懂汇编,我理解的系统服务号,
#define SYSTEMSERVICE(_function)  KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]
是不是就是(PUCHAR)_function+1地址值中的内容?
而ServiceTableBase()函数返回的是内核模式下    如ZwQueryDirectoryFile 调用的的真实地址?

如果理解有错,请大虾们指正.

小弟初学驱动设计,由于小弟比较喜欢安全方面的东西,看了一个,网上隐藏文件的RootKit

他最核心的就是
OldZwQueryDirectoryFile = (ZWQUERYDIRECTORYFILE)SYSTEMSERVICE(ZwQueryDirectoryFile);//把真正ZwQueryDirectoryFile函数地址赋值给一个函数指针保存起来
(ZWQUERYDIRECTORYFILE)SYSTEMSERVICE(ZwQueryDirectoryFile)=NewZwQueryDirectoryFile;//把新的函数指针的值,赋给SSDT关于ZwQueryDirectoryFile函数的实际调用地址

问题三:

作者写的用c来写的(用DDK是可以编译过去的。)
我改成c++来编译
(ZWQUERYDIRECTORYFILE)SYSTEMSERVICE(ZwQueryDirectoryFile)=NewZwQueryDirectoryFile;//这句编译不过去
我改成memcpy((ZWQUERYDIRECTORYFILE)SYSTEMSERVICE(ZwQueryDirectoryFile),NewZwQueryDirectoryFile,32);//编译是过去了,运行Windows给了我蓝脸

如何解决.
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
沙发#
发布于:2010-11-18 10:22
用户被禁言,该主题自动屏蔽!
游客

返回顶部