首页
社区
课程
招聘
[原创]x64 windows从MmPfnData中枚举进程以及真实CR3
发表于: 2023-8-18 12:41 16794

[原创]x64 windows从MmPfnData中枚举进程以及真实CR3

2023-8-18 12:41
16794

大概的思路:

当涉及到DirectoryTableBase的PTE Address时,可以通过计算得出。根据页表自映射的信息,很容易确定对应的PTE Address是PXE加上自映射页表的索引乘以8所得。

我们的目标是比较每个pfn的pte address。如果相等,那就意味着该pfn是CR3所对应的物理地址。

此外,根据前辈们的文章,可以得知MMPFN的第一项是经过加密处理的Eprocess

有此得出EPROCESS和Dirbase

完整代码:https://github.com/Rythorndoran/enum_real_dirbase/


相关引用:


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

收藏
免费 2
支持
分享
最新回复 (14)
雪    币: 889
活跃值: (4118)
能力值: ( LV6,RANK:98 )
在线值:
发帖
回帖
粉丝
2
EAC : 更新了个寂寞?
2023-8-18 14:27
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
EAC:已举办
2023-8-18 22:02
1
雪    币: 1282
活跃值: (4555)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
2023-8-19 19:20
0
雪    币: 3059
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2023-8-19 20:17
1
雪    币: 46
活跃值: (1740)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我测试了几天,获取cr3不是很准,比如process.cr3=0x3d188000,从上面的代码获取偶尔会0x3d187000或者是0x3d189000,不是很懂。
2023-8-22 13:32
0
雪    币: 3570
活跃值: (4709)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
cheating 我测试了几天,获取cr3不是很准,比如process.cr3=0x3d188000,从上面的代码获取偶尔会0x3d187000或者是0x3d189000,不是很懂。
再找个地址读下数据做个验证就行了
2023-8-23 16:36
0
雪    币: 46
活跃值: (1740)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
syser 再找个地址读下数据做个验证就行了
但是这种验证也不是很准确。
2023-8-23 21:27
0
雪    币: 3677
活跃值: (3081)
能力值: ( LV8,RANK:147 )
在线值:
发帖
回帖
粉丝
9
mark
2023-8-25 18:48
0
雪    币: 46
活跃值: (1740)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
上面我说的那个CR3出错混乱的问题解决了。
2023-8-26 12:40
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
cheating 上面我说的那个CR3出错混乱的问题解决了。
怎么解决的
2023-9-11 10:56
0
雪    币: 1825
活跃值: (5354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
hzqst EAC:已举办
举办恭事?
2023-9-16 11:50
1
雪    币: 1810
活跃值: (4020)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2023-9-17 12:11
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
enum_process_dirbase当在被映射的驱动中调用这个方法就无法获取dirbase,很难受,各项参数函数地址都是正确的,可能是MmGetPhysicalMemoryRanges()的返回出了问题,不知道能不能解决
2024-5-21 18:15
0
雪    币: 41
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
auto decrypted_eprocess = ((cur_mmpfn->flags | 0xF000000000000000) >> 0xd) | 0xFFFF000000000000;
这个是从哪个文章了解的,想拜读一下
2024-11-6 17:00
0
游客
登录 | 注册 方可回帖
返回
//