
Outil permettant de comparer les informations de symboles, de types et d'appels système (syscall) des binaires Microsoft Windows à travers différentes versions du système d'exploitation, en utilisant une interface Web et/ou des LLM.
WinDiff est un outil open-source basé sur le web qui permet de naviguer et de comparer les informations de symboles, de types et d'appels système des binaires Microsoft Windows à travers différentes versions du système d'exploitation. La base de données de binaires est mise à jour automatiquement pour inclure les informations des dernières mises à jour Windows (y compris les Insider Preview).
Il a été inspiré par ntdiff et rendu possible grâce à Winbindex.
WinDiff se compose de deux parties : un outil en ligne de commande écrit en Rust et un frontend web écrit en TypeScript utilisant le framework Next.js.
L'outil CLI est utilisé pour générer des bases de données JSON compressées à partir d'un
fichier de configuration et s'appuie sur Winbindex pour trouver et télécharger les PE (et
PDB) nécessaires. Les types sont reconstruits en utilisant resym. L'idée derrière l'outil
CLI est de pouvoir facilement mettre à jour et régénérer les bases de données au fur et à
mesure que de nouvelles versions de Windows sont publiées. Le code de l'outil CLI se trouve
dans le répertoire windiff_cli.
Le frontend est utilisé pour visualiser les données générées par l'outil CLI, de manière
conviviale. Le frontend suit le même principe que ntdiff, car il permet de naviguer dans
les informations extraites des PE et PDB officiels de Microsoft pour certaines versions de
Microsoft Windows et permet également de comparer ces informations entre les versions. Le
code du frontend se trouve dans le répertoire windiff_frontend.
Une action GitHub planifiée récupère chaque jour les nouvelles mises à jour depuis
Winbindex et met à jour le fichier de configuration utilisé pour générer la version en
direct de WinDiff. Actuellement, en raison des limitations de stockage et de calcul (des
offres gratuites), seules les mises à jour KB et Insider Preview de moins d'un an sont
conservées pour la version en direct. Vous pouvez bien sûr reconstruire vous-même une
version locale de WinDiff, sans ces limitations si vous en avez besoin. Voir la section
suivante pour cela.
Remarque : Winbindex ne fournit pas de liens de téléchargement uniques pour 100% des
fichiers indexés, il est donc possible que certaines informations sur les PE ne soient pas
disponibles dans WinDiff pour cette raison. Cependant, dès que ces PE sont sur VirusTotal,
Winbindex pourra fournir des liens de téléchargement uniques pour eux et ils seront alors
intégrés automatiquement dans WinDiff.
La construction complète de WinDiff est « auto-documentée » dans ci/build_frontend.sh,
qui est le script de construction utilisé pour construire la version en direct de WinDiff.
Voici ce qu'il contient :
# Résoudre le dossier racine du projet
PROJECT_ROOT=$(git rev-parse --show-toplevel)
# Générer les bases de données
cd "$PROJECT_ROOT/windiff_cli"
cargo run --release "$PROJECT_ROOT/ci/db_configuration.json" "$PROJECT_ROOT/windiff_frontend/public/"
# Construire le frontend
cd "$PROJECT_ROOT/windiff_frontend"
npm ci
npm run build
Le fichier de configuration utilisé pour générer les données de la version en direct de
WinDiff se trouve ici : ci/db_configuration.json, mais vous pouvez le personnaliser ou
utiliser le vôtre. Les PRs visant à ajouter de nouveaux binaires à suivre dans la
configuration en direct sont les bienvenues.
Le dépôt fournit une compétence d'agent qui transforme WinDiff en un assistant automatisé de recherche en sécurité. Au lieu de parcourir vous-même l'interface de comparaison, vous pouvez demander à Claude Code de comparer deux versions de Windows et de rédiger ce qui a changé — et pourquoi c'est important.
La compétence se trouve dans .claude/skills/windiff-version-diff-analysis/. Lorsque vous
ouvrez ce dépôt dans Claude Code, elle se charge automatiquement et se déclenche sur des
demandes comme :
ntoskrnl.exe entre 21H2 et 24H2 et dis-moi ce qu'il y a de nouveau."win32k.sys / ci.dll qui importe pour les EDR ou l'anti-cheat ?"Étant donné deux versions, la compétence pilote windiff_cli pour générer les bases de
données, les compare, et produit un rapport qui interprète le delta brut des
symboles/types/appels système en utilisant des connaissances internes de Windows (préfixes
d'API, rôles des composants), présenté pour trois publics : les développeurs
anti-malware/EDR, les développeurs anti-cheat et les chercheurs en vulnérabilités.
Elle met en évidence les nouveaux appels système, les nouveaux indicateurs d'atténuation (y
compris les bits cachés dans les structures de champs de bits anonymes, reliés à leur parent
comme _EPROCESS::MitigationFlags2Values), les nouvelles télémétries ETW/renseignement sur
les menaces et rappels noyau, les modifications d'intégrité du code, et les tout nouveaux
composants.
Voici un rapport généré par Claude Opus 4.7 pour la demande "Compare ntoskrnl.exe entre 25H2 et 26H1 et dis-moi ce qu'il y a de nouveau. Rédige ton rapport dans un fichier markdown" : ntoskrnl_25H2_to_26H1.md
La logique de comparaison principale de la compétence est un script Python autonome sans
dépendances, utilisable seul sur n'importe quelles bases de données produites par
windiff_cli :
# Lister les versions de système d'exploitation / binaires disponibles dans un répertoire de bases de données
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public --list
# Comparer un binaire entre deux versions de système d'exploitation (suffixes "version_update_architecture")
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public ntoskrnl.exe 21H2_BASE_amd64 22H2_BASE_amd64
Il imprime un résumé lisible par l'homme sur stderr et du JSON structuré (exports,
symboles, modules, appels système ajoutés/supprimés, et modifications de types/champs de
bits résolues) sur stdout. Voir le SKILL.md de la compétence pour le flux de travail
complet et le matériel de référence.