首页
社区
课程
招聘
vista下关于如何动态获取KPCR的问题
发表于: 2009-9-22 17:10 6907

vista下关于如何动态获取KPCR的问题

2009-9-22 17:10
6907
在xp下,好像KPCR的内核地址始终都是0xffdff000,但是在vista下,通过windbg的|pcr 0命令观察,好像每台机器都不同。通过《windows内核情景分析》这本书,得知KPCR是通过FS寄存器的选择码查找GDT表确定的。我通过|pcr 0命令或者r gdtr能够定位到GDT表,但应用什么命令那个能够转储出GDT表的结构?

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费
支持
分享
最新回复 (10)
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
或者关于GDT表的结构谁有啊?我在网上搜了一下好像没有找到关于这个表的结构,《Rootkit-windows内核防护》一书中有一副图片,是softice转储出的GDT的结构,windbg有无此类似命令?或者有无dt xx可以现实出结构的?
2009-9-22 17:34
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
这个问题我也想知道,vista下似乎很难不依靠fs寄存器直接获取kpcr,这样增加了很多麻烦。
也许user share data是一个入口?
2009-9-22 18:56
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Xp下0xffdff000是单处理器的情况,Vista没留意
dg 命令能查看选择子信息
结构是_KGDTENTRY
2009-9-22 18:57
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
好象只能用FS吧  要不就得要符号了
2009-9-22 19:31
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
6
xp下即使多核,第一个核心的kpcr也会是在ffdff000

vista找kpcr除了从krnlbase定位symbol然后找InitializePcr,或者所有内存爆搜gdt&kdversionblock外,还没想到什么比较好的方法
2009-9-22 21:20
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
sgdt
然后找fs的项 应该能能找到本CPU的PCR吧
2009-9-22 21:38
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
8
若没法再目标机器上执行指令,也没有存储的寄存器信息,就麻烦了~当然爆搜是个方法
2009-9-22 21:41
0
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
程序如何根据选择子FS计算出起始地址呢?
2009-9-23 12:18
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
10
FS:00000000h 即为kpcr
2009-9-23 16:07
0
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
FS中的是KPCR对应的段选择子,一般的FS值好像都是0x30,对应的KPCR是GDT中第6项的起始地址,但我目前我不知道如何根据FS及GDTR寄存器中的值计算出第六项的基址,毛德操的《windows内核情景分析》对这里写的也比较的含糊
2009-9-23 21:10
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册