chenxvb/Unicorn-Trace

GitHub: chenxvb/Unicorn-Trace

基于 Unicorn 引擎的轻量级 ARM64 动态追踪工具,通过 IDA Pro 插件实现交互式代码模拟与执行轨迹可视化。

Stars: 191 | Forks: 47

# Unicorn ARM64 Tracer (IDA + 离线) [简体中文](./README_zh.md) ![IDA 插件演示](https://raw.githubusercontent.com/chenxvb/Unicorn-Trace/main/imgs/1.gif) 基于 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` 回放导出的数据。 ![离线回放演示](https://raw.githubusercontent.com/chenxvb/Unicorn-Trace/main/imgs/2.gif) 常用入口点: - `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)。 ## 工作流(可视化) ![工作流演示](https://raw.githubusercontent.com/chenxvb/Unicorn-Trace/main/imgs/3.gif) ## 注意事项 - 插件在恢复路径中仍依赖于 `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引擎, 二进制分析, 云安全运维, 云资产清单, 代码模拟, 内存转储, 动态追踪, 寄存器追踪, 恶意软件分析, 指令级日志, 无后门, 模拟执行, 离线调试, 脱壳, 逆向工具, 逆向工程