学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1195

主题
楼主
发表于 2025-4-10 14:42:06 | 查看: 288| 回复: 0
引言
探讨关于MiAllocatePool申请内存的部分算法
无需任何API枚举信息
正文
下文描述的调用过程:MiAllocatePool->ExpAllocatePoolWithTagFromNode->ExAllocateHeapPool->RtlpHpLfhSlotAllocate
非分页内存下
首先让我们回顾一下VAD树

不知道有没有细心的师傅们观察过_MMVAD结构这个地址是存在一个非常有规律的内存布局
当有模块的情况下

我们仔细观察发现 它是一个极其规律的布局形式
既然存在这么一块区域,我们就可以遍历
如何遍历和查找
如何找到想要的区域起始位置?
这里微软给出了答案:
在RtlpHpLfhSlotAllocate下的

就是想要的起始位置
我们向上看发现
1
2
Base_Before = *(_QWORD *)(AffinitySlotPtr_buffer + 0x38);
SubsegmentBaseAddress = Base_Before & 0xFFFFFFFFFFFFF000ui64;

继续看AffinitySlotPtr_buffer来源
1
2
3
4
5
6
unsigned __int64 __fastcall RtlpHpLfhSlotAllocate(
        __int64 LfhContextPtr,
        __int64 BucketPtr,
        __int64 AffinitySlotPtr,
        unsigned int AlignedBlockSize,
        unsigned int AllocationFlags)

来源于第三个参数,追回到上一层
其第三个参数是一个算法过程:
1
2
3
4
5
6
*(_QWORD *)(RtlpHpLfhPerfFlags_relate
+ MaxAffinity
- (((_BYTE)MaxAffinity - 1) & 7)
+ 7
+ BucketPtr
+ 8i64 * AffinitySlotIndex)

这里有几个参数过程很麻烦 很复杂这里给各位整理之后的算法 (Windows 10 21H2 19044)
1
2
3
4
( *(ULONG64 *)((*(ULONG64 *)(0xC0+ (*(unsigned __int8 *)((*(ULONG64 *)( nt!ExPoolState + 0x3900 + 8)) + 0x378))
- (((_BYTE)(*(unsigned __int8 *)((*(ULONG64 *)( nt!ExPoolState + 0x3900 + 8)) + 0x378)) - 1) & 7)+
7+ (*((__int64 *)((*(ULONG64 *)( nt!ExPoolState + 0x3900 + 8))+ 0x340 + 8 * 0x1A)))+ 8*0)) + 0x38))
& 0xFFFFFFFFFFFFF000ui64

这样我们就精准的定位到了这块区域的起始位置,当然逆向出算法仅仅是一种提高效率的方法,还有很多暴力搜索的方法各位师傅们可以自行探索,这里暂时不作研究
有了起始地址之后,我们就可以进行内存暴力搜索,这里就比较容易
举个例子,我们要得到MMVAD结构的模块信息,只需要在这块内存中

找到这个Vad的码然后+0x10的位置就是 MMVAD Address
那么MMVAD+0x70的位置然后 &~0xf 就是EPROCESS 这里可以用作枚举进程
当然这里是不同的内存区域情况,不仅局限于VAD还有更多的信息不言而喻>>>
感谢阅读
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2025-5-1 15:30 , Processed in 0.126936 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表