项目定位
SnowSword 是一个面向 Windows 10 / 11 x64 的内核分析与反 Rootkit 工具,目标是内核对象的枚举、交叉验证与证据输出:
- 把内核态采集(对象管理器、内核地址空间)与用户态职责(集合运算、路径格式化、结果关联与展示)分层,驱动侧尽量薄;
- 对同一类隐蔽技术,用多个互相独立的视角采集,再按映像基址关联,输出差异集合与置信等级,而不是直接判定“恶意”;
- 承认误报与漏报:输出“需要人工复核”的条目,并把采集失败的字段标记为“未知”,而不是用硬编码偏移继续访问。
本页能力清单以项目作者确认的信息为准,并尽量标注对应的公开记录。已实现但本博客尚未单独成文的条目也会列出(只写能力名称,不补写未经验证的实现细节);未成立或未验证的部分统一放在验证状态与边界与后续方向。
平台与环境
| 项目 | 内容 |
|---|---|
| 目标系统 | Windows 10 / 11 x64 |
| 采集层 | 内核态驱动(对象管理器、内核地址空间、安全内存读取) |
| 交互层 | 用户态 CLI:--cli 交互、-c 单次命令、--agent-pipe 长连接、--format json JSON 输出 |
| 权限模型 | EXE 以 requireAdministrator 运行;内核级操作需要 --force |
| 调试与验证 | WinDbg、DebugView、符号验证、隔离虚拟机中的对照测试 |
运行截图
以下截图来自作者本机的实机运行(Windows 10/11 x64,管理员权限),界面分别是 Ring3 端的 GUI 与 CLI。截图记录的是界面布局与字段含义,底部状态栏的条数是当次枚举的实际结果,不是基准测试数据。






已实现能力
以下为本项目当前已实现的能力(依项目作者确认的信息整理)。已在博客中单独成文的条目会引到对应文章;未附引用的条目表示本博客暂未单独成文,不代表未实现。本清单只列能力名称与已有记录,不对各能力的成熟度或稳定性作额外断言。
进程与线程分析
- Process / Thread / Module / Window / Memory / Privilege 等进程维度的枚举与分析
- Kernel thread suspend / resume
驱动与设备对象
- Driver / Device Object / Device Stack 的枚举与关系分析
- IRP Dispatch 检查
内核表与 Hook 检查
- SSDT / ShadowSSDT
- IDT / GDT,含多核检查
- Ob callbacks(对象回调)
- ExCallback 枚举
- Minifilter / Instance 枚举
- User-mode Inline / IAT / EAT Hook 扫描
隐藏驱动检测
- 视角一:内核模块列表。使用
SystemModuleInformation(源自内核维护的已加载模块链表)获取驱动路径、映像基址与映像大小。两阶段查询处理不固定缓冲区大小,并对结构版本与路径编码做兼容处理。 - 视角二:对象管理器驱动对象。从对象管理器命名空间获取
DRIVER_OBJECT,覆盖\Driver、\FileSystem,以及\FileSystem\Filters子目录(MiniFilter 的驱动对象在这里,漏掉子目录会导致视野不完整)。按基址与模块列表关联,并处理引用计数纪律。 - 视角三:内核内存 PE 特征扫描。扫描内核驱动区内存,用两级特征校验找出“带 PE 头却不在模块列表里”的可执行镜像,用于应对既摘链
PsLoadedModuleList、又不注册\Driver对象的情况。扫描范围不是“全内存”,而是有界的内核映像区。 - 结果关联与分级:按映像基址做集合差集,标注来源视角(模块列表 / 对象目录 / 内存扫描)、来源数(双视角 / 三视角)与状态(已知模块、对象关联、游离 PE、需人工复核)。采集失败的条目单独标记,不混入隐藏候选。
隐藏进程检测
- 用户态枚举与内核对象分析交叉验证:从用户态枚举 API 的视角与内核
EPROCESS对象的视角分别建立集合,交叉比对发现异常进程,而不是只依赖单一 API 的返回值。 - PspCidTable 进程枚举:作为第二种进程枚举视角,通过
PsLookupProcessByProcessId的 call 跳板逆向定位PspCidTable地址,按TableCode级数逐级遍历句柄表,用ObGetObjectType过滤进程对象,handle 值即 PID。
文件系统
- NTFS raw analysis
- FAT32 相关能力
监控与行为检测
- ETW / kernel debug monitoring
- HIPS 相关能力(行为链检测方向)
枚举与查询(CLI)
| 命令 | 说明 |
|---|---|
process list |
用户态进程枚举(PID / PPID / 名称 / 路径) |
thread list --pid <N> |
指定进程的线程枚举(TID、优先级、状态、ETHREAD、Teb、所属模块等) |
thread callstack --pid <N> --tid <N> |
线程调用栈 |
module list --pid <N> |
指定进程的模块枚举 |
kernel-module list |
内核模块列表(序号、名称、映像基址、映像大小、路径、驱动对象) |
ssdt list |
SSDT 相关查询 |
内核内存安全读取
访问内核地址前先确认当前 IRQL,并组合使用 ProbeForRead 预检、MmCopyMemory 安全拷贝与 __try / __except 兜底;读取私有结构时还要考虑对象并发销毁与字段被修改的情况。这三者各自解决的问题不同,不能把其中任何一个当成“绝对安全”的保证。
破坏性操作的确认机制
process kill 一类用户态破坏性操作会先输出 WARNING: Destructive operation ... Confirm? [y/N]:,由调用方明确回复后执行;需要驱动的内核级操作(needsDriver=True)使用 --force 显式表达意图。工具不会为了方便而自动应答确认。
检测模型
1 | 不同来源采集 |
这套设计不能保证发现所有内核隐蔽技术,但能让攻击者必须同时处理更多独立痕迹,也让检测结果比单一列表更容易解释和复核。
验证状态与边界
下面是验证状态上的缺口,不是“未实现的功能”清单:上面列出的能力已经在项目中实现,只是下列场景目前还没有公开的复现记录或对照数据。
- 缺少干净系统基线与多次重复测试;
- 模块、对象目录和内存候选的逐项对照尚未补齐;
- 尚缺扫描耗时、CPU 占用和 IOCTL 次数的性能数据;
- 非分页池定位、清除 PE 头等场景尚未验证;
OBJECT_DIRECTORY、LDR_DATA_TABLE_ENTRY等内核私有结构随版本变化,跨 Windows 版本的适配与验证仍在进行中;- 对照测试只能证明两个工具在特定测试状态下枚举结果不同,不能据此断言某个工具一定正确,也不能外推到所有隐藏方式。
后续方向
- 批量化内存扫描,并比较逐页与批量 IOCTL 的扫描时间、CPU 与请求数量;
- 研究非分页池定位;
- 为
DRIVER_OBJECT增加多特征交叉校验,降低误报; - 把 WinDbg 验证信息纳入结果报告;
- 按“基线 → 正常驱动 → 摘链场景 → 性能 → 兼容性”的顺序补全证据链,每个阶段固定保存系统版本、模块集合、对象集合与耗时。
相关文章
- SnowSword 隐藏驱动检测原理与工程实现:从多视角枚举到结果关联
- SnowSword 隐藏驱动检测实测:摘链驱动的识别
- 隐藏驱动检测学习记录 —— 枚举 \Driver 与 \FileSystem 的多视角交叉验证
- 内存暴力搜索隐藏驱动 —— PE 特征扫描 + 模块列表差集
- SnowSword 进程隐藏检测实现:从用户态枚举到内核对象分析
- PspCidTable 进程枚举学习记录 —— 从 API 逆向到内核对象表遍历
- SnowWall 检测实测:从实验环境到结果复核
完整的自动聚合列表见 标签:SnowSword 与 分类:SnowSword Development。
源码与发布包
SnowSword 目前以个人项目形式开发,仓库与发布包入口都在 Gitee:
- 仓库:gitee.com/le-ziyi/SnowSword
- 发布包:v1.0.4 下载(
SnowSword.exe+SnowSword.sys,附 SHA256SUMS)
本页描述的是项目当前状态,会随实现推进而更新;与研究记录类文章相比,这里的结论更保守——只有经过实测并保留证据的结论才会写进来。
