自动化与脚本
在 Windows 上做进程/内核/服务/网络深度分析与远程…
需要在 Windows 上以 GUI 方式检查进程、服务、网络、ETW、注册表、对象管理器及内核内部(SSDT、回调、EPT hook、驱动完整性),并支持远程检查时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Windows 上做进程/内核/服务特定
解决思路
- 构建:用 Visual Studio 2022 打开 NtWarden.sln,选择 Release | x64,Build All;输出位于 x64/Release/NtWarden.exe、x64/Release/WinSysServer.exe、x64/Release/KWinSys/KWinSys.sys。
- 运行 NtWarden:以管理员身份启动(Start-Process NtWarden.exe -Verb RunAs),用户态功能(进程、服务、网络、ETW、注册表、对象管理器)无需驱动即可使用。
- 启用内核驱动 KWinSys:仅在测试 VM 中使用;先执行 bcdedit /set testsigning on(需重启),VM 上可能还需 bcdedit /set nointegritychecks on,重启后以管理员运行 NtWarden,切换到 Kernel Mode 标签页会自动安装并启动 KWinSys。
- 手动管理驱动:安装用 sc create KWinSys type= kernel binPath= "C:\path\to\KWinSys.sys" 然后 sc start KWinSys;停止并删除用 sc stop KWinSys 和 sc delete KWinSys;GUI 的 Driver 菜单也提供驱动管理。
- 远程检查部署:把 x64/Release/WinSysServer.exe(必需)和 x64/Release/KWinSys/KWinSys.sys(仅内核功能需要)复制到目标机。
- 在目标机(提权)启动服务器:WinSysServer.exe --install 自动安装驱动并监听默认端口 50002;自定义端口用 WinSysServer.exe --install --port 9000;若驱动已手动安装则直接 WinSysServer.exe 或 WinSysServer.exe --port 9000。
- 从主机连接:启动 NtWarden,打开 Remote 菜单,输入目标 IP 和端口(默认 50002),点击 Connect。
- 协议注意:自定义二进制协议走 TCP,12 字节头部为 MessageType、DataSize、Status;无认证,仅限隔离的实验/VM 环境;目标机无 KWinSys 时仅用户态数据可用,内核标签页需要目标机加载 KWinSys。
- 进程枚举(WinSys 静态库):#include "WinSys/ProcessManager.h",调用 WinSys::ProcessManager::Get(),pm.Update() 刷新快照,遍历 pm.GetProcesses() 读取 proc->Id 和 proc->GetImageName()。
- 服务枚举:使用 WinSys::ServiceManager svcMgr; auto services = svcMgr.EnumServices(); 读取 svc.GetName()、svc.Status.dwCurrentState、svc.Config.dwStartType。
- 网络连接枚举:使用 WinSys::NetworkManager netMgr; auto conns = netMgr.GetTcpConnections(); 读取 conn.ProcessId、LocalAddress/LocalPort、RemoteAddress/RemotePort、State。
- 与 KWinSys 驱动通信(IOCTL):使用 WinSys::KernelInterface ki; ki.Open() 打开设备句柄;用 ki.EnumKernelModules() 枚举内核模块,用 ki.EnumProcessCallbacks() 读取内核回调(Address、OwnerModule、IsSuspicious)。
- 单进程安全分析:GUI 中右键 > Analyze Process,或代码中用 WinSys::ProcessAnalyzer analyzer(targetPid); auto result = analyzer.Analyze(); 检查 result.UnbackedRegions(无后备可执行内存/shellcode 迹象)、result.HollowingDetected(PEB ImageBase 与 PE Header ImageBase 对比)、result.DirectSyscalls(ntdll 之外直接系统调用)、result.UserHooks(内联用户 hook)、result.Token.IsElevated 与 result.Token.IntegrityLevel。
- 使用内核功能前先检查驱动是否加载:WinSys::KernelInterface ki; bool driverAvailable = ki.Open(); 可用则调用 ki.GetSSDTEntries() 等,否则回退到仅用户态并提示 KWinSys 未加载。
- 检测隐藏进程:ki.Open() 后取 ki.EnumProcessObjects()(EPROCESS 遍历)与 ProcessManager 的用户态进程列表,构建可见 PID 集合,找出仅存在于内核列表中的 PID 并报告为 HIDDEN PROCESS。
- 排查内核标签页不显示:确认 KWinSys.sys 与 NtWarden.exe 同目录(或 x64/Release/KWinSys/),以管理员运行,用 bcdedit /enum | findstr testsigning 确认测试签名已启用,查看 Logger 标签页的驱动加载错误。
- 排查驱动安装失败:用 bcdedit /enum | Select-String "testsigning" 验证测试签名,用 sc query KWinSys 检查残留服务项,卡住时 sc delete KWinSys 后重试,部分 VM 还需 bcdedit /set nointegritychecks on 并重启。
- 排查 WinSysServer 连接被拒:在目标机用 netstat -ano | findstr 50002 确认服务器在运行,用 netsh advfirewall firewall add rule name="WinSysServer" dir=in action=allow protocol=TCP localport=50002 放行防火墙。
- 排查用户 hook 标签页无数据:用户 hook 检测的反汇编依赖 Capstone,需在构建 WinSys 时链接 Capstone,否则 hook 扫描器只报告字节而不反汇编。
- 性能叠加层不可见时:启动 NtWarden 进入 Performance 标签页,启用 overlay 模式,它通过 DirectX 11 透明渲染在其他窗口之上。
- 构建报缺少 WDK:KWinSys 需要 Windows Driver Kit;若只需用户态功能,在 Visual Studio 中右键 KWinSys 项目 > Unload Project 将其排除出构建。
适用边界 · 注意事项
- KWinSys 内核驱动仅应在测试 VM 中使用,不要在生产或真实主机上启用测试签名并加载。
- WinSysServer 协议无认证,仅限隔离的实验/VM 环境,不要暴露在不可信网络。
- 若不需要内核功能,无需安装 WDK 或 KWinSys,可仅使用用户态功能。