
WinDiff は、Microsoft Windows バイナリのシンボル、型、システムコール情報を OS の異なるバージョン間で参照・比較できる、オープンソースの Web ベースツールです。バイナリデータベースは自動的に更新され、最新の Windows アップデート(Insider Preview を含む)の情報が反映されます。
ntdiff に触発され、Winbindex の助けを借りて実現しました。
WinDiff は、Rust で書かれた CLI ツールと、Next.js フレームワークを用いた TypeScript で書かれた Web フロントエンドの 2 つの部分から構成されています。
CLI ツールは、設定ファイルから圧縮 JSON データベースを生成するために使用され、Winbindex に依存して必要な PE(および PDB)を検索・ダウンロードします。型は resym を使って再構築されます。CLI ツールの背後にある考え方は、Windows の新しいバージョンがリリースされるたびに、データベースを簡単に更新・再生成できるようにすることです。CLI ツールのコードは windiff_cli ディレクトリにあります。
フロントエンドは、CLI ツールで生成されたデータをユーザーフレンドリーな方法で可視化するために使用されます。フロントエンドは ntdiff と同じ原理に従い、特定のバージョンの Microsoft Windows 向けの公式 Microsoft PE および PDB から抽出された情報を参照でき、さらにバージョン間でこの情報を比較できます。フロントエンドのコードは windiff_frontend ディレクトリにあります。
スケジュールされた GitHub Actions が毎日 Winbindex から新しいアップデートを取得し、WinDiff のライブバージョンを生成するために使用される設定ファイルを更新します。現在、(無料プランの)ストレージと計算リソースの制限により、ライブバージョンでは 1 年未満の KB および Insider Preview アップデートのみ が保持されています。もちろん、必要であればこれらの制限なしに、自分で WinDiff のローカルバージョンを再構築することもできます。それについては次のセクションを参照してください。
注意: Winbindex はインデックスされたすべてのファイルに対して一意のダウンロードリンクを提供するわけではないため、一部の PE の情報が WinDiff で利用できない場合があります。しかし、これらの PE が VirusTotal に存在すれば、Winbindex はそれらに一意のダウンロードリンクを提供できるようになり、自動的に WinDiff に統合されます。
WinDiff の完全なビルドは ci/build_frontend.sh に「自己文書化」されています。これは WinDiff のライブバージョンをビルドするために使用されるビルドスクリプトです。内部は以下のようになっています:
# Resolve the project's root folder
PROJECT_ROOT=$(git rev-parse --show-toplevel)
# Generate databases
cd "$PROJECT_ROOT/windiff_cli"
cargo run --release "$PROJECT_ROOT/ci/db_configuration.json" "$PROJECT_ROOT/windiff_frontend/public/"
# Build the frontend
cd "$PROJECT_ROOT/windiff_frontend"
npm ci
npm run build
WinDiff のライブバージョンのデータを生成するために使用される設定ファイルは ci/db_configuration.json にありますが、カスタマイズしたり独自のものを使用することもできます。ライブ設定で追跡する新しいバイナリを追加する PR は歓迎します。
このリポジトリには、WinDiff を自動化されたセキュリティリサーチアシスタントに変える エージェントスキル が同梱されています。差分 UI を自分でクリックしなくても、Claude Code に 2 つの Windows バージョンを比較させ、何が変わったか、そしてそれが なぜ重要なのか を説明させることができます。
スキルは .claude/skills/windiff-version-diff-analysis/ にあります。このリポジトリを Claude Code で開くと自動的に読み込まれ、以下のようなリクエストに応答します:
ntoskrnl.exe を 21H2 と 24H2 で比較して、新機能を教えて。"win32k.sys / ci.dll で EDR やアンチチートに影響する変更は?"2 つのバージョンが指定されると、スキルは windiff_cli を駆動してデータベースを生成し、差分を取り、Windows 内部知識(API プレフィックス、コンポーネントの役割)を使って解釈したレポートを生成します。レポートは マルウェア対策/EDR 開発者、アンチチート開発者、脆弱性研究者 の 3 つの対象者向けにフレーミングされ、新しいシステムコール、新しい緩和フラグ(匿名ビットフィールド構造体内に隠れたものも含み、_EPROCESS::MitigationFlags2Values などの親にリンク)、新しい ETW/脅威インテリジェンステレメトリとカーネルコールバック、コード整合性の変更、そしてまったく新しいコンポーネントを強調します。
以下は、プロンプト "ntoskrnl.exe を 25H2 と 26H1 で比較して、新機能を教えて。レポートはマークダウンファイルに書いて。" に対して Claude Opus 4.7 が生成したレポートです: ntoskrnl_25H2_to_26H1.md
スキルのコアとなる差分ロジックは、依存関係のないスタンドアロンの Python スクリプトであり、windiff_cli で生成された任意のデータベースに対して単独で使用できます:
# List the OS versions / binaries available in a database directory
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public --list
# Diff one binary between two OS versions ("version_update_architecture" suffixes)
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public ntoskrnl.exe 21H2_BASE_amd64 22H2_BASE_amd64
人間が読める要約を stderr に、構造化 JSON(追加/削除されたエクスポート、シンボル、モジュール、システムコール、および解決された型/ビットフィールドの変更)を stdout に出力します。完全なワークフローと参考資料については、スキルの SKILL.md を参照してください。