论坛首页 开源情报交流区 阅读主题

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

273 浏览 22 回复
#1 楼主 2026-06-01 21:08:44
写时复制 (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

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-285331.htm
#2 2026-06-01 21:08:44
学习
#3 2026-06-01 21:08:44
mark
#4 2026-06-01 21:08:44
mark
#5 2026-06-01 21:08:44
学习一下!
#6 2026-06-01 21:08:44
感谢分享
#7 2026-06-01 21:08:44
感谢分享
#8 2026-06-01 21:08:44
看看
#9 2026-06-01 21:08:44
看看
#10 2026-06-01 21:08:44
mark
#11 2026-06-01 21:08:44
学习经验
#12 2026-06-01 21:08:44
thanks!
#13 2026-06-01 21:08:44
Thanks for share!
#14 2026-06-01 21:08:44
学习学习
#15 2026-06-01 21:08:44
好东西 学习
#16 2026-06-01 21:08:44
mark
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号