高性能 AArch64 动态二进制插桩 (Dynamic Binary Instrumentation) 框架,专为 Android ARM64 平台设计。
- ✅ 高性能 JIT 编译 - 基于代码缓存的即时编译优化
- ✅ 完整的 ARM64 支持 - 支持 AArch64 指令集的解码、编码和分析
- ✅ 灵活的 Trace 模式 - 支持指令级和函数级两种 trace 模式
- ✅ 寄存器分析 - 完整的通用寄存器和 SIMD 寄存器分析
- ✅ 内存管理 - 自定义堆管理机制,优化内存对齐
- ✅ 哈希表缓存 - 高效的代码缓存查找机制
super-dbi/
├── src/
│ ├── dbm.c/h # 核心 DBI 管理模块
│ ├── jit_log.c/h # JIT 日志和寄存器分析
│ ├── common.c # 通用工具函数(哈希表等)
│ ├── pie/ # AArch64 指令编解码
│ │ ├── pie-a64-decoder.c/h
│ │ ├── pie-a64-encoder.c/h
│ │ └── pie-a64-field-decoder.c/h
│ └── scan/ # 扫描和分发器
│ ├── scanner_a64.c
│ ├── dispatcher_aarch64.c
│ └── dispatcher_aarch64.s
├── xmake.lua # 构建配置
└── README.md
- 线程管理和初始化
- 代码缓存分配(10MB JIT 空间)
- Trace 内存管理(1GB trace 缓存)
- 哈希表缓存机制
- VMA 内存可读性检测
- Decoder: AArch64 指令解码
- Encoder: 指令重编码和生成
- Field Decoder: 指令字段解析
- 基本块扫描
- 分支指令处理(条件/无条件跳转)
- 代码插桩点注入
- 动态代码分发
- 上下文切换
- 寄存器保存/恢复
- Capstone: ARM64 反汇编引擎
- XMake: 构建工具
- Android NDK: ARM64 交叉编译
方式 1: 使用环境变量(推荐)
export AARCH64_LIB_PATH=/path/to/your/aarch64_lib
xmake方式 2: 使用系统库
# 安装 capstone 到系统路径
sudo apt install libcapstone-dev # Debian/Ubuntu
sudo pacman -S capstone # Arch Linux
xmake方式 3: 手动配置库路径
# 将库放置到项目目录
mkdir -p libs/aarch64
# 复制 capstone 的 include/ 和 lib/ 到 libs/aarch64/
xmake# Debug 模式
xmake f -m debug
xmake
# Release 模式
xmake f -m release
xmake
# 清理
xmake clean编译后自动推送到设备:
xmake build
# 自动执行: adb push build/*/super-dbi.so /data/local/tmp/#include "dbm.h"
// 初始化 DBI 引擎
// 参数1: 起始地址
// 参数2: pthread_create 地址(可选)
// 参数3: trace 模式 (1=指令级, 2=函数级)
native_init_dbi(start_addr, pthread_create_addr, ins_mode);
// 设置退出地址(可选)
set_exit_addr(exit_addr);
// 启动 DBI
start_dbi();指令级 Trace (ins_mode)
- 记录每条执行的指令地址
- 适合细粒度分析
函数级 Trace (func_mode)
- 记录函数调用关系
- 捕获参数和返回值
// 添加要跳过的地址
add_skip_address(addr);/data/local/tmp/trace_log/dbi_log- DBI 运行日志trace.log- 执行轨迹记录
python fft_plot.py # 分析 trace.log 的执行频率python plot_m.py # 可视化分析- 大小:
0x7FFFF条目 - 冲突处理: 线性探测
- 键值: 指令地址 -> 翻译后地址
- JIT 代码缓存: 10MB (
WRITE_P_SIZE) - Trace 缓存: 1GB (
TRACE_SIZE) - JSpace: 100MB (动态分配区域)
支持的分支类型:
B/BL- 无条件跳转B.cond- 条件跳转CBZ/CBNZ- 比较并跳转TBZ/TBNZ- 测试位并跳转BR/BLR/RET- 寄存器跳转
- 代码缓存: 已翻译的代码块缓存复用
- 哈希查找: O(1) 快速查找翻译地址
- 内存对齐: 0x10 字节对齐提升访问效率
- 批量处理: 基本块级别翻译减少开销
代码中已启用 DEBUG 宏,编译时会输出详细日志:
#define DEBUG // 已在 dbm.h 中定义日志输出到:
- Android logcat: 使用
adebug()宏 - 标准错误输出: 使用
debug()宏
adb logcat | grep "dbi:"- 安全研究
- 逆向工程学习
- 授权的渗透测试
- CTF 竞赛
❌ 禁止用于:
- 未授权的软件破解
- 恶意代码注入
- 侵犯他人隐私
本项目基于开源组件构建:
- uthash: Troy D. Hanson (BSD License)
- 部分代码参考: Beehive Lab MAMBO
欢迎提交 Issue 和 Pull Request!
- Issues: 通过 GitHub Issues 提交问题
- Discussions: 欢迎技术交流讨论
注意: 请确保在合法合规的前提下使用本工具。