
Herramienta que permite comparar información de símbolos, tipos y llamadas al sistema de binarios de Microsoft Windows en diferentes versiones del SO, utilizando una interfaz web y/o LLMs.
WinDiff es una herramienta web de código abierto que permite navegar y comparar información de símbolos, tipos y llamadas al sistema de archivos binarios de Microsoft Windows en diferentes versiones del sistema operativo. La base de datos de archivos binarios se actualiza automáticamente para incluir información de las últimas actualizaciones de Windows (incluyendo Insider Preview).
Está inspirado en ntdiff y fue posible gracias a Winbindex.
WinDiff consta de dos partes: una herramienta CLI escrita en Rust y un frontend web escrito en TypeScript utilizando el framework Next.js.
La herramienta CLI se usa para generar bases de datos JSON comprimidas a partir de un
archivo de configuración y depende de Winbindex para encontrar y descargar los PE
(y PDB) necesarios. Los tipos se reconstruyen usando resym. La idea detrás de la herramienta
CLI es poder actualizar y regenerar fácilmente las bases de datos a medida que se publican
nuevas versiones de Windows. El código de la herramienta CLI está en el directorio windiff_cli.
El frontend se usa para visualizar los datos generados por la herramienta CLI de una manera
amigable. El frontend sigue el mismo principio que ntdiff, ya que permite navegar por la
información extraída de los PE y PDB oficiales de Microsoft para ciertas versiones de
Microsoft Windows y también permite comparar esta información entre versiones. El código del
frontend está en el directorio windiff_frontend.
Una acción programada de GitHub busca nuevas actualizaciones de Winbindex todos los días y
actualiza el archivo de configuración utilizado para generar la versión en vivo de WinDiff.
Actualmente, debido a limitaciones de almacenamiento y cómputo (planes gratuitos), solo se
conservan las actualizaciones de KB e Insider Preview de menos de un año para la versión
en vivo. Por supuesto, puedes reconstruir una versión local de WinDiff tú mismo sin esas
limitaciones si lo necesitas. Consulta la siguiente sección para eso.
Nota: Winbindex no proporciona enlaces de descarga únicos para el 100% de los archivos
indexados, por lo que puede ocurrir que la información de algunos PE no esté disponible en WinDiff
debido a eso. Sin embargo, en cuanto esos PE estén en VirusTotal, Winbindex
podrá proporcionar enlaces de descarga únicos para ellos y entonces se integrarán
en WinDiff automáticamente.
La compilación completa de WinDiff está "autodocumentada" en ci/build_frontend.sh, que
es el script de compilación utilizado para construir la versión en vivo de WinDiff. Aquí está su contenido:
# 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
El archivo de configuración usado para generar los datos de la versión en vivo de WinDiff
se encuentra aquí: ci/db_configuration.json, pero puedes personalizarlo o usar
el tuyo propio. Se aceptan PRs dirigidos a agregar nuevos binarios para rastrear en la configuración en vivo.
El repositorio incluye una habilidad de agente que convierte a WinDiff en un asistente automatizado de investigación de seguridad. En lugar de hacer clic en la interfaz de diferencias tú mismo, puedes pedirle a Claude Code que compare dos versiones de Windows y redacte qué cambió — y por qué es importante.
La habilidad se encuentra en .claude/skills/windiff-version-diff-analysis/. Cuando abras
este repositorio en Claude Code, se carga automáticamente y se activa con solicitudes como:
ntoskrnl.exe entre 21H2 y 24H2 y dime qué hay de nuevo."win32k.sys / ci.dll que sea relevante para EDR o anti-cheat?"Dadas dos versiones, la habilidad ejecuta windiff_cli para generar las bases de datos,
las compara y produce un informe que interpreta el delta de símbolos/tipos/llamadas al sistema
usando conocimientos internos de Windows (prefijos de API, roles de componentes), enmarcado
para tres audiencias: desarrolladores de anti-malware/EDR, desarrolladores de anti-cheat
e investigadores de vulnerabilidades. Destaca nuevas llamadas al sistema, nuevas banderas de
mitigación (incluyendo bits ocultos dentro de estructuras de campos de bits anónimos, enlazados
a su padre como _EPROCESS::MitigationFlags2Values), nueva telemetría ETW/de inteligencia de
amenazas y callbacks del kernel, cambios en la integridad del código y componentes completamente nuevos.
Aquí hay un informe generado por Claude Opus 4.7 para la solicitud "Compara ntoskrnl.exe entre 25H2 y 26H1 y dime qué hay de nuevo. Escribe tu informe en un archivo markdown": ntoskrnl_25H2_26H1.md
La lógica central de diferencias de la habilidad es un script de Python independiente sin dependencias,
utilizable por sí solo contra cualquier base de datos producida por 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
Imprime un resumen legible para humanos en stderr y JSON estructurado (exportaciones,
símbolos, módulos, llamadas al sistema agregados/eliminados, y cambios resueltos de tipos/campos de bits) en
stdout. Consulta el SKILL.md de la habilidad para el flujo de trabajo completo y material de referencia.