Quarkslab Dynamic Binary Instrumentation (QBDI) ist ein modulares, plattformübergreifendes und Kreuzarchitektur-DBI-Framework. Ziel ist es, Linux-, MacOS-, Android-, iOS- und Windows-Betriebssysteme zu unterstützen, die auf X86-, X86-64-, ARM- und AARG64-Architekturen ausgeführt werden. Zusätzlich von C/C ++ - API sind Python- und JS/Frida -Bindungen für Skript QBDI verfügbar. Informationen zu einem DBI -Framework und wie QBDI -Arbeiten in der Einführung von Dokumentation zu finden sind.
QBDI -Modularität bedeutet, dass sie keine bevorzugte Injektionsmethode enthält und in Verbindung mit einem externen Injektionswerkzeug verwendet werden soll. QBDI enthält einen winzigen ( LD_PRELOAD ) Linux- und MacOS -Injektor für dynamische ausführbare Produkte (QBDipreload). QBDI ist auch vollständig in Frida, ein Referenzdynamik -Instrumentierungs -Toolkit, integriert, sodass jeder seine kombinierten Kräfte anwenden kann.
Eine aktuelle Einschränkung besteht darin, dass QBDI keine Signale, Multithreading (es nicht mit der Erstellung neuer Threads) und C ++ - Ausnahmemechanismen behandelt. Diese systemabhängigen Merkmale werden jedoch wahrscheinlich nicht Teil der Kernbibliothek (KISS) sein und sollten als neue Schicht integriert werden (um festzustellen, wie).
| CPU | Betriebssysteme | Ausführung | Speicherzugriffsinformationen |
|---|---|---|---|
| x86-64 | Android, Linux, MacOS, Windows | Unterstützt | Unterstützt |
| x86 | Android, Linux, MacOS, Windows | Unterstützt | Unterstützt |
| ARM | Android, Linux | Unterstützt (*) | Unterstützt (*) |
| Aarch64 | Android, Linux, macos | Unterstützt (*) | Unterstützt (*) |
* Die Anweisungssätze von Arm und AARG64 werden unterstützt, aber frühzeitig.
stabil



Dev



Jede neue QBDI -Version wird auf der GitHub -Release -Seite zusammengestellt und zur Verfügung gestellt.
Pyqbdi ist über PYPI erhältlich. Das Radpaket kann entweder mit dem folgenden Befehl heruntergeladen oder installiert werden:
PIP Installieren Sie PYQBDI
Das PYQBDI-Paket ist so unabhängig von dem C/C ++-Paket in sich geschlossen.
Für das QBDI -Projekt gibt es keinen strengen Entwicklungszeitleiste oder geplante Veröffentlichungsplan. Alle neuen Funktionen und Korrekturen werden in den dev-next Zweig zusammengefasst. Devel -Pakete können in den Artefakten von: heruntergeladen werden:
Um dieses Projekt zu erstellen, sind die folgenden Abhängigkeiten von Ihrem System erforderlich:
Eine lokale Version von LLVM ist statisch in QBDI aufgebaut, da QBDI private APIs verwendet, die nicht von regulären LLVM -Installationen exportiert werden und weil unser Code nur mit einer bestimmten Version dieser APIs kompatibel ist.
Das QBDI -Build -System basiert auf CMAKE und erfordert, dass sie Build -Konfigurationsflags übergeben müssen. Um diesen Schritt zu unterstützen, stellen wir Shell-Skripte für gemeinsame Erstellungskonfigurationen bereit, die dem config-OS-ARCH.sh folgen. Das Ändern dieser Skripte ist erforderlich, wenn Sie im Debug-Modus oder im Cross-Compile-QBDI kompilieren möchten.
Erstellen Sie ein neues Verzeichnis am Root des Quellbaums und führen Sie das Linux -Konfigurationsskript aus:
Mkdir Build CD -Build ../cmake/config/config-linux-x86_64.sh Ninja
Sie können dieselben Anweisungen wie für x86-64 befolgen, sondern verwenden Sie das Konfigurationsskript config-linux-X86.sh .
Das Kompilieren von QBDI auf MacOS erfordert ein paar Dinge:
xcode-select --install )port install cmake wget ninja )Sobald die Anforderungen erfüllt sind, erstellen Sie ein neues Verzeichnis am Stamm zur Quellbaum und führen Sie das MacOS -Konfigurationsskript aus:
Mkdir Build CD -Build ../cmake/config/config-macos-x86_64.sh Ninja
Auf den Windows erfordert eine reine Windows -Installation von Python 3 (aus den offiziellen Paketen, dies ist obligatorisch), um unsere Abhängigkeiten aufzubauen (wir hoffen wirklich, dies in Zukunft zu verbessern). Es erfordert auch eine aktuelle CMake und Ninja.
Zunächst muss die Visual Studio -Umgebung eingerichtet werden. Dies kann mit einem Befehl wie:
"C: Programme (x86) Microsoft Visual Studio 2019 Community VC Auxiliary Build vcvarsall.bat" x64
Dann müssen die folgenden Befehle ausgeführt werden:
Mkdir Build CD -Build python ../cmake/config/config-win-x86_64.py Ninja
Für Android-Kompilieren muss der NDK (oder das SDK) auf Ihrer Workstation installiert werden. Im Moment wurde es nur unter Linux getestet. Wenn nicht bereits installiert, können Sie das neueste Android NDK -Paket über die offizielle Website herunterladen und extrahieren. Anschließend muss das Konfigurationsskript config-android-*.sh Konfiguration so angepasst werden, dass es Ihrem NDK-Installationsverzeichnis und der Zielplattform entspricht.:::::::
# Konfigurieren und kompilieren Sie QBDI x86_64 mit einem NDK Mkdir Build && CD Build Ndk_path = <your_ndk_path> ../cmake/config/config-android-x86_64.sh Ninja # Konfigurieren und kompilieren Sie QBDI X86 mit einem SDK Mkdir Build && CD Build Android_sdk_root = <your_sdk_path> ../cmake/config/config-android-x86.sh Ninja
Die PYQDBI-Bibliothek (abgesehen vom Radpaket) kann erstellt werden, indem ausschließlich die Option '-dqbdi_tools_pyqbdi = on' an das CMake-Build-System übergeben werden.
Wenn Sie jedoch das Radpaket erstellen möchten, können Sie diese Befehle ausführen:
Python -m PIP Installation - -Upgrade PIP Python -M Pip Installieren Sie Setuptools Rad Build Python -m Build -W
Eine 32-Bit-Version von Python ist für die X86-Architektur obligatorisch, während für die X86-64-Architektur ein 64-Bit-Einer erforderlich ist.