Instrumentasi biner dinamis quarkslab (QBDI) adalah kerangka kerja DBI modular, lintas platform, dan lintas arsitektur. Ini bertujuan untuk mendukung sistem operasi Linux, MacOS, Android, iOS dan Windows yang berjalan pada arsitektur x86, x86-64, ARM dan AARCH64. Selain C/C ++ API, Python dan JS/Frida Bindings tersedia untuk skrip QBDI. Informasi tentang apa itu kerangka kerja DBI dan cara kerja QBDI dapat ditemukan dalam pengantar dokumentasi.
Modularitas QBDI berarti tidak mengandung metode injeksi yang disukai dan dirancang untuk digunakan bersama dengan alat injeksi eksternal. QBDI mencakup injektor Linux dan MacOS yang kecil (berbasis LD_PRELOAD ) untuk Executable Dynamic (QBDipReload). QBDI juga sepenuhnya terintegrasi dengan Frida, toolkit instrumentasi dinamis referensi, yang memungkinkan siapa pun untuk menggunakan kekuatan gabungan mereka.
Keterbatasan saat ini adalah bahwa QBDI tidak menangani sinyal, multithreading (tidak berurusan dengan mekanisme pengecualian utas baru) dan mekanisme pengecualian C ++. Namun, fitur-fitur yang bergantung pada sistem mungkin tidak akan menjadi bagian dari perpustakaan inti (KISS), dan harus diintegrasikan sebagai lapisan baru (untuk ditentukan bagaimana).
| CPU | Sistem Operasi | Eksekusi | Informasi akses memori |
|---|---|---|---|
| x86-64 | Android, Linux, MacOS, Windows | Didukung | Didukung |
| x86 | Android, Linux, MacOS, Windows | Didukung | Didukung |
| LENGAN | Android, Linux | Didukung (*) | Didukung (*) |
| Aarch64 | Android, Linux, MacOS | Didukung (*) | Didukung (*) |
* Set instruksi ARM dan AARCH64 didukung tetapi dalam dukungan awal.
stabil



dev



Setiap versi QBDI baru disusun dan tersedia di halaman rilis GitHub.
Pyqbdi tersedia melalui PYPI. Paket roda dapat diunduh atau diinstal dengan perintah berikut:
Pip Instal Pyqbdi
Paket PyQBDI mandiri sehingga sepenuhnya independen dari paket C/C ++.
Tidak ada garis waktu pengembangan yang ketat atau rencana rilis yang dijadwalkan untuk proyek QBDI. Semua fitur dan perbaikan baru digabungkan ke cabang dev-next . Paket Devel dapat diunduh dalam artefak:
Untuk membangun proyek ini, dependensi berikut diperlukan pada sistem Anda:
Versi lokal LLVM secara statis dibangun dalam QBDI karena QBDI menggunakan API pribadi yang tidak diekspor oleh instalasi LLVM biasa dan karena kode kami hanya kompatibel dengan versi spesifik API tersebut.
QBDI Build System bergantung pada CMake dan perlu melewati bendera konfigurasi build. Untuk membantu langkah ini, kami menyediakan skrip shell untuk konfigurasi build umum yang mengikuti pola penamaan config-OS-ARCH.sh . Memodifikasi skrip ini diperlukan jika Anda ingin mengkompilasi dalam mode debug atau kompilasi silang QBDI.
Buat direktori baru di akar pohon sumber, dan jalankan skrip konfigurasi Linux:
MKDIR Build cd build ../cmake/config/config-linux-x86_64.sh ninja
Anda dapat mengikuti instruksi yang sama seperti untuk x86-64 tetapi sebagai gantinya, gunakan skrip konfigurasi config-linux-X86.sh .
Mengkompilasi QBDI pada macOS membutuhkan beberapa hal:
xcode-select --install )port install cmake wget ninja )Setelah persyaratan terpenuhi, buat direktori baru di akar pohon sumber, dan jalankan skrip konfigurasi macOS:
MKDIR Build cd build ../cmake/config/config-macos-x86_64.sh ninja
Membangun di Windows membutuhkan pemasangan Windows murni Python 3 (dari paket resmi, ini wajib) untuk membangun ketergantungan kami (kami benar -benar berharap dapat memperbaiki ini di masa depan). Ini juga membutuhkan cmake dan ninja terkini.
Pertama -tama, lingkungan studio visual harus diatur. Ini bisa dilakukan dengan perintah seperti:
"C: Program Files (x86) Microsoft Visual Studio 2019 Community VC Auxiliary build vcvarsall.bat" x64
Kemudian, perintah berikut harus dijalankan:
MKDIR Build cd build Python ../cmake/config/config-win-x86_64.py ninja
Kompilasi silang untuk Android membutuhkan NDK (atau SDK) untuk diinstal di workstation Anda. Untuk saat ini, itu hanya diuji di bawah Linux. Jika belum diinstal, Anda dapat mengunduh paket NDK Android terbaru melalui situs web resmi dan mengekstraknya. Setelah itu, skrip konfigurasi config-android-*.sh
# Konfigurasikan dan kompilasi QBDI X86_64 dengan NDK mkdir build && cd build Ndk_path = <your_ndk_path> ../cmake/config/config-android-x86_64.sh ninja # Konfigurasikan dan kompilasi QBDI X86 dengan SDK mkdir build && cd build Android_sdk_root = <your_sdk_path> ../cmake/config/config-android-x86.sh ninja
Perpustakaan pyqdbi (terlepas dari paket roda) dapat dibangun dengan semata-mata melewati opsi '-dqbdi_tools_pyqbdi = on' ke sistem build cmake.
Namun, jika Anda ingin membangun paket roda, Anda dapat menjalankan perintah ini:
Python -M Pip Instal -Pip -Upgrade Pip Python -M Pip Instal setuptools roda build python -m build -w
Versi python 32-bit wajib untuk arsitektur x86 sedangkan 64-bit diperlukan untuk arsitektur x86-64.