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, 二进制分析, 云安全运维, 云资产清单, 代码混淆, 内存访问分析, 动态二进制插桩, 恶意代码分析, 数据擦除, 无后门, 沙箱逃逸检测, 脱壳, 自动化分析, 跨架构, 跨站脚本, 逆向工具, 逆向工程, 配置文件