天行健 发表于 2024-12-23 20:27:16

x64 windows从MmPfnData中枚举进程以及真实CR3

大概的思路:
当涉及到DirectoryTableBase的PTE Address时,可以通过计算得出。根据页表自映射的信息,很容易确定对应的PTE Address是PXE加上自映射页表的索引乘以8所得。
1
static const uint64_t cr3_ptebase = self_mapidx * 8 + pxe_base;


我们的目标是比较每个pfn的pte address。如果相等,那就意味着该pfn是CR3所对应的物理地址。
1
if (cur_mmpfn->pte_address != cr3_ptebase) continue;


此外,根据前辈们的文章,可以得知MMPFN的第一项是经过加密处理的Eprocess
1
auto decrypted_eprocess = ((cur_mmpfn->flags | 0xF000000000000000) >> 0xd) | 0xFFFF000000000000;


有此得出EPROCESS和Dirbase完整代码:https://github.com/Rythorndoran/enum_real_dirbase/

admin 发表于 2024-12-24 20:08:24

{:-_-jie-_-:}

admin 发表于 2024-12-24 22:29:10

{:-_-pijiu-_-:}
页: [1]
查看完整版本: x64 windows从MmPfnData中枚举进程以及真实CR3