
Windows Analysis and Research Toolkit
⚠️ 本项目的部分代码在 AI 辅助下编写(vibe coding),因此可能存在一些缺陷。 内核驱动(KWinSys)应仅安装在测试虚拟机中,仅供研究使用。

| 组件 | 作用 |
|---|---|
| NtWarden | GUI 应用程序(ImGui + DirectX 11) |
| WinSys | 用于进程、服务和网络枚举的静态库 |
| KWinSys | 用于回调、SSDT、内核模块等的内核驱动 |
针对单个进程的安全分析,可从进程上下文菜单访问。
要求: Visual Studio 2022、Windows SDK 10.0.26100.0+、WDK(用于 KWinSys)
NtWarden.sln
├── NtWarden/ # GUI app
├── WinSys/ # Core library (static lib)
├── KWinSys/ # Kernel driver
└── WinSysServer/ # Remote server
NtWarden.slnx64/Release/KWinSys 需要启用测试签名或具备有效签名。
# Enable test signing (reboot required)
bcdedit /set testsigning on
# On VMs you may also need
bcdedit /set nointegritychecks on
以管理员身份运行 NtWarden。切换到“内核模式”选项卡时,如果驱动尚未加载,将自动安装并启动该驱动。你也可以通过驱动菜单手动管理它。
WinSysServer 运行在目标机器(通常是虚拟机)上,通过 TCP 提供系统数据。通过 远程 > 连接 从 NtWarden 进行连接。
| 文件 | 路径 | 用途 |
|---|---|---|
WinSysServer.exe | x64/Release/WinSysServer.exe | 始终需要 |
KWinSys.sys | x64/Release/KWinSys/KWinSys.sys | 仅内核功能 |
用户模式功能(进程、服务、网络)无需驱动即可运行。内核选项卡需要在目标上加载 KWinSys。
# Auto-install driver + start server (run elevated)
WinSysServer.exe --install # default port 50002
WinSysServer.exe --install --port 9000 # custom port
# Or install the driver yourself first
sc create KWinSys type= kernel binPath= "C:\path\to\KWinSys.sys"
sc start KWinSys
WinSysServer.exe [--port <port>] # default: 50002
基于 TCP 的自定义二进制协议。12 字节头部(MessageType、DataSize、Status)。无认证——仅限在隔离的实验室/虚拟机环境中使用。
MIT——参见 LICENSE。
| WinSysServer | 用于远程检查的无头 TCP 服务器 |
| 选项卡 | 功能说明 |
|---|
| 进程 | 进程列表,支持树形视图,可查看句柄、线程、内存区域、模块 |
| 性能 | 实时 CPU、内存、GPU 和网络使用率图表——可叠加在其他任务之上 |
| 服务 | 服务枚举,包含状态、启动类型、二进制路径 |
| 网络 > 连接 | TCP/UDP 连接,包含所属进程和远程端点 |
| 网络 > 根证书 | 受信任的根 CA 存储,包含主题、颁发者、指纹 |
| 网络 > NDIS | 网络适配器信息——驱动、MAC、速度、介质类型 |
| ETW | 活动的跟踪会话和已注册的提供程序 |
| IPC | RPC 端点和命名管道 |
| 对象管理器 | 浏览内核对象命名空间——目录、符号链接、设备 |
| 注册表 | 注册表浏览器,支持键/值枚举 |
| 符号 | 用户模式符号加载状态 |
| 日志记录器 | 在一个位置统一捕获内核驱动调试日志和用户模式 GUI 日志 |
| 选项卡 | 功能说明 |
|---|
| 进程对象 | EPROCESS 枚举,通过交叉引用检测隐藏进程 |
| 模块 | 已加载的内核驱动,包含基址、大小、路径(以及 LolDrivers 检查) |
| 回调 | 内核回调(进程/线程/映像/注册表/对象/电源)+ 完整性检查 |
| SSDT | SSDT 条目,包含所有者并检测挂钩 |
| 符号 | 内核符号解析和 PDB 加载 |
| 内核池 | 大型池分配、池标记统计 |
| 内存读写 | 按地址读写内核内存 |
| 计时器 | 每 CPU 中断和 DPC 计数器 |
| 过滤器 | 微过滤器驱动,包含海拔和实例信息 |
| 描述符表 | GDT/IDT 条目 |
| IRP 分发 | 任意驱动的 IRP 分发表——处理程序地址、所属模块 |
| WFP | WFP 标注驱动和过滤器 |
| DSE 状态 | 驱动程序签名强制(DSE)状态 |
| CI 策略 | 代码完整性(CI)策略和执行级别 |
| 内核完整性 | 对照磁盘映像验证内核 .text 段 |
| 虚拟机监控器挂钩 | 通过时序分析检测 EPT 挂钩 |
| 项目 | 检查内容 |
|---|
| 无文件后备内存 | 没有文件映射支持的私有可执行区域(shellcode 指示器) |
| 进程镂空 | PEB ImageBase 与 PE 头 ImageBase 不匹配 |
| 模块踩踏 | 将内存中的 .text 节与磁盘原始文件进行比较 |
| 直接系统调用 | 在 ntdll 之外发现的 syscall(0F 05)指令 |
| 系统调用存根 | ntdll 存根完整性——内存字节与干净磁盘副本的对比 |
| 用户挂钩 | ntdll、kernel32 等中的内联挂钩(JMP/CALL 补丁)(需要 capstone 来反汇编被分析的字节) |
| 令牌 | 权限提升、完整性级别、模拟、可疑特权 |
| 调试对象 | 进程上的调试对象和调试端口 |
| 虚拟机监控器 | CPUID 供应商检查 + RDTSC/CPUID 时序异常 |
| 作业对象 | 作业成员身份、限制、UI 限制 |
| CFG 状态 | CFG/XFG 执行状态和缓解标志 |