首页
社区
课程
招聘
刚接触ssdt有几个小问题还望大伙帮忙
发表于: 2010-2-22 12:14 3223

刚接触ssdt有几个小问题还望大伙帮忙

2010-2-22 12:14
3223
我用depends打开ntoskrnl.exe用找到了它的输出表项KeServiceDiscriptorTable,根据它列出的相对地址8b520,查看它的节表,该相对地址在节区 .data     | 00018B28   | 0007C000   | 00007C00   | 00079400   | C8000040 ,那么它对应的RawAddress应该是 
79400+ (8b520- 7c000) = 88920
直接用winhex打开找到88920 ,
00088920h: 35 78 1C 49  00 89 75 EC  0F 84 13 5C  04 00 EB 42 ;
然后对着ServiceDescriptorTableEntry_t进行比对,发觉不太对劲錒,0F 84 13 5C应该是对应的服务函数个数,这也太多了,不知道哪里搞错了,还望高手指点一二錒.
typedef struct ServiceDescriptorEntry {
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase; //Used only in checked build
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 95
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以明显的看出 是你的地址计算错了 因为ntoskrnl.exe位于内存的核心区域 内存地址一定是高于0x80000000的 不可能是这么小的地址  Winhex这个软件好像也看不好核心区域的内存

97480+ (8b520- 7c000) = 88920  这个计算我没看懂 说实话 - -

我查了PE格式的手册 好像edata的表中的值直接是RVA

我用的是Peditor这个软件 直接就可以看到 KeServiceDiscriptorTable的RVA地址 也就是相对于这个ntoskrnl在内存基址的相对偏移地址

然后或者用Windbg内核调试的u nt命令 或者用冰刃的内核模块查看 都可以看到 ntoskrnl在内存中的基址

我的电脑上市0x008D8000 RAV是 0x83120
Base+RAV = 0x80556120

在Windbg上可以验证计算结果  可以看到 大小的值是合理的
lkd> dd KeServiceDescriptorTable
8055b120  804e36b8 00000000 0000011c 80513f38
8055b130  00000000 00000000 00000000 00000000
8055b140  00000000 00000000 00000000 00000000

查看SSDL表
lkd> dd 804e36b8
804e36b8  8058163c 80572f62 8058cc0e 8058b183

以及相应的函数
lkd> u 8058163c
nt!NtAcceptConnectPort:
8058163c 689c000000      push    9Ch
2010-2-23 11:45
0
雪    币: 75
活跃值: (803)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
多谢楼上兄台热心帮助
我直接打开ntoskrnl.exe磁盘文件那么来找原始的ssdt表是不对的
2010-2-23 22:36
0
游客
登录 | 注册 方可回帖
返回
//