Hak Cipta 2011-2024 Google LLC.
Repositori ini berisi kode sumber BinDiff. BinDiff adalah alat perbandingan sumber terbuka untuk file biner guna menemukan perbedaan dan persamaan dengan cepat dalam kode yang dibongkar.
BinDiff adalah alat perbandingan sumber terbuka untuk file biner, yang membantu peneliti dan insinyur kerentanan dengan cepat menemukan perbedaan dan persamaan dalam kode yang dibongkar.
Dengan BinDiff, peneliti dapat mengidentifikasi dan mengisolasi perbaikan kerentanan pada patch yang disediakan vendor. Ini juga dapat digunakan untuk mem-porting simbol dan komentar antara pembongkaran beberapa versi biner yang sama. Hal ini membuat pelacakan perubahan dari waktu ke waktu menjadi lebih mudah dan memungkinkan organisasi untuk menyimpan hasil analisis dan memungkinkan transfer pengetahuan di antara analis biner.
Jika Anda ingin mulai menggunakan BinDiff, unduh paket instalasi bawaan dari halaman rilis.
Catatan: BinDiff mengandalkan disassembler terpisah. Di luar kotak, ia dikirimkan dengan dukungan untuk IDA Pro, Binary Ninja dan Ghidra. Halaman disassembler mencantumkan konfigurasi yang didukung.
Sebagian dari manual yang ada tersedia di direktori docs/
.
BinDiff berisi komponen-komponen berikut:
cmake
- File build CMake yang mendeklarasikan dependensi eksternalfixtures
- Kumpulan file pengujian untuk melatih mesin inti BinDiffida
- Integrasi dengan disassembler IDA Projava
- Kode sumber Java. Ini berisi antarmuka pengguna perbedaan visual BinDiff dan perpustakaan utilitas yang sesuai.match
- Mencocokkan algoritma untuk mesin inti BinDiffpackaging
- Sumber paket untuk paket instalasitools
- Helper executable yang dikirimkan bersama produk Instruksi di bawah ini seharusnya cukup untuk membuat kode asli dan komponen berbasis Java.
Petunjuk pembuatan yang lebih detail akan ditambahkan di kemudian hari. Ini termasuk Dockerfile
dan skrip siap pakai untuk membuat paket instalasi.
BinDiff menggunakan CMake untuk menghasilkan file build untuk komponen-komponen yang terdiri dari kode C++ asli.
Dependensi build berikut diperlukan:
Dependensi build berikut bersifat opsional:
deps/idasdk
)Langkah-langkah pembuatan secara umum sama di Windows, Linux, dan macOS. Berikut ini adalah perintah untuk Linux.
Unduh dependensi yang tidak akan diunduh secara otomatis:
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
Selanjutnya, konfigurasikan direktori build dan buat file build:
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
" -DIdaSdk_ROOT_DIR= ${PWD} build/idasdk "
Terakhir, aktifkan build yang sebenarnya. Biner akan ditempatkan di build/out/bindiff-prefix
:
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
Untuk membangun tanpa IDA, cukup ubah langkah konfigurasi di atas menjadi
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
-DBINEXPORT_ENABLE_IDAPRO=OFF
Membangun GUI berbasis Java memerlukan perpustakaan visualisasi grafik pihak ketiga komersial yFiles untuk tampilan dan tata letak grafik. Perpustakaan ini sangat kuat, dan tidak mudah diganti.
Untuk membangunnya, BinDiff menggunakan Gradle 6.x dan Java 11 LTS. Lihat panduan instalasinya untuk petunjuk tentang cara menginstal.
Dengan asumsi Anda adalah pemegang lisensi yFiles, atur variabel lingkungan YFILES_DIR
ke direktori yang berisi yFiles y.jar
dan ysvg.jar
.
Catatan: BinDiff masih menggunakan cabang yFiles 2.x yang lebih lama.
Kemudian panggil Gradle untuk mengunduh dependensi eksternal dan membangun:
jendela:
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
Linux atau macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
Setelah itu direktori ui/build/libs
di subdirektori java
harus berisi artefak bindiff-ui-all.jar
mandiri, yang dapat dijalankan menggunakan perintah java -jar
standar.
Makalah asli yang menguraikan ide umum di balik BinDiff:
Alat lain dalam ruang masalah yang sama:
Proyek menggunakan BinDiff:
BinDiff dilisensikan berdasarkan ketentuan lisensi Apache. Lihat LISENSI untuk informasi lebih lanjut.
Jika Anda ingin berkontribusi, harap baca CONTRIBUTING.md sebelum mengirimkan permintaan penarikan. Anda juga dapat melaporkan bug atau mengajukan permintaan fitur.