A instrumentação binária dinâmica do Quarkslab (QBDI) é uma estrutura de DBI modular, plataforma cruzada e cruzada. O objetivo é oferecer suporte a sistemas operacionais Linux, MacOS, Android, iOS e Windows em execução nas arquiteturas x86, x86-64, braço e aarch64. Além da API C/C ++, as ligações Python e JS/Frida estão disponíveis para o script qbdi. Informações sobre o que é uma estrutura do DBI e como o QBDI funciona podem ser encontradas na introdução da documentação.
A modularidade QBDI significa que não contém um método de injeção preferido e foi projetado para ser usado em conjunto com uma ferramenta de injeção externa. O QBDI inclui um pequeno injetor Linux e MacOS baseado em LD_PRELOAD para executores dinâmicos (QBDipreload). O QBDI também está totalmente integrado ao FRIDA, um kit de ferramentas de instrumentação dinâmica de referência, permitindo que alguém use seus poderes combinados.
Uma limitação atual é que o QBDI não lida com sinais, multithreading (não lida com a criação de novos threads) e mecanismos de exceção C ++. No entanto, esses recursos dependentes do sistema provavelmente não farão parte da Biblioteca Core (KISS) e devem ser integrados como uma nova camada (a ser determinada como).
| CPU | Sistemas operacionais | Execução | Informações sobre acesso à memória |
|---|---|---|---|
| x86-64 | Android, Linux, MacOS, Windows | Suportado | Suportado |
| x86 | Android, Linux, MacOS, Windows | Suportado | Suportado |
| BRAÇO | Android, Linux | Suportado (*) | Suportado (*) |
| AARCH64 | Android, Linux, MacOS | Suportado (*) | Suportado (*) |
* Os conjuntos de instruções do ARM e AARCH64 são suportados, mas no apoio inicial.
estável



Dev



Cada nova versão do QBDI é compilada e disponibilizada na página de lançamento do GitHub.
Pyqbdi está disponível através do Pypi. O pacote das rodas pode ser baixado ou instalado com o seguinte comando:
pip install pyqbdi
O pacote pyqbdi é independente independente do pacote C/C ++.
Não existe uma linha do tempo de desenvolvimento estrita ou um plano de lançamento programado para o projeto QBDI. Todos os novos recursos e correções são mesclados na filial dev-next . Pacotes desenvolvidos podem ser baixados nos artefatos de:
Para construir este projeto, são necessárias as seguintes dependências no seu sistema:
Uma versão local do LLVM é criada estaticamente no QBDI porque o QBDI usa APIs privadas não exportadas por instalações regulares de LLVM e porque nosso código é compatível apenas com uma versão específica dessas APIs.
O Sistema de Construção QBDI depende do CMake e requer passa os sinalizadores de configuração de compilação. Para ajudar nesta etapa, fornecemos scripts de shell para configurações de compilação comuns que seguem o padrão de nomenclatura config-OS-ARCH.sh . A modificação desses scripts é necessária se você deseja compilar no modo de depuração ou no QBDI cruzado.
Crie um novo diretório na raiz da árvore de origem e execute o script de configuração do Linux:
mkdir Build CD Build ../cmake/config/config-linux-x86_64.sh Ninja
Você pode seguir as mesmas instruções que para x86-64, mas, em vez disso, use o script de configuração config-linux-X86.sh .
Compilar o qbdi no macOS requer algumas coisas:
xcode-select --install )port install cmake wget ninja )Depois que os requisitos forem atendidos, crie um novo diretório na raiz da árvore de origem e execute o script de configuração do MacOS:
mkdir Build CD Build ../cmake/config/config-macos-x86_64.sh Ninja
A construção do Windows requer uma instalação pura do Python 3 (dos pacotes oficiais, isso é obrigatório) para construir nossas dependências (realmente esperamos melhorar isso no futuro). Também requer um CMake e Ninja atualizados.
Primeiro de tudo, o ambiente do Visual Studio deve ser configurado. Isso pode ser feito com um comando como:
"C: Arquivos de Programas (x86) Microsoft Visual Studio 2019 Community VC Auxiliar Build VCvarsall.bat" x64
Então, os seguintes comandos devem ser executados:
mkdir Build CD Build python ../cmake/config/config-win-x86_64.py Ninja
A compilação cruzada para o Android exige que o NDK (ou o SDK) seja instalado em sua estação de trabalho. Por enquanto, ele foi testado apenas no Linux. Se ainda não estiver instalado, você pode baixar o mais recente pacote NDK do Android no site oficial e extraí -lo. Posteriormente, o script de configuração config-android-*.sh
# Configurar e compilar qbdi x86_64 com um ndk mkdir build && cd build Ndk_path = <Your_NDK_Path> ../cmake/config/config-android-x86_64.sh Ninja # Configurar e compilar qbdi x86 com um SDK mkdir build && cd build Android_sdk_root = <your_sdk_path> ../cmake/config/config-android-x86.sh Ninja
A biblioteca Pyqdbi (além do pacote da roda) pode ser construída passando apenas a opção '-dqbdi_tools_pyqbdi = na opção' para o sistema de construção cmake.
No entanto, se você deseja construir o pacote de rodas, poderá executar esses comandos:
python -m pip install -upgrade pip python -m pip install stopuptools wheel build python -m build -w
Uma versão de 32 bits do Python é obrigatória para a arquitetura x86, enquanto uma de 64 bits é necessária para a arquitetura x86-64.