Skip to main content

Binary Diff Analysis Tool - Decompile, Compare, and Visualize Binary Changes

Project description

DiffRays Logo

DiffRays - IDA Pro Binary Diffing Engine

DiffRays is a research-oriented tool for binary patch diffing, designed to aid in vulnerability research, exploit development, and reverse engineering. It leverages IDA Pro and the IDA Domain API to extract pseudocode of functions and perform structured diffing between patched and unpatched binaries.


✨ Features

  • 🔎 Patch Diffing: Compare functions across different binary versions to identify code changes.
  • 🧩 IDA Pro Integration: Uses IDA Pro and the IDA Domain API for accurate pseudocode extraction.
  • 📂 SQLite Output: Stores results in a SQLite database for easy reuse and analysis.
  • 🌐 Web Interface: Built-in server mode to browse, search, and visualize diff results interactively.
  • 🤖 AutoDiff: Automatically fetches vulnerable and patched binaries (via CVE, file, or month) and runs the diff end-to-end.
  • 📊 Research-Ready: Designed to support vulnerability research and exploit development workflows.

🛠️ Requirements


⚙️ Installation

Quick Install (Recommended)

pip install diffrays

Alternative: Install from Source

If you want to install from the latest development version:

git clone https://github.com/pwnfuzz/diffrays
cd diffrays
pip install .

🔧 Setup

Setup IDADIR environment variable to point to your IDA installation directory:

Windows:
    set IDADIR="[IDA Installation Directory]"

Linux:
    export IDADIR="[IDA Installation Directory]"

🚀 Usage

> diffrays --help

______ _  __  ________
|  _  (_)/ _|/ _| ___ \
| | | |_| |_| |_| |_/ /__ _ _   _ ___
| | | | |  _|  _|    // _` | | | / __|
| |/ /| | | | | | |\ \ (_| | |_| \__ \
|___/ |_|_| |_| \_| \_\__,_|\__, |___/
                             __/ |
                            |___/      v1.6.1 Pi

usage: diffrays [-h] {diff,server,autodiff} ...

Binary Diff Analysis Tool - Decompile, Compare, and Visualize Binary Changes

positional arguments:
  {diff,server,autodiff}
                        Command to execute
    diff                Analyze two binaries and generate differential database
    server              Launch web server to view diff results
    autodiff            Auto-download binaries (via CVE or manual input) and run diff

options:
  -h, --help            show this help message and exit

Examples:
  diffrays autodiff --cve CVE-2025-29824
  diffrays autodiff -f clfs.sys -m 2025-09
  diffrays autodiff -f clfs.sys -m 2025-09 -w 2023-H2
  diffrays diff old_binary.exe new_binary.exe
  diffrays diff old.so new.so -o custom_name.sqlite --log
  diffrays server --db-path result_old_new_20231201.sqlite --debug

For more information, visit: https://github.com/pwnfuzz/diffrays

🔄 AutoDiff – Automatic Binary Collection & Diffing

The autodiff command streamlines patch analysis by automatically fetching binaries (via CVE or manual parameters) and running a diff without manual downloads.

This works only for Windows components, not for other third-party products.

Example 1: Run by CVE

    diffrays autodiff --cve CVE-2025-29824

This will:

  • Automatically locate vulnerable and patched binaries related to the CVE with the help of Winbindex.
  • Run the diff engine.
  • Generate a results database.

Example 2: Run by File + Month

    diffrays autodiff -f clfs.sys -m 2025-09

This will:

  • Download clfs.sys from the September 2025 update.
  • Locate its prior version and run a diff automatically.
  • Provide a fallback when --cve doesn’t correctly identify the vulnerable component (which can happen if the CVE affects multiple binaries or metadata is incomplete).

⚙️ Manual Binary Diffing

  1. Run Patch Diffing in IDA
    python diffrays.py diff old_binary.exe new_binary.exe
  1. Start the DiffRays Server
    python diffrays.py server --db-path diff_results.sqlite
  1. Open your browser at http://localhost:5555 to view results.

🔬 Example Workflows

Manual Diffing CVE-2025-29824

  1. Collect target binaries

    • CVE-2025-1246 affects the Common Log File System driver (Clfs.sys).
    • Download the two versions of the driver from Microsoft’s update packages (via WinBIndex or your preferred source):
    • Save them into a working directory:
    curl -L -o clfs_10.0.22621.5037.sys https://msdl.microsoft.com/download/symbols/clfs.sys/4A2750956f000/clfs.sys
    curl -L -o clfs_10.0.22621.5189.sys https://msdl.microsoft.com/download/symbols/clfs.sys/68C175656f000/clfs.sys
    
  2. Run DiffRays

    python diffrays.py diff clfs_10.0.22621.5037.sys clfs_10.0.22621.5189.sys
    
  3. Start the web server

    python diffrays.py server --db-path clfs_diff.sqlite
    
  4. Browse interactively


  5. Browse Diff Results

    • The Diff Result page shows the results of binary diffing and can be sorted based on changes.

  6. View Function Details

    • Clicking on a function displays the detailed diff result.

Automatic Diffing - CVE-2025-53149

  1. Run AutoDiff with a CVE ID
    diffrays autodiff --cve CVE-2025-53149
  1. Automatic Analysis Diffrays will:
    - Identify the affected component.
    - Download both vulnerable and patched binaries.
    - Perform the diff and generate a results database automatically.


📖 Use Cases

  • Researching Microsoft Patch Tuesday vulnerabilities
  • Identifying security fixes introduced in new software versions
  • Supporting exploit development by analyzing patched vs. unpatched code paths
  • Reverse engineering software updates

💡 Inspired By

DiffRays takes inspiration from prior research and tools in the binary diffing space, including:

  • BinDiff - Quickly find differences and similarities in disassembled code.
  • Diaphora - Diaphora, the most advanced Free and Open Source program diffing tool.
  • Ghidriff - Python Command-Line Ghidra Binary Diffing Engine

⚠️ Disclaimer

This project is intended for educational and research purposes only. The author does not condone or encourage malicious use of this tool.


📜 License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

diffrays-1.6.1.tar.gz (273.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

diffrays-1.6.1-py3-none-any.whl (283.4 kB view details)

Uploaded Python 3

File details

Details for the file diffrays-1.6.1.tar.gz.

File metadata

  • Download URL: diffrays-1.6.1.tar.gz
  • Upload date:
  • Size: 273.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.18

File hashes

Hashes for diffrays-1.6.1.tar.gz
Algorithm Hash digest
SHA256 ac7fc8e4a36e536adb0a564b9cd4d7a5d32cd1fbc0a2fd659f7bfdefe438a357
MD5 537d1e3ab45543cf1aafc6989d2da2b2
BLAKE2b-256 ee20b09a854f743e246718296e0be6b0f5bdb84f9ac05a06b4ae3fa56157419a

See more details on using hashes here.

File details

Details for the file diffrays-1.6.1-py3-none-any.whl.

File metadata

  • Download URL: diffrays-1.6.1-py3-none-any.whl
  • Upload date:
  • Size: 283.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.18

File hashes

Hashes for diffrays-1.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f7f4d64d9a3c3dbaf345197b791e44c22b31f54156750cdc0e2db90d140b199
MD5 ab371b4b4c68b847ab97aa98c539475f
BLAKE2b-256 9165dfccad101a8cd44c8a1d24a7d4e4fffd59d60033bafeb36b4f9630884245

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page