vitri0l/NewWorldInterface

GitHub: vitri0l/NewWorldInterface

驱动支持的 Windows 内核研究工具,通过运行时 PDB 符号解析实现构建版本无关的 VAD 树检查与跨进程内存操作。

Stars: 4 | Forks: 0

# NewWorldInterface 一款 Windows 内核接口工具,通过共享内存区(shared memory section)和内核事件与配套驱动程序进行通信。它会在启动时从 `ntoskrnl.exe` 的 PDB 中解析内核符号,并提供一个交互式命令循环,用于检查和操作 VAD 树、访问虚拟/物理内存以及执行进程内存操作。 ## 环境要求 - Windows 10/11 x64 - 在启动此可执行文件之前,必须已加载配套的内核驱动程序,并且其共享区/事件已经创建。 - `C:\Windows\System32\ntoskrnl.exe` 路径下(标准位置)必须存在 `ntoskrnl.exe`。 - 工作目录中必须存在与 `ntoskrnl.exe` 匹配的 PDB,**或者**该工具会尝试从 `msdl.microsoft.com` 下载它。 - 该进程必须以足够的权限运行,以便能够调用 `EnumDeviceDrivers` 并打开驱动程序的各种命名对象。 ## 开发动机 大多数内存检查工具要么完全在用户态运行——因此无法触碰分页结构或其他进程的 VAD 树——要么硬编码内核偏移量,这会导致在下一个 Windows 构建版本中失效。本工具规避了这两个问题。 - **设计上与构建版本无关。** 启动时,它会解析 `ntoskrnl.exe`,获取匹配的 PDB,并通过 DbgHelp 在运行时解析所需的每个偏移量和 RVA。无需针对特定版本维护偏移表,也不用在“补丁星期二”移动了某个字段时重新编译。 - **直接访问关键结构。** VAD 节点、Control Area 和 PTE 在这里是重点操作对象——遍历树、插入或删除节点、将 PTE 重新链接到指定的物理页面,或者将 section view 映射到另一个进程中。 - **这是一个工作台,而非一次性工具。** 其交互式循环专为迭代研究而设计——填充、检查、修改、回读——而不是仅执行单一且固定的操作。 适用于您拥有所有权或获得授权的系统,进行 Windows 内部原理研究、逆向工程和内存取证实验。 ## 命令行参数 | 标志 | 参数 | 描述 | |------|----------|-------------| | `/s` | `` | 在启动时设置**源**进程名称(例如 `explorer.exe`) | | `/t` | `` | 在启动时设置**目标**进程名称 | | `/i` | `` | 初始目标 VPN(虚拟页号),接受 `0x` 前缀 | | `/o` | `` | 添加到 `/i` 的偏移量(允许进行细粒度的页面选择) | | `/m` | `` | 初始内存视图大小(以页为单位) | 示例: ``` NewWorldUserInterface.exe /s explorer.exe /t notepad.exe /i 0x7ff6a0000 /m 16 ``` ## 交互式命令 启动后,该工具会打印一个帮助框并进入命令循环。按下列出的按键(不区分大小写)并遵循屏幕上的提示进行操作。 ### 进程 | 按键 | 命令 | 描述 | |-----|---------|-------------| | `I` | 设置源进程 | 输入**源**进程的名称(即将从中读取/链接内存的进程) | | `O` | 设置目标进程 | 输入**目标**进程的名称(即将遍历/修改其 VAD 树的进程) | ### VAD 树 | 按键 | 命令 | 描述 | |-----|---------|-------------| | `1` | 填充 | 请求驱动程序遍历目标进程的 VAD 树并填充共享 VAD 缓冲区 | | `2` | 快速查看 | 打印 VAD 缓冲区的原始列状转储(`GetSymOffsets` 格式),无需构建索引 | | `T` | 索引树视图 | 构建带有编号和缩进的树状结构(`ShowTree` 格式),并存储每个条目的 VPN 供 `D` 命令使用 | | `N` | 插入节点 | 提示输入参数,并请求驱动程序将新的 VAD 节点插入到目标进程中 | | `D` | 删除节点 | 通过上一次 `T` 列表中的索引选择节点,并请求驱动程序将其移除 | | `V` | 映射视图 | 通过发送带有选定 CA 指针的 VAD 插入请求,将现有的 Control Area(section 对象)映射到另一个进程 | | `F` | 查找查看者 | 查找当前共享给定 section/Control Area 视图的所有进程 | | `4` | 链接 PTE | 提示输入源虚拟地址和目标 VPN,然后请求驱动程序将目标 PTE 指向源物理页面 | | `X` | 取消链接 | 发出驱动程序的取消链接事件信号,以逆转上一次 PTE 链接 | ### 内存 | 按键 | 命令 | 描述 | |-----|---------|-------------| | `Q` | 读取虚拟内存 | 从源或目标进程读取虚拟内存,并以十六进制转储结果 | | `E` | 写入虚拟内存 | 向目标进程的虚拟内存写入字节 | | `M` | 设置视图大小 | 设置用于映射视图 / PTE 链接操作的页数 | | `R` | 读取物理内存 | 通过驱动程序的物理读取共享缓冲区读取物理地址 | | `W` | 写入物理内存 | 通过驱动程序的物理写入共享缓冲区向物理地址写入字节 | | `P` | 模式扫描 | 对选定的内存范围进行十六进制模式扫描(支持通配符 `??`) | | `A` | 更改保护属性 | 通过驱动程序更改目标区域的 VAD 保护标志 | ### 转储 | 按键 | 子选项 | 描述 | |-----|-----------|-------------| | `Z` | `D` | 通过驱动程序创建目标进程的 **minidump** | | `Z` | `P` | 在转储前移除保护属性和句柄限制 | ### 退出 | 按键 | 描述 | |-----|-------------| | `5` | 带清理退出——发出取消链接事件信号,并优雅地关闭所有句柄 | | `6` | 静默退出——立即返回,不进行任何清理信号通知 | ## 启动序列 1. 从 `System32` 加载 `ntoskrnl.exe`,解析其 PE 头以定位内嵌的 PDB 路径。 2. 验证本地是否存在 PDB;如果缺失,则从 Microsoft 符号服务器下载。 3. 初始化 DbgHelp(`SymInitializeW` + `SymLoadModuleExW`),并解析所需的所有内核字段偏移量和函数 RVA。 4. 打开由驱动程序创建的所有已命名的共享区和事件。 5. 将解析出的符号数据写入 `INIT`/`SYMBOL` 共享区,并触发 `INIT` 事件,以便驱动程序可以开始运行。 6. 应用任何 `/s`、`/t`、`/i`、`/m`、`/o` 命令行覆盖参数。 7. 进入交互式命令循环。
标签:PDB符号解析, SecList, UML, Web报告查看器, Windows内核, 云资产清单, 内存取证, 内存操作, 客户端加密, 白帽子, 网络安全监控, 逆向工程, 驱动开发