
Strumento che consente di confrontare le informazioni su simboli, tipi e syscall di binari di Microsoft Windows attraverso diverse versioni del sistema operativo, utilizzando un'interfaccia web e/o LLM.
WinDiff è uno strumento open-source basato sul web che consente di navigare e confrontare informazioni su symbol, tipi e syscall di binari Microsoft Windows attraverso diverse versioni del sistema operativo. Il database dei binari viene aggiornato automaticamente per includere informazioni dagli ultimi aggiornamenti Windows (incluse le Insider Preview).
È stato ispirato da ntdiff e reso possibile grazie a Winbindex.
WinDiff è composto da due parti: uno strumento CLI scritto in Rust e un frontend web scritto in TypeScript utilizzando il framework Next.js.
Lo strumento CLI viene utilizzato per generare database JSON compressi a partire da un file di configurazione e si basa su Winbindex per trovare e scaricare i PE (e PDB) necessari. I tipi vengono ricostruiti utilizzando resym. L'idea alla base dello strumento CLI è quella di poter aggiornare e rigenerare facilmente i database man mano che vengono rilasciate nuove versioni di Windows. Il codice dello strumento CLI si trova nella directory windiff_cli.
Il frontend viene utilizzato per visualizzare i dati generati dallo strumento CLI in modo user-friendly. Il frontend segue lo stesso principio di ntdiff, poiché consente di navigare nelle informazioni estratte da PE e PDB ufficiali Microsoft per determinate versioni di Microsoft Windows e anche di confrontare queste informazioni tra versioni diverse. Il codice del frontend si trova nella directory windiff_frontend.
Un'azione GitHub pianificata recupera ogni giorno nuovi aggiornamenti da Winbindex e aggiorna il file di configurazione utilizzato per generare la versione live di WinDiff. Attualmente, a causa delle limitazioni di archiviazione e calcolo (dei piani gratuiti), vengono conservati solo gli aggiornamenti KB e Insider Preview con meno di un anno per la versione live. Ovviamente puoi ricostruire una versione locale di WinDiff da solo, senza queste limitazioni, se necessario. Vedi la sezione successiva per farlo.
Nota: Winbindex non fornisce link di download univoci per il 100% dei file indicizzati, quindi potrebbe accadere che alcune informazioni sui PE non siano disponibili in WinDiff a causa di ciò. Tuttavia, non appena questi PE sono su VirusTotal, Winbindex sarà in grado di fornire link di download univoci per loro e verranno quindi integrati automaticamente in WinDiff.
La compilazione completa di WinDiff è "auto-documentata" in ci/build_frontend.sh, che è lo script di build utilizzato per compilare la versione live di WinDiff. Ecco cosa contiene:
# 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
Il file di configurazione utilizzato per generare i dati per la versione live di WinDiff si trova qui: ci/db_configuration.json, ma puoi personalizzarlo o usarne uno tuo. Le PR mirate ad aggiungere nuovi binari da tracciare nella configurazione live sono benvenute.
Il repository include una skill per agenti che trasforma WinDiff in un assistente automatizzato per la ricerca sulla sicurezza. Invece di navigare manualmente nell'interfaccia di confronto, puoi chiedere a Claude Code di confrontare due versioni di Windows e scrivere cosa è cambiato — e perché è importante.
La skill risiede in .claude/skills/windiff-version-diff-analysis/. Quando apri questo repository in Claude Code, si carica automaticamente e si attiva su richieste come:
ntoskrnl.exe tra 21H2 e 24H2 e dimmi cosa c'è di nuovo."win32k.sys / ci.dll che è rilevante per EDR o anti-cheat?"Date due versioni, la skill guida windiff_cli per generare i database, li confronta e produce un report che interpreta il delta grezzo di symbol/tipi/syscall utilizzando conoscenze interne di Windows (prefissi API, ruoli dei componenti), strutturato per tre destinatari: sviluppatori anti-malware/EDR, sviluppatori anti-cheat e ricercatori di vulnerabilità. Evidenzia nuove syscall, nuovi flag di mitigazione (inclusi i bit nascosti all'interno di struct di bitfield anonimi, collegati al loro genitore come _EPROCESS::MitigationFlags2Values), nuova telemetria ETW/threat-intel e callback del kernel, modifiche all'integrità del codice e componenti completamente nuovi.
Ecco un report generato da Claude Opus 4.7 per il prompt "Confronta ntoskrnl.exe tra 25H2 e 26H1 e dimmi cosa c'è di nuovo. Scrivi il tuo report in un file markdown": ntoskrnl_25H2_to_26H1.md
La logica principale di confronto della skill è uno script Python autonomo senza dipendenze, utilizzabile da solo su qualsiasi database prodotto da 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
Stampa un riepilogo leggibile su stderr e JSON strutturato (export, symbol, moduli, syscall aggiunti/rimossi e modifiche risolte di tipi/bitfield) su stdout. Vedi SKILL.md della skill per il flusso di lavoro completo e il materiale di riferimento.