L'instrumentation binaire dynamique de Quarkslab (QBDI) est un cadre DBI modulaire, multiplateforme et inter-architecture. Il vise à prendre en charge les systèmes d'exploitation Linux, MacOS, Android, iOS et Windows fonctionnant sur les architectures X86, X86-64, ARM et AARCH64. En plus d'API C / C ++, les liaisons Python et JS / Frida sont disponibles pour le script QBDI. Des informations sur ce qu'est un framework DBI et comment fonctionne QBDI peut être trouvé dans l'introduction de la documentation.
La modularité QBDI signifie qu'elle ne contient pas de méthode d'injection préférée et elle est conçue pour être utilisée en conjonction avec un outil d'injection externe. QBDI comprend un injecteur Linux et macOS pour les exécutables dynamiques ( LD_PRELOAD ). QBDI est également entièrement intégré à Frida, une boîte à outils d'instrumentation dynamique de référence, permettant à quiconque d'utiliser leurs pouvoirs combinés.
Une limitation actuelle est que QBDI ne gère pas les signaux, le multithreading (il ne traite pas de la création de nouveaux threads) et des mécanismes d'exception C ++. Cependant, ces fonctionnalités dépendantes du système ne feront probablement pas partie de la bibliothèque de base (KISS) et devraient être intégrées en tant que nouvelle couche (pour déterminer comment).
| Processeur | Systèmes d'exploitation | Exécution | Informations sur l'accès à la mémoire |
|---|---|---|---|
| x86-64 | Android, Linux, macOS, Windows | Soutenu | Soutenu |
| x86 | Android, Linux, macOS, Windows | Soutenu | Soutenu |
| BRAS | Android, Linux | Prise en charge (*) | Prise en charge (*) |
| AARCH64 | Android, Linux, macOS | Prise en charge (*) | Prise en charge (*) |
* Les ensembles d'instructions ARM et AARCH64 sont pris en charge mais dans le support précoce.
écurie



dev



Chaque nouvelle version QBDI est compilée et mise à disposition sur la page de version GitHub.
PYQBDI est disponible via PYPI. Le package de roues peut être téléchargé ou installé avec la commande suivante:
pip install pyqbdi
Le package PYQBDI est autonome si complètement indépendant du package C / C ++.
Il n'y a pas de calendrier de développement strict ou de plan de libération planifié pour le projet QBDI. Toutes les nouvelles fonctionnalités et correctifs sont fusionnées sur la branche dev-next . Les packages de développement peuvent être téléchargés dans les artefacts de:
Pour construire ce projet, les dépendances suivantes sont nécessaires sur votre système:
Une version locale de LLVM est construite statiquement dans QBDI car QBDI utilise des API privées non exportées par des installations LLVM régulières et parce que notre code n'est compatible qu'avec une version spécifique de ces API.
Le système de construction QBDI repose sur CMake et nécessite de passer des drapeaux de configuration de construction. Pour aider à cette étape, nous fournissons des scripts shell pour les configurations de construction courantes qui suivent le modèle de dénomination config-OS-ARCH.sh . La modification de ces scripts est nécessaire si vous souhaitez compiler en mode débogage ou compiler QBDI.
Créez un nouveau répertoire à la racine de l'arborescence source et exécutez le script de configuration Linux:
construction mkdir build ../cmake/config/config-linux-x86_64.sh ninja
Vous pouvez suivre les mêmes instructions que pour x86-64 mais utilisez plutôt le script de configuration config-linux-X86.sh .
La compilation de QBDI sur macOS nécessite quelques choses:
xcode-select --install )port install cmake wget ninja )Une fois les exigences satisfaites, créez un nouveau répertoire à la racine de l'arborescence source et exécutez le script de configuration macOS:
construction mkdir build ../cmake/config/config-macos-x86_64.sh ninja
S'appuyer sur Windows nécessite une installation Windows pure de Python 3 (à partir des packages officiels, c'est obligatoire) afin de construire nos dépendances (nous espérons vraiment l'améliorer à l'avenir). Il nécessite également un Cmake et Ninja à jour.
Tout d'abord, l'environnement Visual Studio doit être mis en place. Cela peut être fait avec une commande telle que:
"C: Program Files (x86) Microsoft Visual Studio 2019 Community VC Auxiliary Build Vcvarsall.bat" x64
Ensuite, les commandes suivantes doivent être exécutées:
construction mkdir build python ../cmake/config/config-win-x86_64.py ninja
La compilation croisée pour Android nécessite que le NDK (ou le SDK) soit installé sur votre poste de travail. Pour l'instant, il n'a été testé que sous Linux. Si vous n'êtes pas déjà installé, vous pouvez télécharger le dernier package Android NDK via le site officiel et l'extraire. Ensuite, le script config-android-*.sh doit être personnalisé pour correspondre à votre répertoire d'installation NDK et à la plate-forme cible.:
# Configurer et compiler QBDI x86_64 avec un NDK MKDIR BUILD && CD Build Ndk_path = <your_ndk_path> ../cmake/config/config-android-x86_64.sh ninja # Configurer et compiler QBDI x86 avec un SDK MKDIR BUILD && CD Build Android_sdk_root = <your_sdk_path> ../cmake/config/config-android-x86.sh ninja
La bibliothèque PYQDBI (à l'exception du package de roues) peut être construite en passant uniquement l'option '-dqbdi_tools_pyqbdi = sur' option au système de construction cmake.
Cependant, si vous souhaitez construire le package de roues, vous pouvez exécuter ces commandes:
Python -m Pip Install - Pip à niveau Python -M Pip Installation SetUptools Roue Build python -m build -w
Une version 32 bits de Python est obligatoire pour l'architecture x86 tandis qu'une architecture 64 bits est requise pour l'architecture x86-64.