zhyvox/native_vmtrace

GitHub: zhyvox/native_vmtrace

基于 Frida 与 QBDI 的 Android ARM64 原生指令级动态跟踪框架,用于在不修改程序逻辑的前提下记录和分析函数执行过程中的每一条指令及寄存器状态。

Stars: 0 | Forks: 0

# 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 │ ▼ 重放原始调用 │ ▼ 记录执行指令 │ ▼ 输出跟踪结果 下图展示了一次完整跟踪任务的启动过程。 ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/1d/1db0366a098ceb3b318bcd9d1451e30e5e45acbaab45011775cc4b8745055015.png) # 指令输出 跟踪过程中,每条执行过的 ARM64 指令都会输出一条日志。 示例: [00018452] pc=0x0000007b4d71f3b4 off=0x0011f3b4 ldr x8, [x0,#0x18] # x0=0x0000007b36e4d000 # x8=0x0000000000000018 每条记录包含以下信息: | 字段 | 说明 | |------|------| | Index | 指令序号 | | pc | 当前指令绝对地址 | | off | 相对于目标模块基址的偏移 | | Instruction | ARM64 反汇编结果 | | Registers | 当前指令引用寄存器的实际值 | 为了减少日志体积,仅输出当前指令实际使用的寄存器。 下图展示了实际生成的跟踪输出。 ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/cc/ccfdf36538c744858c9c8ea7e419f2c15c3cbb32b710573674e11a65752df7bd.png) # 跟踪模式 ## 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 # 免责声明 本项目仅用于合法的软件调试、安全研究、兼容性分析及教学用途。 请确保仅对拥有合法授权的软件或设备进行分析。
标签:Android, ARM64, Docker支持, DSL, Frida, QBDI, 云资产清单, 代码分析, 凭证管理, 动态二进制插桩, 动态跟踪, 自定义脚本, 逆向工程