-
-
[原创]win10 1909逆向(win10内存分区浅析)
-
发表于:
2021-2-24 22:29
8312
-
[原创]win10 1909逆向(win10内存分区浅析)
Windows10的新功能内存分区,这两天感兴趣想了解一下,加上逆向360VT已接近尾声,所以今天抽出一点时间来学习,网上未找到相关资料,导致下面的分析仅是个人观点,用来抛转引玉,如有错误,请多指教,逆的时间很短,所以请当入门来了解。
内存分区是物理页的集合,这些物理页基本上独立于其他分区中的物理页进行管理。
每个内存分区都抽象为一个分区对象,可以通过句柄进行访问。一个内存分区是内置的。
在对象命名空间中,它是KernelObjects\MemoryPartition0:这是系统内存分区。
在32位Windows中,这个系统分区是唯一的内存分区。64位下可以自由创建自已的内存分区。
1.在PspInitPhase0 创建内存分区对象类型PsPartitionType。
2。在PspInitializeSystemPartitionPhase0创建系统分区:全局变量PspSystemPartition,结构体:_EPARTITION
其中会创建三个重要的结构(名字是根据我的想法随意写的):
MmPartition:基本内存分区
CcPartition : 文件缓存分区
ExPartition : Executive分区
1。EPARTITION.MmPartition(基本内存分区)对应结构体_MI_PARTITION,全局变量:MiSystemPartition与之对应。
创建的API:MmCreatePartition(_EPARTITION *PartitionObject, char ID)//MiInitializePartition(_MI_PARTITION *MmPartition, int16 PartitionId)等
通过逆向得知,MmPartition分区是可以有多个存在的,他们存在一个数组里,通过Index来选择,可以通过Eprocess->Vm->Instance->PartitionId来当索引 ,也可以通过FileObject,也可以通过缓存等等条件来进行选择,总共有416个函数都调用了这个数组来进行选择,如果你想玩点骚操作,这里可能是你们关注的重点。
找到这个数组最简单的办法是找:MiPartitionIdToPointer这个函数
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)