ergrelet/windiff

GitHub: ergrelet/windiff

WinDiff 是一个开源 Web 工具,用于浏览和比较不同 Windows 版本间二进制文件的符号、类型和系统调用信息。

Stars: 356 | Forks: 18

# WinDiff ## 关于 WinDiff 是一个开源的 Web 工具,允许浏览和比较不同操作系统版本下的 Microsoft Windows 二进制文件的符号、类型和 syscall 信息。二进制数据库会自动更新,以包含来自最新 Windows 更新(包括 Insider Preview)的信息。 它的灵感来源于 [ntdiff](https://github.com/ntdiff/ntdiff),并在 [Winbindex](https://github.com/m417z/winbindex) 的帮助下得以实现。 ## 截图 Screenshot of WinDiff ## 工作原理 WinDiff 由两部分组成:一个用 Rust 编写的 CLI 工具和一个使用 Next.js 框架并用 TypeScript 编写的 Web 前端。 CLI 工具用于根据配置文件生成压缩的 JSON 数据库,并依赖 `Winbindex` 来查找和下载所需的 PE(和 PDB)。类型通过 `resym` 进行重构。CLI 工具背后的理念是能够随着 Windows 新版本的发布轻松更新和重新生成数据库。CLI 工具的代码位于 `windiff_cli` 目录中。 前端用于以用户友好的方式可视化 CLI 工具生成的数据。前端遵循与 `ntdiff` 相同的原则,因为它允许浏览从官方 Microsoft PE 和 PDB 中为特定版本的 Microsoft Windows 提取的信息,并且还允许在不同版本之间比较这些信息。前端的代码位于 `windiff_frontend` 目录中。 一个定时的 GitHub action 每天从 `Winbindex` 获取新更新,并更新用于生成 WinDiff 在线版本的配置文件。 目前,由于(免费计划)存储和计算限制,**仅保留不到一年的 KB 和 Insider Preview 更新**用于在线版本。当然,如果您需要,您可以自己在没有这些限制的情况下构建 WinDiff 的本地版本。请参阅下一节。 注意:`Winbindex` 并不为 100% 的索引文件提供唯一下载链接,因此可能会因此导致某些 PE 的信息在 WinDiff 中不可用。但是,一旦这些 PE 出现在 VirusTotal 上,`Winbindex` 就能为它们提供唯一下载链接,随后它们将被自动整合到 WinDiff 中。 ## 如何构建 ### 前置条件 - Rust 1.68 或更高版本 - Node.js 16.8 或更高版本 ### 命令行 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/" # 构建 frontend cd "$PROJECT_ROOT/windiff_frontend" npm ci npm run build ``` 用于生成 WinDiff 在线版本数据的配置文件位于:`ci/db_configuration.json`,但您可以对其进行自定义或使用您自己的配置。欢迎提交旨在向在线配置中添加新跟踪二进制文件的 PR。
标签:CLI 工具, NTdiff, PDB 解析, PE 文件, Rust, TypeScript, Web 应用, Winbindex, Windows 二进制分析, Windows 内部机制, Windows 更新, 云资产清单, 可视化界面, 安全插件, 安全研究工具, 开源, 恶意代码分析, 情报收集, 漏洞研究, 版本差异对比, 符号对比, 系统调用分析, 结构体对比, 网络流量审计, 自动化更新, 逆向工程, 通知系统, 配置文件