-
-
[原创]无需解密页帧中的进程结构来获取真实CR3
-
发表于:
2025-12-12 21:50
1397
-
EAX,ACX等内核级AC都陆续上了CR3的加密,即想办法接管内核异常并将_KPROCESS.DirectoryTableBase的值写份错的,然后在附加等一切需要访问_KPROCESS.DirectoryTableBase的操作触发异常时,在接管的内核异常回调中修复DirectoryTableBase的值
而作为内核"安全"开发者,我们需要来获取进程真实的CR3来读取进程数据检查安不安全~
所以,想办法解密或获取真实CR3是非常有必要的。
市场上大多数在售的非法驱动采用的都是 学技术打豆豆 大佬的方法:
通过CR3的页帧中ListEntry.Flink会指向被加密的进程K/EPROCESS结构指针这个原理,结合遍历MmPfnDataBase来不断比对页帧的ListEntry.Flink解密后是否为需要找的进程K/EPROCESS结构指针,从而获取到真实的CR3
但是这个方法有个缺点:
即 在Win10/11部分版本(经测Win11 24H2以及群友反馈部分高版本Win10/11)中,对应的加密算法(MiSetPageTablePfnBuddy函数中可见)与其他版本不同,需要额外处理,适配起来很麻烦
(下图为除特殊版本外,默认的加密K/EPROCESS方法)

那么有没有什么办法可以不解密页帧中ListEntry.Flink,就可以得出当前页帧是不是我们需要的CR3呢?有的,我在老外开源的EFI-APSPatchAuthority项目(见附件)中找到了如何通过进程的任意线性地址,逆推出CR3!
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 6天前
被Hook你的心跳编辑
,原因: 案例有BUG 修改后修复BUG