Skip to content

junknet/super-dbi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Super-DBI

高性能 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

核心组件

1. DBM 核心 (dbm.c/h)

  • 线程管理和初始化
  • 代码缓存分配(10MB JIT 空间)
  • Trace 内存管理(1GB trace 缓存)
  • 哈希表缓存机制
  • VMA 内存可读性检测

2. 指令处理 (pie/)

  • Decoder: AArch64 指令解码
  • Encoder: 指令重编码和生成
  • Field Decoder: 指令字段解析

3. 扫描器 (scanner_a64.c)

  • 基本块扫描
  • 分支指令处理(条件/无条件跳转)
  • 代码插桩点注入

4. 分发器 (dispatcher_aarch64)

  • 动态代码分发
  • 上下文切换
  • 寄存器保存/恢复

依赖

  • 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

部署到 Android 设备

编译后自动推送到设备:

xmake build
# 自动执行: adb push build/*/super-dbi.so /data/local/tmp/

使用方法

1. 初始化 DBI

#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();

2. Trace 模式

指令级 Trace (ins_mode)

  • 记录每条执行的指令地址
  • 适合细粒度分析

函数级 Trace (func_mode)

  • 记录函数调用关系
  • 捕获参数和返回值

3. 跳过特定地址

// 添加要跳过的地址
add_skip_address(addr);

输出文件

  • /data/local/tmp/trace_log/dbi_log - DBI 运行日志
  • trace.log - 执行轨迹记录

工具脚本

FFT 频谱分析

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 - 寄存器跳转

性能优化

  1. 代码缓存: 已翻译的代码块缓存复用
  2. 哈希查找: O(1) 快速查找翻译地址
  3. 内存对齐: 0x10 字节对齐提升访问效率
  4. 批量处理: 基本块级别翻译减少开销

调试

启用调试输出

代码中已启用 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: 欢迎技术交流讨论

注意: 请确保在合法合规的前提下使用本工具。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages