首页
社区
课程
招聘
[原创]分享简单的"写时复制 Copy-on-write"机制利用
发表于: 2025-1-22 20:56 7644

[原创]分享简单的"写时复制 Copy-on-write"机制利用

2025-1-22 20:56
7644

写时复制 (Copy-on-Write, COW):一种高效的资源共享策略

写时复制 (Copy-on-Write, COW),有时也称为隐式共享 (implicit sharing),是一种延迟资源复制的技术。其核心思想在于:在创建资源副本时,并不立即进行实际的复制,而是让新副本与原始副本共享相同的底层资源。只有当其中一个副本尝试修改共享资源时,才会触发真正的复制操作。

这种策略的核心优势在于,它能够显著减少创建副本时的开销,并更有效地利用系统资源。然而,这种优化也带来了一定的代价,即在资源修改时会引入少量的额外开销。

这种机制在Windows中尤其常见
众所周知每个进程存放的VAD树保存了各种私有内存,映射内存,模块等
以Windows 10 21H2 版本为例子

这个链表把所有的有这个模块的VAD串起来了,什么意思呢?
比如explorer.exe进程有Ntdll.dll模块,kanxue.exe也有这个模块,那么就可以拿到explorer.exe的这个链表遍历链表,找到kanxue.exe的EPROCESS
注意遍历到的链表是 "MMVAD + ViewLinks"的位置所以要找到下一个对象:"VadsProcess",这个对象得到之后的EPROCESS 要"AND 0xfffffffffffffff0"才是真实的EPROCESS.
根据上述描述,我们可以得到所有进程,只要它含有NTDLL.DLL模块
我们可以拿NTDLL模块的开始VPN到结束VPN所有页面的虚拟地址开头
根据上述所述,我们可以得到explorer.exe进程和kanxue.exe的NTLL所有VPN
引出"Copy-on-write"机制利用,根据原理描述,NTDLL.DLL的VPN所有页面的内存在没有人为/系统的修改情况下,完全相同,不仅字节相同,且PTE的物理地址也相同.
所以我们可以遍历2个进程的所有NTDLL的页面的物理地址并且进行比较
为什么要进行比较? 一旦有人为/系统修改NTDLL模块任何一个内存,将会触发Copy-on-write机制会把内存放到另一个物理地址 我们在遍历地址的时候,最好访问一次地址确保物理页全部挂上全部有效

所以"总的来说就是对撞模块物理地址库" 根据Copy-on-write抓变化的内存.
抓模块/隐藏模块 隐藏进程/抓进程 方法繁多 文章内容较浅 仅提供无聊的想法
另外在WIN10 1903版本左右时期,通过修改_MMPTE_SUBSECTION中protect为0x6及以上,则写拷贝失效,改就是全局.
代码最终实现

typedef struct _MMVAD
{
    struct _MMVAD_SHORT Core;                                               //0x0
    union
    {
        ULONG LongFlags2;                                                   //0x40
        volatile struct _MMVAD_FLAGS2 VadFlags2;                            //0x40
    } u2;                                                                   //0x40
    struct _SUBSECTION* Subsection;                                         //0x48
    struct _MMPTE* FirstPrototypePte;                                       //0x50
    struct _MMPTE* LastContiguousPte;                                       //0x58
    struct _LIST_ENTRY ViewLinks;                                           //0x60
    struct _EPROCESS* VadsProcess;                                          //0x70
    union
    {
        struct _MI_VAD_SEQUENTIAL_INFO SequentialVa;                        //0x78
        struct _MMEXTEND_INFO* ExtendedInfo;                                //0x78
    } u4;                                                                   //0x78
    struct _FILE_OBJECT* FileObject;                                        //0x80
}MMVAD, * pMMVAD;
typedef struct _MMVAD
{
    struct _MMVAD_SHORT Core;                                               //0x0
    union
    {
        ULONG LongFlags2;                                                   //0x40
        volatile struct _MMVAD_FLAGS2 VadFlags2;                            //0x40
    } u2;                                                                   //0x40
    struct _SUBSECTION* Subsection;                                         //0x48

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

最后于 2025-1-23 19:40 被S极客编辑 ,原因: 另外在WIN10 1903版本左右时期,通过修改_MMPTE_SUBSECTION中protect为0x6及以上,则写拷贝失效,改就是全局.
收藏
免费 69
支持
分享
最新回复 (33)
雪    币: 188
活跃值: (1151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Thanks for share!
2025-1-24 07:52
0
雪    币: 78
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
2025-1-24 11:16
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
tyty
2025-1-29 13:09
0
雪    币: 72
活跃值: (436)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这要怎么抓隐藏模块嘛?
2025-1-30 10:57
0
雪    币: 3967
活跃值: (2094)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
牛X。感谢分享
2025-1-31 06:40
0
雪    币: 213
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
我来看看!!
2025-2-7 10:01
0
雪    币: 995
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
看看学习
2025-2-7 10:21
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
666
2025-2-15 13:13
0
雪    币: 131
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
看看学习
2025-2-17 23:16
0
雪    币: 230
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
看学习
2025-3-2 11:23
0
雪    币: 39
活跃值: (620)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark
2025-3-2 17:16
0
雪    币: 8
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好东西 学习
2025-3-3 14:16
0
雪    币: 3616
活跃值: (3405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习学习
2025-3-3 15:00
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
学习
2025-3-3 19:14
0
雪    币: 0
活跃值: (463)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
thanks!
2025-3-3 23:44
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
学习经验
2025-3-4 10:57
0
雪    币: 66
活跃值: (2285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark
2025-3-4 11:13
0
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
看看
2025-3-4 13:11
0
雪    币: 25
活跃值: (702)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
看看
2025-3-4 17:35
0
雪    币: 70
活跃值: (2139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
感谢分享
2025-3-5 09:33
0
雪    币: 292
活跃值: (837)
能力值: ( LV3,RANK:29 )
在线值:
发帖
回帖
粉丝
22
感谢分享
2025-3-5 22:46
1
雪    币: 5074
活跃值: (3547)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
学习一下!
2025-3-16 20:27
0
雪    币: 3187
活跃值: (3702)
能力值: ( LV8,RANK:147 )
在线值:
发帖
回帖
粉丝
24
mark
2025-3-16 20:53
0
雪    币: 11
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
mark
2025-3-16 21:12
0
游客
登录 | 注册 方可回帖
返回