首页
社区
课程
招聘
[求助]PAE模式下的页目录表基址,页表基址探求
发表于: 2020-10-24 17:36 4158

[求助]PAE模式下的页目录表基址,页表基址探求

2020-10-24 17:36
4158

首先从XP中把ntkrnlpa.exe拽出来,PAE模式下内核文件为ntkrnlpa.exe,101012模式下为ntoskrnl.exe

 

拖入IDA定位MmIsAddressValid函数

 

通过初步分析得到两个基址:C0600000 C0000000,根据之前101012模式下的学习,猜测C0600000PDT基址,另一个为PTT基址

 

然后开始验证

 

XP中随便打开一个程序,就记事本吧

 

WINDBG查看CR3的值

1
2
3
PROCESS 89c753c0  SessionId: 0  Cid: 0148    Peb: 7ffdf000  ParentCid: 0538
    DirBase: 0aac0320  ObjectTable: e151e008  HandleCount:  44.
    Image: notepad.exe

得出CR3 = 0aac0320

 

首先验证C0600000

 

转换二进制:1100 0000 0110 0000 0000 0000 0000 0000

 

29912格式拆分:11-00 0000 011-0 0000 0000 -0000 0000 0000

 

得出四个值:3-3-0-0

 

WINDBG开始看内存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
kd> !dd 0aac0320`
# aac0320 313a5801 00000000 31366801 00000000
# aac0330 312a7801 00000000 313a4801 00000000
PDPTI为3   所以选第四个:313a4801  313a4000 + PDI*8 = 313a4018
 
kd> !dd 313a4018
#313a4018 313a4863 00000000 312a8863 00000000
得到PDE 00000000`313a4863 PS位为0,小页继续拆  313a4000 + PTI*8 = 313a4000
 
 
kd> !dd 313a4000
#313a4000 313a5863 00000000 31366863 00000000
#313a4010 312a7863 00000000 313a4863 00000000
得到PTE 00000000`313a5863   物理页:313a5000 + OFFSET = 313a5000
 
kd> !dd 313a5000
#313a5000 31544867 00000000 31520867 00000000
#313a5010 31574867 00000000 00000000 00000000
按理来说这里应该和PDT的值一样,但是明显不一样

求助各位大佬,是我IDA分析搞错了,还是拆分查内存的步骤搞错了,

 

PAE模式下的两个基址都是啥
图片描述


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

最后于 2020-10-24 17:38 被SSH山水画编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
怀疑你压根没开PAE模式,先检查下CR4吧
2020-10-24 17:43
0
雪    币: 1475
活跃值: (14652)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
3
hhkqqs 怀疑你压根没开PAE模式,先检查下CR4吧[em_1]
PAE确实开了的
2020-10-24 17:52
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
SSH山水画 PAE确实开了的
眼拙了,才发现你DirectoryTableBase没清低12位就拿来用了
2020-10-24 18:01
0
雪    币: 1475
活跃值: (14652)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
5
hhkqqs 眼拙了,才发现你DirectoryTableBase没清低12位就拿来用了[em_19]
....PAE模式下CR3在找内存的时候还要清低12位吗....我记得101212时候没清啊...
2020-10-24 18:11
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
SSH山水画 ....PAE模式下CR3在找内存的时候还要清低12位吗....我记得101212时候没清啊...
页表本来就是页对齐的啊,低12位是PCID由CR4 bit1控制
2020-10-24 18:15
0
雪    币: 1475
活跃值: (14652)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
7
hhkqqs 页表本来就是页对齐的啊,低12位是PCID由CR4 bit1控制
你是说哪一步没清,是直接dd CR3这吗:!dd 0aac0320`
2020-10-24 18:18
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
SSH山水画 你是说哪一步没清,是直接dd CR3这吗:!dd 0aac0320`
DirBase&0xFFFFF000=0xAAC0000
2020-10-24 18:20
0
雪    币: 1475
活跃值: (14652)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
9
hhkqqs DirBase&0xFFFFF000=0xAAC0000
你记错了吧...第一步查的是PDPT那张表,CR3不用清低12位的,直接DD就可以了....
2020-10-24 18:36
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
SSH山水画 你记错了吧...第一步查的是PDPT那张表,CR3不用清低12位的,直接DD就可以了....
我跟x86-64的搞混了,按理来说你步骤没错,看到的应该是C0600000的物理页
2020-10-24 18:49
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
SSH山水画 你记错了吧...第一步查的是PDPT那张表,CR3不用清低12位的,直接DD就可以了....
有可能你没attach到记事本,你图里前面的4项是虚拟地址0到0x800000的PDE,你看对比下物理页后一半的内容还差不多
2020-10-24 18:55
0
雪    币: 33
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12

好奇怪啊,你们的方法,好烦又被绕晕了

最后于 2021-11-23 17:47 被wx_罗罗_882编辑 ,原因:
2021-11-23 17:36
0
游客
登录 | 注册 方可回帖
返回
//