在 Windows 上,什么时候 PTE 是 VAD 原型 PTE(地址为 0xFFFFFFFF0000)而不是原型指针 PTE?

逆向工程 视窗 核心
2021-06-26 02:25:33

我已经查看了有关此 PTE 类型的多个来源,包括 Windows 内部结构和以下内容:

http://blog.rekall-forensic.com/2014/10/windows-virtual-address-translation-and.html https://thalium.github.io/blog/posts/windows-full-memory-introspection-with -icebox/ https://cyberforensicator.com/wp-content/uploads/2017/08/Scanning-memory-with-Yara.pdf https://www.sciencedirect.com/science/article/pii/S1742287619301574

他们都没有解释 PTE 何时实际上是 VAD 原型格式。

看到在为图像创建部分对象时创建了 PPTE,而对于数据文件,在映射视图(即创建 VAD 条目时)[1]时创建了 PPTE ,我看不到VAD 分配中的 PTE 永远无法直接指向原型 PTE。

如果在映射视图后没有创建 PPTE,那么成为 VAD 类型是有意义的,因为没有可指向的 PPTE 虚拟地址,但事实并非如此。从现在开始,总有一个 PPTE 虚拟地址可以指向。PPTE 本身将指向一个子节对象(_MMPTE_SUBSECTION格式),如果它是文件支持的而不是在 RAM 中,并且指向一个页面文件位置,如果它是页面文件支持的而不是在 RAM 中。

我做了一些进一步的调查并注意到 VAD 原型 PTE 都在映射文件上,并且映射图像具有常规的原型指针 PTE(这很奇怪,因为在数据的情况下,当您在 VAD 中映射视图时,PPTE 可用,并且当截面对象是在图像的情况下创建的,这是在 VAD 中的视图映射之前)。我还注意到一些奇怪的事情是,当 CoW PTE 不指向文件中的页面时,它们是空白的,而不是指向 PPTE。它们需要在读取时和任何写入发生之前指向文件中的页面。我也希望得到答复。

我看到过为数据文件保留的空间多于文件大小的情况——在 VMMap 上,它显示已提交 16KiB 和保留 512KiB。提交的 PTE 是 VAD 原型,保留的 PTE 是空白的(未知 PTE)

我之前在 SO 上问过这个问题,但显然没有人回答,所以我将其移至正确的论坛。在有人告诉我我应该在提问之前对其进行调试之前,这个问题将是搜索“VAD 原型 PTE”和“0xFFFFFFFF0000”等的第 1 个问题,当这些来源没有详细说明时,人们会查找它。没有关于用人类语言编写的详细信息的谷歌搜索信息,我知道我花了好几个小时进行高级和逐字搜索,这是人们了解的基本信息。

0个回答
没有发现任何回复~