论坛首页 安全工具分享区 阅读主题

[原创]简易x64内核ark速通之模块(二)

214 浏览 11 回复
#1 楼主 2026-06-01 21:08:57
这里补充一个知识点方便后续兼容更多版本的操作系统
以eprocess下ActiveProcessLinks为例,不同版本偏移值不同那么如何完美兼容所有系统呢?收集所有版本的偏移值,使用RtlGetVersion获取当前系统版本信息,switch case 给出偏移例如想获取eprocess下的UniqueProcessId, 利用导出函数PsGetProcessId
例如想获取eprocess下的ActiveProcessLinks,并没有导出函数可以直接获取ActiveProcessLinks,但是通过观察各个版本的结构发现ActiveProcessLinks总在UniqueProcessId +0x8的位置,于是可以利用方法二定位到的值+0x8
微软为了方便调试,大多数版本的内核模块都提供了符号,并且提供了解析符号的方法具体可以参考开源项目:801K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6m8K9i4t1I4y4q4)9J5c8W2y4&6L8h3u0G2L8r3W2U0b7h3y4U0k6i4y4K6R3解析,R0解析都有注:下载pdb需要联网,但是解析不需要。
成熟的产品可以先尝试联网获取pdb,失败则使用本地特征

通过eprocess下的peb获取(x84 为WoW64Process)
PsLookupProcessByProcessId获取进程eprocess->peb->Ldr->InMemoryOrderModuleList->BaseDllName
在eprocess下struct_RTL_AVL_TREEVadRootVAD是一个AVL自平衡二叉树,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个VAD节点,由一个MMVAD结构完整描述。VAD 是 Virtual Address Descriptor(虚拟地址描述符)的缩写,它是 Windows 操作系统中用于描述进程虚拟内存布局的数据结构。VAD 结构记录了进程的虚拟地址空间中的每个内存块的信息,包括起始地址、结束地址、访问权限等。在 Windows 操作系统中,每个进程都有自己的虚拟地址空间,用于存储代码、数据和堆栈等。这个虚拟地址空间被划分为多个连续的内存块,每个内存块对应一段连续的虚拟地址范围。VAD 结构用于管理和描述这些虚拟地址范围。VAD 结构通常以树的形式组织,每个 VAD 表示一个内存块,并通过指针链接起来。每个 VAD 结构包含以下重要字段:StartingVpn:内存块的起始虚拟页号(Virtual Page Number)。EndingVpn:内存块的结束虚拟页号。ControlArea:与该内存块关联的控制区域(Control Area)。VadFlags:标识内存块的属性,如保护级别、提交状态等。

windbg  使用!vad +addr  自动解析


回复或点赞可查看完整内容

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-287942.htm
#2 2026-06-01 21:08:57
为你点赞!
#3 2026-06-01 21:08:57
感谢
#4 2026-06-01 21:08:57
谢谢分享
#5 2026-06-01 21:08:57
谢谢学习
#6 2026-06-01 21:08:57
你的分享对大家帮助很大,非常感谢!
#7 2026-06-01 21:08:57
看看
#8 2026-06-01 21:08:57
mark
#9 2026-06-01 21:08:57
好好好
#10 2026-06-01 21:08:57
感谢
#11 2026-06-01 21:08:57
感谢
#12 2026-06-01 21:08:57
牛逼

请登录后参与讨论

立即登录 注册账号