WinDiff 是一个开源、基于 Web 的工具,允许浏览和比较不同版本 Microsoft Windows 二进制文件中的符号、类型和系统调用信息。该二进制数据库会定期自动更新,包含来自最新 Windows 更新(包括 Insider Preview)的数据。
该工具的灵感来源于 ntdiff,并借助 Winbindex 实现。
WinDiff 由两部分组成:一个用 Rust 编写的 CLI 工具,以及一个用 TypeScript 编写、基于 Next.js 框架的 Web 前端。
CLI 工具根据配置文件生成压缩的 JSON 数据库,它依赖 Winbindex 来查找和下载所需的 PE(和 PDB)文件。类型使用 resym 进行重构。CLI 工具的设计理念是:当 Windows 发布新版本时,能够轻松更新并重新生成数据库。CLI 工具的代码位于 windiff_cli 目录中。
前端以用户友好的方式可视化显示 CLI 工具生成的数据。前端遵循与 ntdiff 相同的原则,允许浏览从特定版本 Microsoft Windows 的官方 Microsoft PE 和 PDB 中提取的信息,还允许在不同版本之间比较这些信息。前端的代码位于 windiff_frontend 目录中。
一个定时触发的 GitHub Action 每天从 Winbindex 获取新更新,并更新用于生成 WinDiff 在线版本的配置文件。目前,由于(免费计划的)存储和计算限制,只保留一年以内的 KB 和 Insider Preview 更新用于在线版本。当然,您也可以自行在本地重建 WinDiff 版本,这些限制将不存在。具体请参见下一节。
注意:Winbindex 并未为所有索引文件提供唯一下载链接,因此 WinDiff 中可能会缺少某些 PE 文件的信息。不过,一旦这些 PE 文件出现在 VirusTotal 上,Winbindex 就能为其提供唯一下载链接,它们随后将自动整合到 WinDiff 中。
WinDiff 的完整构建过程已"自文档化"在 ci/build_frontend.sh 中,该脚本用于构建 WinDiff 的在线版本。以下是其内容:
# 解析项目的根目录
PROJECT_ROOT=$(git rev-parse --show-toplevel)
# 生成数据库
cd "$PROJECT_ROOT/windiff_cli"
cargo run --release "$PROJECT_ROOT/ci/db_configuration.json" "$PROJECT_ROOT/windiff_frontend/public/"
# 构建前端
cd "$PROJECT_ROOT/windiff_frontend"
npm ci
npm run build
用于生成 WinDiff 在线版本数据的配置文件位于 ci/db_configuration.json,但您可以自定义它或使用自己的配置。欢迎提交 PR 以在在线配置中添加要追踪的新二进制文件。
该仓库附带了一个代理技能,可将 WinDiff 转变为自动化安全研究助手。您无需手动点击差异 UI,而是可以询问 Claude Code 比较两个 Windows 版本并总结出更改内容——以及这些更改为何重要。
该技能位于 .claude/skills/windiff-version-diff-analysis/。当您在 Claude Code 中打开此仓库时,它会自动加载并响应对以下内容的请求:
ntoskrnl.exe 在 21H2 和 24H2 之间的差异,告诉我新增了什么。"win32k.sys / ci.dll 中与 EDR 或反作弊相关的更改是什么?"给定两个版本,该技能会驱动 windiff_cli 生成数据库,对它们进行差异分析,并生成一份报告,该报告利用 Windows 内部知识(API 前缀、组件角色)解释原始符号/类型/系统调用的差异,并面向三类受众进行组织:反恶意软件/EDR 开发者、反作弊开发者和漏洞研究人员。报告会重点突出新增系统调用、新的缓解标志(包括隐藏在匿名位域结构中的位,并追溯其父结构如 _EPROCESS::MitigationFlags2Values)、新的 ETW/威胁情报遥测和内核回调、代码完整性更改以及全新的组件。
以下是由 Claude Opus 4.7 针对提示"对比 ntoskrnl.exe 在 25H2 和 26H1 之间的差异,告诉我新增了什么。将你的报告写入一个 markdown 文件"生成的报告示例: ntoskrnl_25H2_to_26H1.md
该技能的核心差异逻辑是一个独立的 Python 脚本,无需依赖即可独立运行于 windiff_cli 生成的任何数据库:
# 列出数据库目录中可用的操作系统版本/二进制文件
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public --list
# 对比两个操作系统版本之间的一个二进制文件("版本_更新_架构"后缀)
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public ntoskrnl.exe 21H2_BASE_amd64 22H2_BASE_amd64
它会向 stderr 输出人类可读的摘要,向 stdout 输出结构化的 JSON(包含添加/删除的导出、符号、模块、系统调用以及解析出的类型/位域更改)。有关完整的工作流程和参考资料,请参见该技能的 SKILL.md 文件。