
Tool, das den Vergleich von Symbol-, Typ- und Syscall-Informationen von Microsoft Windows-Binärdateien über verschiedene Versionen des Betriebssystems hinweg ermöglicht, unter Verwendung einer Web-UI und/oder LLMs.
WinDiff ist ein Open-Source-Web-Tool, das das Durchsuchen und Vergleichen von Symbol-, Typ- und Syscall-Informationen von Microsoft Windows-Binärdateien über verschiedene Versionen des Betriebssystems hinweg ermöglicht. Die Binärdatenbank wird automatisch aktualisiert, um Informationen aus den neuesten Windows-Updates (einschließlich Insider Preview) zu enthalten.
Es wurde von ntdiff inspiriert und mit Hilfe von Winbindex ermöglicht.
WinDiff besteht aus zwei Teilen: einem CLI-Tool in Rust und einem Web-Frontend in TypeScript mit dem Next.js-Framework.
Das CLI-Tool generiert komprimierte JSON-Datenbanken aus einer Konfigurationsdatei und nutzt Winbindex, um die benötigten PEs (und PDBs) zu finden und herunterzuladen. Typen werden mit resym rekonstruiert. Die Idee hinter dem CLI-Tool ist es, Datenbanken einfach aktualisieren und neu generieren zu können, sobald neue Windows-Versionen veröffentlicht werden. Der Code des CLI-Tools befindet sich im Verzeichnis windiff_cli.
Das Frontend visualisiert die vom CLI-Tool generierten Daten benutzerfreundlich. Es folgt dem gleichen Prinzip wie ntdiff, da es das Durchsuchen von Informationen aus offiziellen Microsoft-PEs und PDBs für bestimmte Windows-Versionen ermöglicht und auch den Vergleich dieser Informationen zwischen Versionen erlaubt. Der Code des Frontends befindet sich im Verzeichnis windiff_frontend.
Eine geplante GitHub-Aktion ruft täglich neue Updates von Winbindex ab und aktualisiert die Konfigurationsdatei, die für die Live-Version von WinDiff verwendet wird. Aufgrund von (kostenlosen) Speicher- und Rechenlimits werden derzeit nur KB- und Insider Preview-Updates, die weniger als ein Jahr alt sind, für die Live-Version aufbewahrt. Sie können natürlich selbst eine lokale Version von WinDiff ohne diese Einschränkungen erstellen, falls nötig. Siehe dazu den nächsten Abschnitt.
Hinweis: Winbindex stellt nicht für 100 % der indizierten Dateien eindeutige Download-Links bereit, daher kann es vorkommen, dass Informationen zu einigen PEs in WinDiff nicht verfügbar sind. Sobald diese PEs jedoch auf VirusTotal sind, kann Winbindex eindeutige Download-Links bereitstellen, und sie werden dann automatisch in WinDiff integriert.
Der vollständige Build von WinDiff ist in ci/build_frontend.sh "selbstdokumentiert", dem Build-Skript für die Live-Version von WinDiff. Hier der Inhalt:
# 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
Die Konfigurationsdatei für die Live-Version von WinDiff befindet sich hier: ci/db_configuration.json. Sie können sie anpassen oder Ihre eigene verwenden. Pull-Requests, die neue Binärdateien zur Live-Konfiguration hinzufügen, sind willkommen.
Das Repository enthält einen Agent-Skill, der WinDiff in einen automatisierten Security-Research-Assistenten verwandelt. Anstatt selbst durch die Diff-Oberfläche zu klicken, können Sie Claude Code bitten, zwei Windows-Versionen zu vergleichen und aufzuschreiben, was sich geändert hat – und warum das wichtig ist.
Der Skill befindet sich in .claude/skills/windiff-version-diff-analysis/. Wenn Sie dieses Repository in Claude Code öffnen, wird er automatisch geladen und auf Anfragen wie die folgenden ausgelöst:
ntoskrnl.exe zwischen 21H2 und 24H2 und sag mir, was es Neues gibt.“win32k.sys / ci.dll geändert, das für EDR oder Anti-Cheat relevant ist?“Bei zwei Versionen treibt der Skill windiff_cli an, um die Datenbanken zu generieren, vergleicht sie und erstellt einen Bericht, der das rohe Symbol-/Typ-/Syscall-Delta mit Windows-Interna-Kenntnissen (API-Präfixe, Komponentenrollen) interpretiert, aufbereitet für drei Zielgruppen: Anti-Malware/EDR-Entwickler, Anti-Cheat-Entwickler und Sicherheitsforscher (Vulnerability Research). Er hebt neue Syscalls, neue Mitigation-Flags (einschließlich Bits, die in anonymen Bitfeld-Strukturen versteckt sind und auf ihre übergeordnete Struktur wie _EPROCESS::MitigationFlags2Values verweisen), neue ETW-/Threat-Intelligence-Telemetrie und Kernel-Callbacks, Code-Integrity-Änderungen sowie brandneue Komponenten hervor.
Hier ein von Claude Opus 4.7 generierter Bericht für die Eingabeaufforderung „Vergleiche ntoskrnl.exe zwischen 25H2 und 26H1 und sag mir, was es Neues gibt. Schreibe deinen Bericht in eine Markdown-Datei“: ntoskrnl_25H2_to_26H1.md
Die Kern-Diff-Logik des Skills ist ein eigenständiges Python-Skript ohne Abhängigkeiten, das eigenständig mit allen von windiff_cli erstellten Datenbanken verwendet werden kann:
# 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
Es gibt eine menschenlesbare Zusammenfassung auf stderr und strukturiertes JSON (hinzugefügte/entfernte Exporte, Symbole, Module, Syscalls und aufgelöste Typ-/Bitfeldänderungen) auf stdout aus. Siehe die SKILL.md des Skills für den vollständigen Workflow und Referenzmaterial.