chenxvb/Unicorn-Trace
GitHub: chenxvb/Unicorn-Trace
基于 Unicorn 引擎的轻量级 ARM64 动态追踪工具,通过 IDA Pro 插件实现交互式代码模拟与执行轨迹可视化。
Stars: 191 | Forks: 47
# Unicorn ARM64 Tracer (IDA + 离线)
[简体中文](./README_zh.md)

基于 Unicorn 的轻量级 ARM64 追踪工作流。
- `dyn_trace_ida.py`:IDA 插件(交互式 dump + trace)
- `local_emu.py`:离线回放 / 连续回放
- `single_script/dynamic_dump.py`:适用于 IDA 的单文件备用脚本
## 安装
```
pip install unicorn capstone
```
复制到 IDA 插件目录:
- `dyn_trace_ida.py`
- `unicorn_trace/`
## IDA 插件(当前行为)
使用 `Ctrl-Alt-U`(`Unicorn ARM64 Tracer`)打开。
插件窗口为非模态弹窗,并保持置顶。
### 参数
- `END addr`:十六进制;**默认相对于 image base**
- `TPIDR`:可选
- `Bound start / Bound end`:自定义运行范围
- `Output path`:输出目录
- `enable Tenet`:生成 tenet 日志
- `end addr absolute`:将 END 视为绝对地址
### 重要的 UI 逻辑
- 自动范围取自**当前 PC 可执行段**。
- `Refresh Range` 将使用当前的自动范围覆盖 `Bound start/end`。
- 自定义边界始终处于启用状态(无需额外切换)。
- 提供运行时日志弹窗(`Show Log` / `Clear Log`),并在执行期间实时更新。
### 输入/输出缓存
每个 IDB 的缓存存储在用户的 IDA 目录下(`~/.idapro/...`)。
重新打开插件时,它会恢复上次的输入和上次的输出路径。
## 使用路径(均需安装插件)
这两种路径均要求 IDA 的 `plugins` 目录中包含 `dyn_trace_ida.py` + `unicorn_trace/`。
### 路径 A:插件 GUI
1. 在 IDA 中按下 `Ctrl-Alt-U`。
2. 在弹窗中填写参数。
3. 点击 `Run Tracer`。
### 路径 B:IDA 脚本
在 IDA Python 中运行:
```
# 选项 1: 直接在 IDA 中执行脚本文件
# File -> Script file... -> 选择 dyn_trace_ida.py
# 选项 2: 导入并调用
import dyn_trace_ida
dyn_trace_ida.uni_trace_main(
endaddr_input=0x1234, # relative by default
tpidr_value_input=None,
enable_tenet=False,
user_path=".",
end_addr_absolute=False,
use_custom_bound=True,
bound_start=0x100000000,
bound_end=0x100010000,
)
```
## 输出文件
位于 `Output path` 下:
- `uc_combine_.log`
- `dump_/regs.json`
- `dump_/uc.log`
- `dump_/tenet.log`(启用 Tenet 时)
- `tenet_combine_.log`(启用 Tenet 时)
## 离线回放
使用 `local_emu.py` 回放导出的数据。

常用入口点:
- `run_once(...)`:回放单个 dump 文件夹
- `run_all_continuous(...)`:按时间顺序回放多个 `dump_*` 文件夹并合并日志
快速示例:
```
from local_emu import run_all_continuous
run_all_continuous(
dump_path="./tmp/report_list",
debug_switch=True,
)
```
有关基于 hook 的示例,请参见 [`example.py`](./example.py)。
## 工作流(可视化)

## 注意事项
- 插件在恢复路径中仍依赖于 `ida_dbg.run_to(...)`;调试器事件可能会切换 IDA 的视图/焦点。
- 在追踪期间请禁用无关的断点,以减少干扰。
- 如果运行在中途失败,之前生成的 dump 文件夹仍然可用。
## 参考
- Tenet(官方):https://github.com/gaasedelen/tenet
- Tenet-IDA9.0:https://github.com/jiqiu2022/Tenet-IDA9.0
## 仓库布局(当前)
```
.
├── dyn_trace_ida.py
├── local_emu.py
├── example.py
├── unicorn_trace/
│ ├── __init__.py
│ └── unicorn_class.py
├── single_script/
│ ├── dynamic_dump.py
│ └── dump_single.py
├── README.md
└── README_zh.md
```
标签:ARM64, Capstone, DAST, IDA Pro插件, Python, Ruby on Rails, Tenet日志, Unicorn引擎, 二进制分析, 云安全运维, 云资产清单, 代码模拟, 内存转储, 动态追踪, 寄存器追踪, 恶意软件分析, 指令级日志, 无后门, 模拟执行, 离线调试, 脱壳, 逆向工具, 逆向工程