La instrumentación binaria dinámica de Quarkslab (QBDI) es un marco DBI modular, multiplataforma y de arquitectura cruzada. Su objetivo es admitir sistemas operativos Linux, MacOS, Android, IOS y Windows que se ejecutan en arquitecturas X86, X86-64, ARM y AARCH64. Además de la API C/C ++, las fijaciones de Python y JS/Frida están disponibles para script QBDI. La información sobre qué es un marco DBI y cómo funciona QBDI en la introducción de documentación.
La modularidad de QBDI significa que no contiene un método de inyección preferido y está diseñado para usarse junto con una herramienta de inyección externa. QBDI incluye un inyector Linux y MacOS Tiny ( LD_PRELOAD ) para ejecutables dinámicos (QBDIPReload). QBDI también está completamente integrado con Frida, un kit de herramientas de instrumentación dinámica de referencia, lo que permite que cualquiera use sus poderes combinados.
Una limitación actual es que QBDI no maneja las señales, la lectura múltiple (no se ocupa de la creación de nuevos hilos) y los mecanismos de excepción de C ++. Sin embargo, esas características dependientes del sistema probablemente no serán parte de la biblioteca central (KISS), y deberían integrarse como una nueva capa (para determinar cómo).
| UPC | Sistemas operativos | Ejecución | Información de acceso a la memoria |
|---|---|---|---|
| x86-64 | Android, Linux, MacOS, Windows | Compatible | Compatible |
| x86 | Android, Linux, MacOS, Windows | Compatible | Compatible |
| BRAZO | Android, Linux | Compatible (*) | Compatible (*) |
| Aarch64 | Android, Linux, macOS | Compatible (*) | Compatible (*) |
* Los conjuntos de instrucciones ARM y AARCH64 son compatibles pero en apoyo temprano.
estable



enchufe



Cada nueva versión de QBDI se compila y está disponible en la página de lanzamiento de GitHub.
Pyqbdi está disponible a través de PYPI. El paquete de ruedas se puede descargar o instalar con el siguiente comando:
PIP install Pyqbdi
El paquete PYQBDI es autónomo, tan completamente independiente del paquete C/C ++.
No existe una línea de tiempo de desarrollo estricto o un plan de lanzamiento programado para el proyecto QBDI. Todas las nuevas características y correcciones se fusionan en la rama dev-next . Los paquetes de desarrollo se pueden descargar en los artefactos de:
Para construir este proyecto, se necesitan las siguientes dependencias en su sistema:
Una versión local de LLVM se construye estáticamente dentro de QBDI porque QBDI utiliza API privadas no exportadas por instalaciones regulares de LLVM y porque nuestro código solo es compatible con una versión específica de esas API.
El sistema de compilación QBDI se basa en CMake y requiere pasar los indicadores de configuración de compilación. Para ayudar con este paso, proporcionamos scripts de shell para configuraciones de compilación comunes que siguen el patrón de nombres config-OS-ARCH.sh . La modificación de estos scripts es necesario si desea compilar en modo de depuración o compilar QBDI.
Cree un nuevo directorio en la raíz del árbol de origen y ejecute el script de configuración de Linux:
construcción de mkdir construcción de CD ../cmake/config/config-linux-x86_64.sh ninja
Puede seguir las mismas instrucciones que para x86-64, pero en su lugar, use el script de configuración config-linux-X86.sh .
Compilar QBDI en MacOS requiere algunas cosas:
xcode-select --install )port install cmake wget ninja )Una vez que se cumplan los requisitos, cree un nuevo directorio en la raíz del árbol de origen y ejecute el script de configuración de MacOS:
construcción de mkdir construcción de CD ../cmake/config/config-macos-x86_64.sh ninja
Construir en Windows requiere una instalación pura de Windows de Python 3 (de los paquetes oficiales, esto es obligatorio) para construir nuestras dependencias (realmente esperamos mejorar esto en el futuro). También requiere un CMake y Ninja actualizado.
En primer lugar, se debe configurar el entorno de Visual Studio. Esto se puede hacer con un comando como:
"C: Archivos de programa (x86) Microsoft Visual Studio 2019 Community VC auxiliary build vcvarsall.bat" x64
Luego, se deben ejecutar los siguientes comandos:
construcción de mkdir construcción de CD Python ../cmake/config/config-win-x86_64.py ninja
La compilación cruzada para Android requiere que el NDK (o el SDK) se instale en su estación de trabajo. Por ahora, solo se ha probado en Linux. Si aún no está instalado, puede descargar el último paquete NDK de Android a través del sitio web oficial y extraerlo. Posteriormente, el script de configuración config-android-*.sh debe personalizarse para que coincida con su directorio de instalación NDK y la plataforma de destino.
# Configurar y compilar QBDI X86_64 con un NDK Mkdir Build && CD Build Ndk_path = <your_ndk_path> ../cmake/config/config-doid-x86_64.sh ninja # Configurar y compilar QBDI X86 con un SDK Mkdir Build && CD Build Android_sdk_root = <your_sdk_path> ../cmake/config/config-android-x86.sh ninja
La biblioteca Pyqdbi (aparte del paquete de ruedas) se puede construir pasando únicamente la opción '-DQBDI_TOOLS_PYQBDI = ON' al sistema de compilación CMake.
Sin embargo, si desea construir el paquete de ruedas, puede ejecutar estos comandos:
Python -M PIP Install -Upgrade Pip Python -M PIP Install SetupTools Wheel Build Python -M Build -W
Una versión de Python de 32 bits es obligatoria para la arquitectura X86, mientras que se requiere una de 64 bits para la arquitectura x86-64.