虚拟地址描述符(VAD)树是Windows操作系统中用于管理进程的虚拟地址空间的数据结构。VAD树以平衡二叉树的形式存储,记录了进程中每个内存区域的属性,如内存映射、保护等级和状态。VAD树对于内存管理、虚拟内存分配和内存分页等操作至关重要。
每个VAD节点都包含一个_VM_ADDRESS_DESCRIPTOR结构,其中包含以下关键信息:
- StartingVpn:内存区域的起始虚拟页号(VPN)。
- EndingVpn:内存区域的结束虚拟页号。
- u1.Parent:父VAD节点的指针。
- LeftChild:左子VAD节点的指针。
- RightChild:右子VAD节点的指针。
- ControlArea:关联控制区的指针,用于管理内存区域的文件映射和共享。
- Flags:描述内存区域属性的标志,如提交状态、保护等级和类型。
隐藏内存的方法之一是修改目标进程的VAD树。通过在树中删除或修改相应的节点,可以使恶意软件分析工具无法找到注入的内存区域。然而,这种方法需要深入了解Windows内核和内存管理,以及对VAD结构的操作。
以下是一般性的VAD树操作步骤,用于隐藏内存区域:
-
获取目标进程的EPROCESS结构:要操作VAD树,首先需要找到目标进程的EPROCESS结构。可以通过PsLookupProcessByProcessId等API获取EPROCESS结构。
-
获取VAD树根