QBDI/QBDI
GitHub: QBDI/QBDI
QBDI 是一个基于 LLVM 的模块化跨平台动态二进制插桩框架,支持多架构多操作系统,可用于运行时分析和监控二进制程序的行为。
Stars: 1753 | Forks: 209
.. image:: https://readthedocs.org/projects/qbdi/badge/?version=stable
:target: https://qbdi.readthedocs.io/en/stable/?badge=stable
:alt: 文档状态
.. image:: https://img.shields.io/github/v/release/QBDI/QBDI
:target: https://github.com/QBDI/QBDI/releases
.. image:: https://img.shields.io/pypi/pyversions/PyQBDI
:target: https://pypi.org/project/PyQBDI/
.. image:: https://img.shields.io/pypi/v/PyQBDI
:target: https://pypi.org/project/PyQBDI/
# 简介
.. intro
QuarkslaB Dynamic binary Instrumentation (QBDI) 是一个模块化、跨平台、跨架构的 DBI 框架。它旨在支持运行在 x86、x86-64、ARM 和 AArch64 架构上的 Linux、macOS、Android、iOS 和 Windows 操作系统。除了 C/C++ API 外,还提供 Python 和 JS/frida 绑定来编写 QBDI 脚本。关于什么是 DBI 框架以及 QBDI 如何工作的信息,可以在 `文档介绍 `_ 中找到。
QBDI 的模块化意味着它不包含首选的注入方法,并且设计为与外部注入工具结合使用。QBDI 包含一个小型的(基于 ``LD_PRELOAD``)用于动态可执行文件的 Linux 和 macOS 注入器 (QBDIPreload)。
QBDI 也完全集成到了 `Frida `_ 中,这是一个参考动态插桩工具包,允许任何人使用它们的组合力量。
当前的一个限制是 QBDI 不处理信号、多线程(它不处理新线程的创建)和 C++ 异常机制。
然而,这些依赖于系统的特性可能不会成为核心库的一部分(KISS),而应该作为一个新层集成(具体方式待定)。
## 状态
.. role:: green
.. role:: yellow
.. role:: orange
.. role:: red
======= ============================== ================== =========================
CPU 操作系统 执行 内存访问信息
======= ============================== ================== =========================
x86-64 Android, Linux, macOS, Windows :green:`支持` :green:`支持`
x86 Android, Linux, macOS, Windows :green:`支持` :green:`支持`
ARM Android, Linux :green:`支持` :green:`支持`
AArch64 Android, Linux, macOS, iOS (*) :green:`支持` :green:`支持`
======= ============================== ================== =========================
\* iOS 支持不稳定,且需要越狱设备。
**stable**
.. image:: https://readthedocs.org/projects/qbdi/badge/?version=stable
:target: https://qbdi.readthedocs.io/en/stable/
:alt: 文档状态
.. image:: https://github.com/QBDI/QBDI/actions/workflows/windows.yml/badge.svg?branch=master
:target: https://github.com/QBDI/QBDI/actions/workflows/windows.yml?query=branch%3Amaster
.. image:: https://github.com/QBDI/QBDI/actions/workflows/linux.yml/badge.svg?branch=master
:target: https://github.com/QBDI/QBDI/actions/workflows/linux.yml?query=branch%3Amaster
.. image:: https://github.com/QBDI/QBDI/actions/workflows/macos.yml/badge.svg?branch=master
:target: https://github.com/QBDI/QBDI/actions/workflows/macos.yml?query=branch%3Amaster
**dev**
.. image:: https://readthedocs.org/projects/qbdi/badge/?version=dev-next
:target: https://qbdi.readthedocs.io/en/dev-next/
:alt: 文档状态
.. image:: https://github.com/QBDI/QBDI/actions/workflows/windows.yml/badge.svg?branch=dev-next
:target: https://github.com/QBDI/QBDI/actions/workflows/windows.yml?query=branch%3Adev-next
.. image:: https://github.com/QBDI/QBDI/actions/workflows/linux.yml/badge.svg?branch=dev-next
:target: https://github.com/QBDI/QBDI/actions/workflows/linux.yml?query=branch%3Adev-next
.. image:: https://github.com/QBDI/QBDI/actions/workflows/macos.yml/badge.svg?branch=dev-next
:target: https://github.com/QBDI/QBDI/actions/workflows/macos.yml?query=branch%3Adev-next
.. intro-end
# 安装
## C/C++/Frida APIs
每个新版本的 QBDI 都会编译并在 GitHub `发布页面 `_ 上提供。
## Python API (PyQBDI)
PyQBDI 可通过 PyPI 获取。wheel 包可以 `下载 `__ 或使用以下命令安装:
```
pip install PyQBDI
```
PyQBDI 包是自包含的,因此完全独立于 C/C++ 包。
## 开发包
QBDI 项目没有严格的开发时间表或预定的发布计划。
所有新功能和修复都会合并到 ``dev-next`` 分支。
开发包可以在以下构建产物中下载:
- `GitHub Actions `__ (用于 Android C/C++/frida API)
- `GitHub Actions `__ (用于 Linux C/C++/frida API,基于 ubuntu)
- `GitHub Actions `__ (用于 macOS C/C++/frida API)
- `GitHub Actions `__ (用于 Windows 包 C/C++ API)
- `GitHub Actions `__ (用于 PyQBDI)
# 编译
.. compil
要构建此项目,您的系统需要以下依赖项:
- cmake >= 3.12
- ninja 或 make
- C++17 工具链 (gcc, clang, Visual Studio 2019, ...)
LLVM 的本地版本在 QBDI 内部静态构建,因为 QBDI 使用了常规 LLVM 安装未导出的私有 API,且我们的代码仅与这些 API 的特定版本兼容。
QBDI 构建系统依赖于 CMake,并需要传递构建配置标志。为了帮助完成此步骤,我们为常见构建配置提供了 shell 脚本,其命名模式为 ``config-OS-ARCH.sh``。如果您想在调试模式下编译或交叉编译 QBDI,则需要修改这些脚本。
## Linux
## x86-64
在源码树的根目录下创建一个新目录,并执行 Linux 配置脚本:
```
mkdir build
cd build
../cmake/config/config-linux-X86_64.sh
ninja
```
## x86
您可以遵循与 x86-64 相同的说明,但需改用 ``config-linux-X86.sh`` 配置脚本。
## macOS
在 macOS 上编译 QBDI 需要以下几点:
* **macOS** 的现代版本(如 Sierra)
* **Xcode**(来自 *App Store* 或 *Apple Developer Tools*)
* **Command Line Tools**(``xcode-select --install``)
* 包管理器(最好是 **MacPorts**,但 *HomeBrew* 也可以)
* 一些软件包(``port install cmake wget ninja``)
满足要求后,在源码树的根目录下创建一个新目录,并执行 macOS 配置脚本:
```
mkdir build
cd build
../cmake/config/config-macOS-X86_64.sh
ninja
```
## Windows
在 Windows 上构建需要纯 Windows 安装的 *Python 3*
(来自官方安装包,这是强制性的),以便构建我们的依赖项
(我们非常希望在未来改进这一点)。
它还需要最新的 CMake 和 Ninja。
首先,必须设置 Visual Studio 环境。这可以通过如下命令完成:
```
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
```
然后,必须运行以下命令:
```
mkdir build
cd build
python ../cmake/config/config-win-X86_64.py
ninja
```
## Android
为 Android 交叉编译需要在您的工作站上安装 NDK(或 SDK)。
目前,它仅在 Linux 下进行了测试。
如果尚未安装,您可以通过 `官方网站 `__
下载最新的 Android NDK 包并解压它。
之后,需要自定义 ``config-android-*.sh`` 配置脚本以匹配您的 NDK 安装目录和目标平台。:
```
# 使用 NDK 配置并编译 QBDI X86_64
mkdir build && cd build
NDK_PATH= ../cmake/config/config-android-X86_64.sh
ninja
# 使用 SDK 配置并编译 QBDI X86
mkdir build && cd build
ANDROID_SDK_ROOT= ../cmake/config/config-android-X86.sh
ninja
```
## PyQBDI 编译
PyQDBI 库(wheel 包除外)可以仅通过向 CMake 构建系统传递 **'-DQBDI_TOOLS_PYQBDI=ON'** 选项来构建。
但是,如果您想构建 wheel 包,可以运行以下命令:
```
python -m pip install --upgrade pip
python -m pip install setuptools wheel build
python -m build -w
```
X86 架构强制需要 32 位版本的 Python,而 X86-64 架构则需要 64 位版本。
.. compil-end
标签:Bash脚本, C++, DBI, DNS 反向解析, Docker支持, Frida, Fuzzing, Hakrawler, Hook技术, IP 地址批量处理, LLVM, Python, x86, 二进制分析, 云安全运维, 云资产清单, 代码混淆, 内存访问分析, 动态二进制插桩, 恶意代码分析, 数据擦除, 无后门, 沙箱逃逸检测, 脱壳, 自动化分析, 跨架构, 跨站脚本, 逆向工具, 逆向工程, 配置文件