首页
社区
课程
招聘
[原创]简单利用微软MiAllocatePool申请内存算法-举例找出MMVAD结构
发表于: 2025-4-9 19:58 4759

[原创]简单利用微软MiAllocatePool申请内存算法-举例找出MMVAD结构

2025-4-9 19:58
4759

探讨关于MiAllocatePool申请内存的部分算法
无需任何API枚举信息

下文描述的调用过程:MiAllocatePool->ExpAllocatePoolWithTagFromNode->ExAllocateHeapPool->RtlpHpLfhSlotAllocate

非分页内存下
首先让我们回顾一下VAD树
图片描述
不知道有没有细心的师傅们观察过_MMVAD结构这个地址是存在一个非常有规律的内存布局
当有模块的情况下
图片描述
我们仔细观察发现 它是一个极其规律的布局形式
既然存在这么一块区域,我们就可以遍历

如何找到想要的区域起始位置?
这里微软给出了答案:
在RtlpHpLfhSlotAllocate下的
图片描述
就是想要的起始位置
我们向上看发现

继续看AffinitySlotPtr_buffer来源

来源于第三个参数,追回到上一层
其第三个参数是一个算法过程:

这里有几个参数过程很麻烦 很复杂这里给各位整理之后的算法 (Windows 10 21H2 19044)

这样我们就精准的定位到了这块区域的起始位置,当然逆向出算法仅仅是一种提高效率的方法,还有很多暴力搜索的方法各位师傅们可以自行探索,这里暂时不作研究
有了起始地址之后,我们就可以进行内存暴力搜索,这里就比较容易
举个例子,我们要得到MMVAD结构的模块信息,只需要在这块内存中
图片描述
找到这个Vad的码然后+0x10的位置就是 MMVAD Address
那么MMVAD+0x70的位置然后 &~0xf 就是EPROCESS 这里可以用作枚举进程
当然这里是不同的内存区域情况,不仅局限于VAD还有更多的信息不言而喻>>>

Base_Before = *(_QWORD *)(AffinitySlotPtr_buffer + 0x38);
SubsegmentBaseAddress = Base_Before & 0xFFFFFFFFFFFFF000ui64;
Base_Before = *(_QWORD *)(AffinitySlotPtr_buffer + 0x38);
SubsegmentBaseAddress = Base_Before & 0xFFFFFFFFFFFFF000ui64;
unsigned __int64 __fastcall RtlpHpLfhSlotAllocate(
        __int64 LfhContextPtr,
        __int64 BucketPtr,
        __int64 AffinitySlotPtr,
        unsigned int AlignedBlockSize,
        unsigned int AllocationFlags)
unsigned __int64 __fastcall RtlpHpLfhSlotAllocate(
        __int64 LfhContextPtr,
        __int64 BucketPtr,
        __int64 AffinitySlotPtr,
        unsigned int AlignedBlockSize,

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2025-4-9 20:00 被S极客编辑 ,原因:
收藏
免费 38
支持
分享
最新回复 (20)
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
学习学习
2025-4-10 09:08
0
雪    币: 3187
活跃值: (3702)
能力值: ( LV8,RANK:147 )
在线值:
发帖
回帖
粉丝
3
mark
2025-4-10 14:41
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
学习学习
2025-4-10 20:09
0
雪    币: 6
活跃值: (348)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
学习学习
2025-4-11 22:06
0
雪    币: 131
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
学习学习
2025-4-13 10:40
0
雪    币: 193
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
666
2025-4-13 11:26
0
雪    币: 100
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
11
2025-4-15 15:32
0
雪    币: 289
活跃值: (1521)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习。
2025-4-15 19:48
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
study
2025-4-15 21:02
0
雪    币: 2043
活跃值: (350)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
wwwwwwwww
2025-4-17 11:25
0
雪    币: 0
活跃值: (307)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习学习
2025-4-25 01:49
0
雪    币: 188
活跃值: (1151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
Thanks for share!
2025-4-25 09:31
0
雪    币: 3464
活跃值: (4924)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

你的帖子非常有用,感谢分享!
2025-4-25 10:22
0
雪    币: 200
活跃值: (65)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习。
2025-5-18 04:41
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
1
2025-5-18 04:56
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
。。。
2025-5-23 07:14
0
雪    币: 3464
活跃值: (4924)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
非常支持你的观点!
2025-5-23 07:39
0
雪    币: 784
活跃值: (1648)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
1111111111
2025-5-28 10:18
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
看看!
2025-5-29 15:20
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
学习
2天前
0
游客
登录 | 注册 方可回帖
返回