DiffRays は、バイナリのパッチ差分(diff)を取るための研究志向ツールで、脆弱性研究、エクスプロイト開発、リバースエンジニアリングを支援するよう設計されています。IDA Pro と IDA Domain API を活用して関数の疑似コードを抽出し、パッチ適用前後のバイナリ間で構造化された差分比較を行います。
機能
- パッチ差分(Patch Diffing):異なるバイナリバージョン間で関数を比較し、コード変更点を特定します。
- IDA Pro 連携:正確な疑似コード抽出のために IDA Pro と IDA Domain API を使用します。
- SQLite 出力:結果を SQLite データベースに保存し、再利用や分析を容易にします。
- Web インターフェース:組み込みのサーバーモードで、差分結果を対話的に閲覧・検索・可視化できます。
- AutoDiff:脆弱版と修正版のバイナリを(CVE、ファイル、または月指定で)自動取得し、差分取得をエンドツーエンドで実行します。
- 研究向け:脆弱性研究およびエクスプロイト開発のワークフローを支援するよう設計されています。
使い方
> diffrays --help
______ _ __ ________
| _ (_)/ _|/ _| ___ \
| | | |_| |_| |_| |_/ /__ _ _ _ ___
| | | | | _| _| // _` | | | / __|
| |/ /| | | | | | |\ \ (_| | |_| \__ \
|___/ |_|_| |_| \_| \_\__,_|\__, |___/
__/ |
|___/ v2.0 Tau
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 – バイナリ収集と差分取得の自動化
autodiff コマンドは、バイナリを(CVE または手動パラメータで)自動的に取得し、手動ダウンロードなしで差分を実行することで、パッチ分析を効率化します。
これは Windows コンポーネントにのみ対応しており、その他のサードパーティ製品には対応していません。
例 1:CVE で実行
diffrays autodiff –cve CVE-2025-29824
- Winbindex の助けを借りて、当該 CVE に関連する脆弱版および修正版のバイナリを自動的に特定します。
- 差分エンジンを実行します。
- 結果データベースを生成します。
例 2:ファイル + 月で実行
diffrays autodiff -f clfs.sys -m 2025-09
- 2025 年 9 月の更新プログラムから
clfs.sysをダウンロードします。 - その直前のバージョンを特定し、自動的に差分を実行します。
--cveが脆弱なコンポーネントを正しく特定できない場合のフォールバックを提供します(CVE が複数のバイナリに影響する場合や、メタデータが不完全な場合に起こり得ます)。
手動でのバイナリ差分取得
- IDA でパッチ差分を実行
python diffrays.py diff old_binary.exe new_binary.exe
- DiffRays サーバーを起動
python diffrays.py server –db-path diff_results.sqlite
- 結果を表示するには、ブラウザで http://localhost:5555 を開きます。
シンボルなしバイナリの解析
シンボルが含まれていない、またはストリップされたバイナリを差分取得する場合、ヒューリスティックマッチングを有効化できます。ヒューリスティックモードでは、関数名ではなくコードパターンや構造的な類似性に基づいて関数を対応付けます。
注:ヒューリスティックマッチングは関数の一致を 100% 正確に保証するものではありませんが、一般的には十分に機能し、継続的に改善されています。
python diffrays.py diff old_binary.exe new_binary.exe –heuristic
インストール
翻訳元: https://meterpreter.org/the-patch-hunter-automating-1-day-exploits-with-diffrays-and-ida-pro/