Windiffは、オペレーティングシステムのさまざまなバージョンにわたるMicrosoft Windowsバイナリのシンボル、タイプ、およびsyscall情報の閲覧と比較を可能にするオープンソースの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 PESおよびPDBから抽出された閲覧情報が許可され、バージョン間のこの情報を比較することもできます。 Frontendのコードはwindiff_frontendディレクトリにあります。
スケジュールされたGitHubアクションは、 Winbindexから毎日新しい更新を取得し、Windiffのライブバージョンを生成するために使用される構成ファイルを更新します。現在、(無料プラン)ストレージと計算の制限のために、 KBとInsiderのプレビューアップデートのみがライブバージョンには1年未満の更新のみが保持されています。もちろん、必要に応じてこれらの制限なしに、Windiffのローカルバージョンを自分で再構築することができます。そのための次のセクションを参照してください。
注: Winbindex 、インデックス化されたファイルの100%に一意のダウンロードリンクを提供していないため、WindiffではPESの情報が利用できないことがあります。ただし、これらのPESがVirustotalを使用するとすぐに、 Winbindex独自のダウンロードリンクを提供することができ、その後、自動的にWindiffに統合されます。
Windiffの完全なビルドは、 ci/build_frontend.shで「自己文書化」されています。これが中にあるものです:
# 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ですが、カスタマイズするか、独自のものを使用できます。ライブ構成で追跡するために新しいバイナリを追加することを目的としたPRSは大歓迎です。