Skip to content

zhyvox/native_vmtrace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Android ARM64 原生指令级动态跟踪器

本项目提供一个预编译的 ARM64 原生跟踪库 (test.so),用于配合 Frida 与 QBDI 对 Android Native 代码进行动态指令级分析。

其设计目标是在不修改目标程序逻辑的前提下,对一次真实函数调用进行执行重放,并记录执行过程中实际运行的 ARM64 指令及对应寄存器状态。

本项目不依赖任何特定应用,目标模块、Hook 位置及调用流程均由外部控制。


设计目标

传统 Hook 通常只能观察函数入口与返回值,而无法完整了解函数内部的执行过程。

本项目利用 QBDI 对真实调用进行动态重放,在保持原始寄存器上下文的基础上,对目标地址范围内执行的每一条 ARM64 指令进行记录,可用于:

  • Native Reverse Engineering
  • Dynamic Binary Instrumentation
  • 漏洞分析
  • 恶意代码分析
  • ARM64 指令研究
  • Android Native 调试

工作原理

整个跟踪过程由外部控制器与跟踪库协同完成。

外部控制器负责:

  • 等待目标模块加载;
  • Hook 目标函数;
  • 捕获真实调用;
  • 保存 ARM64 寄存器上下文;
  • test.so 加载至目标进程;
  • 调用导出的跟踪接口。

跟踪库负责:

  • 初始化 QBDI;
  • 恢复寄存器状态;
  • 重放真实函数调用;
  • 记录目标范围内实际执行的指令;
  • 输出执行日志。

整个过程不会修改目标程序的执行逻辑,仅观察执行行为。


执行流程

真实函数调用
        │
        ▼
捕获 ARM64 寄存器上下文
        │
        ▼
加载 test.so
        │
        ▼
初始化 QBDI
        │
        ▼
重放原始调用
        │
        ▼
记录执行指令
        │
        ▼
输出跟踪结果

下图展示了一次完整跟踪任务的启动过程。


指令输出

跟踪过程中,每条执行过的 ARM64 指令都会输出一条日志。

示例:

[00018452]
pc=0x0000007b4d71f3b4
off=0x0011f3b4

ldr x8, [x0,#0x18]

# x0=0x0000007b36e4d000
# x8=0x0000000000000018

每条记录包含以下信息:

字段 说明
Index 指令序号
pc 当前指令绝对地址
off 相对于目标模块基址的偏移
Instruction ARM64 反汇编结果
Registers 当前指令引用寄存器的实际值

为了减少日志体积,仅输出当前指令实际使用的寄存器。

下图展示了实际生成的跟踪输出。


跟踪模式

Mode 0

记录目标范围内所有执行过的 ARM64 指令。

mode = 0

适用于完整执行分析。


Mode 1

仅记录控制流相关指令。

mode = 1

包括:

  • B
  • BL
  • BR
  • BLR
  • RET
  • CBZ
  • CBNZ
  • TBZ
  • TBNZ

适用于快速分析程序执行路径。


实现特点

  • 基于真实调用进行执行重放
  • ARM64 原生寄存器恢复
  • 基于 QBDI 的动态插桩
  • 支持 memfd 内存加载
  • 支持 android_dlopen_ext()
  • 使用 dlsym() 解析导出接口
  • 支持模块相对偏移输出
  • 支持按地址范围过滤
  • 支持无限制跟踪
  • 指令级寄存器状态输出

技术限制

当前实现具有以下限制:

  • 仅支持 ARM64
  • 通用调用包装器支持整数及指针参数
  • 浮点参数与 SIMD 参数不会自动恢复
  • 不支持可变参数函数
  • 跟踪性能取决于输出范围及日志数量

适用对象

本项目主要面向:

  • Reverse Engineers
  • Security Researchers
  • Android Native Developers
  • Binary Analysts
  • Vulnerability Researchers

建议具备以下基础知识:

  • ARM64
  • ELF
  • Frida
  • QBDI
  • Android Native Runtime
  • Dynamic Binary Instrumentation

免责声明

本项目仅用于合法的软件调试、安全研究、兼容性分析及教学用途。

请确保仅对拥有合法授权的软件或设备进行分析。

About

基于 Frida 与 QBDI 的 Android ARM64 原生指令级动态跟踪框架。

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors