WinDiff is an open-source web-based tool for browsing and comparing symbols, data types, and system call information extracted from Microsoft Windows binaries across different operating system versions. It helps reverse engineers, malware analysts, and Windows security researchers identify changes in internal structures and exported functions between releases.
Inspired by ntdiff and built with data from Winbindex, WinDiff provides a searchable interface for examining information derived from Windows Portable Executable (PE) files and Program Database (PDB) files. Its database configuration can be updated as new Windows releases and updates become available.
WinDiff consists of two main components: a command-line database generator written in Rust and a web frontend built with TypeScript and Next.js.
The CLI generates compressed JSON databases from a configuration file. It uses Winbindex to locate and download supported Windows PE binaries and their associated PDB files. Type information is reconstructed with resym, helping make internal structures available for comparison.
This design separates data collection and processing from the web interface. Developers can regenerate the databases when new Windows updates become available or adjust the configuration to suit a particular research project.
The frontend displays the information generated by the CLI. Researchers can browse binary metadata and compare information extracted from different Windows releases, making it easier to investigate changes in functions, symbols, and data structures.
The source code is organized into two principal directories:
windiff_cli: Contains the Rust command-line tool used to generate databases.windiff_frontend: Contains the Next.js frontend used to display and compare the generated data.A scheduled GitHub Actions workflow checks Winbindex for updates and refreshes the configuration used by the live service. Due to hosting storage and compute limits, the live database retains only supported cumulative updates and Insider Preview updates less than one year old, as described by the project.
Some binary records may be unavailable because Winbindex cannot provide unique download links for every indexed file. The availability of a binary’s information therefore depends on the underlying data sources and the project’s database generation process.
Building a local copy allows researchers to customize the database configuration and work beyond the retention limits of the hosted instance. The project’s documented prerequisites include:
Start by cloning the official repository and entering the project directory:
git clone https://github.com/ergrelet/windiff.git cd windiff
Verify the installed toolchain versions:
rustc --version cargo --version node --version npm --version
The database generation step runs the Rust CLI in release mode and writes the generated data to the frontend’s public directory. From the repository root, execute:
cd windiff_cli cargo run --release ../ci/db_configuration.json ../windiff_frontend/public/
The configuration file at ci/db_configuration.json specifies the binaries and Windows releases included in the generated database. You can modify it to track additional supported targets, subject to the availability of their binary and symbol files.
After generating the databases, install the frontend dependencies and create the production build:
cd ../windiff_frontend npm ci npm run build
The npm ci command installs dependencies using the project’s lockfile, while npm run build runs the frontend’s configured production build process. Follow the repository’s current instructions for serving the generated frontend locally.
WinDiff is an analysis aid, not a vulnerability scanner. Differences between Windows builds do not automatically indicate a security flaw, and reconstructed types or symbols may be incomplete when source files or matching PDBs are unavailable.
Visit the official WinDiff repository for the latest source code, build instructions, database configuration, and contribution guidance. Researchers working on Windows internals can also explore forensic analysis tools for related investigative workflows.
By combining automated binary metadata collection with an accessible comparison interface, WinDiff helps researchers investigate how Windows internals evolve across operating system versions. Its local build workflow also provides flexibility for specialized reverse engineering and security research projects.
A data protection platform is a unified system that helps organizations discover, classify, monitor, and…
AI companies operating in or around Switzerland face a compliance challenge that most legal teams…
Two major data privacy laws now govern how organizations handle personal data across Europe; the…
This cheat sheet covers the essential Kali Linux commands every pentester and ethical hacker uses…
When I first started learning malware analysis and reverse engineering, I thought the hardest part…
Both git fetch and git pull talk to a remote repository, but they do very different things to your…