You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows11 25H2下NtQuerySystemInformation返回ImageBase为0,无权限如何获取内核基址?

Windows 11 25H2 用户态获取ntoskrnl.exe基址问题解决方案

问题背景

在Windows 10及Windows 11 23H2之前的版本中,通过NtQuerySystemInformation(SystemModuleInformation, buf, size, &size)可正常获取ntoskrnl.exe的运行时基址,但在Windows 11 25H2(Build 26200)中,该API返回STATUS_SUCCESS且能正确枚举模块路径,却将所有模块的ImageBase字段置为0x0000000000000000。同时EnumDeviceDrivers和NtQuerySystemInformation(SystemModuleInformationEx)也出现相同问题。

原因分析

微软在Windows 11 25H2及后续版本中,对用户态程序获取内核模块基址进行了明确限制,这是内核安全加固措施的一部分——通过隐藏内核内存地址,减少用户态程序利用内核地址实施恶意操作(如提权、内存篡改等)的可能性。

可行替代方案(无管理员权限)

1. 获取静态默认基址(非运行时实际地址)

如果你的场景可以接受使用ntoskrnl.exe的静态默认加载基址,可通过以下步骤实现:

  • 调用GetSystemDirectory获取系统目录路径,拼接出ntoskrnl.exe的完整路径(例如C:\Windows\System32\ntoskrnl.exe)。
  • 读取该文件的PE结构,解析IMAGE_NT_HEADERS中的OptionalHeader.ImageBase字段,得到编译时指定的默认基址。
  • 注意:该值并非内核运行时的实际加载地址(内核ASLR会随机化实际地址),仅适用于不需要动态运行时地址的场景。

2. 无管理员权限下获取运行时基址的限制

目前没有公开的文档化API可以在无管理员权限的用户态下获取ntoskrnl.exe的运行时实际基址。微软的安全策略已经封堵了这类用户态访问路径,任何非文档化的方法都可能存在兼容性问题,且违反微软的安全规范,不建议使用。

管理员权限下的可选方法(仅供参考)

如果你的工具可以获取管理员权限,可尝试通过以下方式获取运行时基址:

  • 使用NtQuerySystemInformation的SystemKernelDebugInformation类(需管理员权限),但该接口未公开,且可能在后续版本中被移除。
  • 通过读取\\.\Kdcom设备等调试相关接口,但这类方法属于未公开的内部实现,稳定性和兼容性无法保证。

内容的提问来源于stack exchange,提问作者Haider Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.04 01:12:32