前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教你如何使用QBDI动态二进制检测框架

教你如何使用QBDI动态二进制检测框架

作者头像
FB客服
发布2019-07-17 09:49:31
1.7K0
发布2019-07-17 09:49:31
举报
文章被收录于专栏:FreeBufFreeBuf

工具介绍

QBDI全名为QuarkslaB Dynamicbinary Instrumentation,它是一个模块化的跨平台以及跨架构的DBI框架。该工具目前支持Linux、macOS、Android、iOS和Windows操作系统,支持的架构有x86、x86-64、ARM和AArch64架构。QBDI的模块化特征意味着它不需要包含任何首选的注入方法,并且可以结合外部注入工具一起使用。QBDI包含了一个基于LD_PRELOAD的小型Linux以及一个动态可执行的macOS注入器(QBDIPreload),它们是QBDI的Python绑定基础,即pyQBDI。QBDI还整合了Frida,一个动态指令工具集。

QBDI针对x86-64架构的支持已经非常成熟了,虽然该工具目前仍针对ARM架构在进行开发,但已经足够执行类似ls或cat这样简单的CLI程序了。工具计划增加对x86和AArch64的支持。

但是,QBDI目前无法处理信号、多线程和C++异常机制。

编译

在构建该项目时,系统需要满足下列依赖:cmake、make(针对Linux和macOS)、ninja(针对Android)、Visual Studio(针对Windows)和C++ 11工具集。

编译过程分为两个步骤:

1.构建本地代码以及依赖; 2.使用代码库构建QBDI;

当前的依赖组件需要用户构建LLVM和Google Test,我们需要本地构建 LLVM,因为QBDI需要使用常规LLVM没有对外提供的私有API,而且QBDI也只能匹配指定版本的API。第一步的操作会进行缓存,并且只用执行一次,后续的构建操作只需要重复第二步骤即可。

QBDI需要使用cmake构建,并要求传递构建配置标识。为了简化操作,我们提供了一个Shell脚本来完场常规配置的构建,大家也可以根据自己的需要来修改脚本,完成QBDI的自定义编译。

Linux

x86-64

在项目结构的根路径创建一个新的目录,并执行Linux配置脚本:

代码语言:javascript
复制
mkdir buildcd build../cmake/config-linux-X86_64.sh

如果构建脚本时提醒你缺失平台依赖的话,你需要重新构建依赖并执行下列命令:

代码语言:javascript
复制
make llvm
make gtest

该命令会重构平台上的依赖组件,接下来你可以重新运行配置脚本并完成项目编译:

代码语言:javascript
复制
../cmake/config-linux-X86_64.sh
make -j4

ARM编译

针对ARM架构,用户可以使用config-linux-ARM.sh配置脚本来完成环境配置,不过这个脚本需要大家针对自己的跨架构编译工具链来进行定制修改:

1.正确的代码必须导出至AS、CC、CXX和STRIP环境变量。 2.「-DCMAKE_C_FLAGS」和「-DCMAKE_CXX_FLAGS」需要包含正确的默认标识(取决于使用的工具链),至少要修改ARM_ARCH、ARM_C_INCLUDE和ARM_CXX_INCLUDE。

macOS

在macOS上编译QBDI需要满足下列条件:

1.Sierra以上版本的macOS; 2.XCode; 3.命令行工具(xcode-select—install); 4.包管理器,例如MacPorts或HomeBrew; 5、 某些工具包(port install cmakewget);

满足上述条件后,在项目目录的根节点新建一个目录,然后执行 macOS 配置脚本:

代码语言:javascript
复制
mkdir build
cd build
../cmake/config-macOS-X86_64.sh

如果构建脚本时提醒你缺失平台依赖的话,你需要重新构建依赖并执行下列命令:

代码语言:javascript
复制
make llvm
make gtest

该命令会重构平台上的依赖组件,接下来你可以重新运行配置脚本并完成项目编译:

代码语言:javascript
复制
../cmake/config-linux-X86_64.shmake -j4

Windows

在Windows上构建项目需要安装Python 3,以及最新版本的CMake。

首先,需要修改config-win-X86_64.py来匹配安装好的Visual Studio,然后运行下列代码:

代码语言:javascript
复制
mkdir buildcd buildpython../cmake/config-win-X86_64.py

如果构建脚本时提醒你缺失平台依赖的话,你需要重新构建依赖并执行下列命令:

代码语言:javascript
复制
MSBuild.exedeps\llvm.vcxprojMSBuild.exedeps\gtest.vcxproj

该命令会重构平台上的依赖组件,接下来你可以重新运行配置脚本并完成项目编译:

代码语言:javascript
复制
python../cmake/config-win-X86_64.pyMSBuild.exe/p:Configuration=Release ALL_BUILD.vcxproj

Android

针对Android平台,需要Android NDK,该功能只在Linux平台上测试过。配置脚本config-android-ARM.sh需要修改以匹配NDK版本以及目标平台:

1.NDK_PATH需指向Android NDK; 2.SDKBIN_PATH需要补充完整,指向NDK所使用的工具集; 3.API_LEVEL需匹配目标Android API版本; 4.正确的代码必须导出至AS、CC、CXX和STRIP环境变量;

项目地址

QBDI:https://github.com/QBDI/QBDI

*参考来源:QBDI,FB小编Alpha_h4ck编译,转载请注明来自 FreeBuf.COM

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工具介绍
  • 编译
    • 编译过程分为两个步骤:
    • Linux
      • x86-64
        • ARM编译
        • macOS
        • Windows
        • Android
          • 项目地址
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档