Windows 10 20H1.19577 开始 System进程内
Ntdll的一点变化
背景
最近为了解决一个兼容问题,看了下 Windows 10 20H1的内核,发现
了一处有点意思的改动。
简单来说, ntdll.dll过去映射在 System进程以及其他所有进程内的时
候,都是以可执行页面进行映射的。但从 19577开始,在 System进
程内, NTDLL开始映射为只读页面,而在其他所有进程内, NTDLL
仍映射为可执行页面。
初步检查 VADs
这点可以用 Windbg来印证:
切换到 System进程后,查看 VADs
1. 1: kd> !vad
2. VAD level start end commit
3. 9769a248 ( 2) e0 e0 0 Mapped READWRITE Pag
efile-backed section
4. 9769a2a0 ( 1) f0 f0 0 Mapped READWRITE Pag
efile-backed section
5. 94bdf6c0 ( 2) 100 100 0 Mapped READWRIT E Pag
efile-backed section
6. 8c266770 ( 0) 3d0 579 0 Mapped Exe READONLY \Wi
ndows\System32 \ntdll.dll
7. 86177288 ( 1) 7ffe0 7ffe0 1 Private READONLY 8. 86177078 ( 2) 7ffe7 7ffe7 1 Private READONLY
9. Total VADs: 6, average level: 2, maximum depth: 2
可以看到,映射的 ntdll.dll是READ ONLY
那么我们切到其他进程,例如 smss,查看 VADs,可以看到这里
ntdll.dll映射的是 EXECUTE_WRITECOPY
1. 1: kd> !vad
2. VAD level start end commit
3. 90aff2a0 ( 3) 630 630 0 Mapped READONLY Pag
efile-backed section
4. 8ec7afb0 ( 2) 650 66c 0 Mapped READONLY Pag
efile-backed section
5. 90a72a08 ( 3) 670 6af 5 Private READWRITE
6. 8ec7ada0 ( 1) 6b0 6e0 0 Mapped READONLY \Wi
ndows\System32 \C_936.NLS
7. 8ec7abe8 ( 3) 6f0 6f2 0 Mapped READONLY \Wi
ndows\System32 \l_intl.nls
8. 90a72cd8 ( 2) 700 708 1 Private READWRITE
9. 90a72eb8 ( 4) 710 74f 5 Private READWRITE
10. 90a72e58 ( 3) 750 78f 5 Private READWRITE
11. a32a52b8 ( 4) 790 7cf 5 Private READWRITE
12. 90a72a68 ( 0) 800 9ff 5 Private READWRITE
13. 8ec7ab38 ( 3) aa0 abb 3 Mapped Exe EXECUTE_WRITECOPY \W
indows\System32 \smss.exe
14. 8ec7af58 ( 2) ac0 2abf 8 Mapped NO_ACCESS Pag
efile-backed section
15. 90a72d38 ( 3) 2c00 2dff 15 Private READWRITE
16. 8ec7ab90 ( 1) 775f0 77799 9 Mapped Exe EXECUTE_WRITECOPY \W
indows\System32 \ntdll.dll
17. 90a72d08 ( 4) 7f960 7f968 2 Private READWRITE
18. 90a72d68 ( 3) 7f970 7f971 2 Private READWRITE
19. 8ec7adf8 ( 4) 7f980 7f980 0 Mapped READONLY Pag
efile-backed section
20. 90a72948 ( 2) 7ffe0 7ffe0 1 Private READONLY
21. 90a72a98 ( 3) 7ffe7 7ffe7 1 Private READONLY
22. Total VADs: 19, average level: 3, maximum depth: 4 Windbg的!vad指令是简单使用 _MMVAD ->VadFlags.Protection 来判
断其页面的保护属性的。我们查看对应 VAD结构也可以获得相同结
论:
1. 1: kd> dt _MMVAD 8c266770 -b
2. nt!_MMVAD
3. +0x000 Core : _MMVAD_SHORT
4. +0x000 NextVad : 0x9769a2a0
5. +0x004 ExtraCreateInfo : 0x86177288
6. +0x000 VadNode : _RTL_BALANCED_NODE
7. +0x000 Children :
8. [00] 0x9769a2a0
9. [01] 0x86177288
10. +0x000 Left : 0x9769a2a0
11. +0x004 Right : 0x86177288
12. +0x008 Red : 0y0
13. +0x008 Balance : 0y00
14. +0x008 ParentValue : 0
15. +0x00c StartingVpn : 0x3d0
16. +0x010 EndingVpn : 0x579
17. +0x014 ReferenceCount : 0n0
18. +0x018 PushLock : _EX_PUSH_LOCK
19. +0x000 Locked : 0y0
20. +0x000 Waiting
360 Windows1020H1.19577开始System进程内Ntdll的一点变化
安全报告 >
360 >
文档预览
中文文档
9 页
50 下载
1000 浏览
0 评论
0 收藏
3.0分
温馨提示:本文档共9页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 思安 于 2022-11-29 01:40:10上传分享