跳转到内容

分析 Trace

Tenet 的终端 TUI、批处理 CLI、MCP 服务与独立 Tauri 前端共享相同的核心、Pass 与结果缓存。本页面向你呈现完整分析能力全貌,按问题类型引导你选择起始章节,并列出推荐的调查顺序。

区域 能做什么 主要工具
结构恢复 恢复函数、CFG、XRef、循环、调用图 functionxrefcfgloopcall_graphcfg_layout
污点与数据流 前向/反向污点、关键路径、数据流图 taintbackward_tainttaint_source_annotationdataflow_graph
内存与字符串 快照、值搜索、熵、YARA、字符串发现 memory_snapshotmemory_stringsmem_searchentropyyara_mem_scanstrings
算法与模式 模式扫描、物化常量、循环语义、算法摘要 patternloop_semanticsalgorithm_summary
平台 API ObjC 消息、系统调用、C API 拦截(CommonCrypto / BoringSSL / JNI) objcsyscall_interceptobjc_crypto
Trace 对比 折叠重复迭代、差异比较、窗口统计、寄存器时间线 trace_foldtrace_diffwindow_statsreg_timelinecall_context
VM 分析 handler 识别、派发恢复、状态映射、反向切片 vm_abstract + MCP vm_summary / vm_steps_query / vm_reg_timeline / vm_backward_slice

所有 MCP 工具详见 MCP 服务指南;所有 Pass 及其 CLI 标志详见 Pass 目录

从匹配你问题的章节开始:

我想要… 从这里开始
识别感兴趣的函数 / 理解整体流程 恢复程序结构
把关键值反向追蹤到源头,或正向追蹤到去向 污点与数据流
在内存中查找字符串、结构体或加密材料 内存、字符串与值搜索
确定一组循环实现的是哪类算法 算法与模式识别
检查 ObjC 消息、系统调用或边界 API 的输入输出 ObjC、系统调用与平台 API
比较两份录制或总结热点循环 Trace 工具
分析 VMP 风格虚拟化代码 虚拟机分析

Trace 是指令的扁平流;分析在其上逐层构建视图。建议从廉价、全局走向昂贵、精确:

1. trace_info / 结构 → 函数、CFG、XRef、循环
2. 污点 / 数据流 → 前向污点、反向污点、关键路径
3. 内存 / 字符串 → 快照、值搜索、熵、YARA
4. 算法 / 模式 → 模式扫描、常量、loop_semantics、algorithm_summary
5. 平台 API → objc、syscall_intercept、objc_crypto
6. Trace 对比 → trace_fold、trace_diff、window_stats、reg_timeline
7. VM 分析 → vm_abstract(需 IDA/Ghidra 提供静态 hints)

这是推荐顺序而非强制约束。每一步都独立,可以任意顺序重跑,但结果会相互叠加:例如 algorithm_summary 会交叉引用 patternloop_semantics,所以应在两者之后运行。

Tenet 各分析在不同置信度上产出结果。下结论时应区别对待:

层级 声明类型 典型来源
记录事实 在 Trace 中直接观察到 GPR/FPR 快照、内存访问、已执行指令、PC
重建状态 通过重放记录的写入推导 任意 inst_id 处的 RegisterFileMemoryModel 写入历史、get_regsmemread
结构推断 从执行结构推断 函数、CFG、循环、XRef、VM handler 切分、调用图
候选解释 多信号启发式综合 algorithm_summaryloop_semantics 标签、pattern 签名

不要把候选解释当作记录事实。使用 verify_evidence(MCP)或重新检查相关 inst_id / 寄存器时间线,把假设升级为经过验证的证据。

入口 启动方式 适用场景
Tauri 桌面应用 应用拉起 tenet --ws-port <port> <trace> --mcp-hub sidecar 图形化探索、结构与分析结果面板
TUI ./tenet trace.bin 默认交互入口;适合纯终端环境和键盘驱动检查
CLI ./tenet --taint 0 trace.bin(或 --pattern--call-graph--export-cfg 等) 脚本或 CI 一次性批处理分析
MCP ./tenet trace.bin --mcp--mcp-hub Agent 驱动、IDE 集成或多 Trace 工作流

这些入口共享同一个 reader、索引、Pass 管线和持久化结果缓存。Tauri 应用只是通过 WebSocket/MCP 连接纯后端 tenet sidecar,不代表 tenet 可执行文件内置图形界面。

Terminal window
# 1. 确认 Trace 可读
tenet --dump text trace.bin --limit 100
# 2. 交互式打开,等待默认 Pass 完成
./tenet trace.bin # 默认进入终端 TUI
# 3. 一次性 CLI 分析
./tenet --pattern trace.bin
./tenet --algorithm-summary trace.bin
./tenet --call-graph cg.dot trace.bin
./tenet --export-cfg func.dot trace.bin
# 4. 从 x0 开始目标污点
./tenet --taint 0 trace.bin
# 或在 inst_id 1200 处反向污点寄存器 x4(寄存器索引 4):
./tenet --backward-taint 1200 4 trace.bin

tenet --dump 支持 v4/v5/v7(含分块压缩),无需单独构建。

检查项 为什么重要 关注什么
格式版本 Tenet 要求 version >= 4 trace_info 显示版本;旧版本会被拒绝
代码嵌入 需要反汇编的分析在没有代码嵌入时会退化 检查 Header 标志 HAS_CODE;缺少已录制代码时,指令语义分析可能不可用或精度下降
GPR / MEM diff 缺失寄存器或内存 diff 会降低状态恢复精度 采样录制可能省略 REG_DIFFHAS_MEMHAS_NZCV;应把结果视为有意稀疏的证据
分块压缩 默认录制使用 1 MiB zstd 分块 tenet --dump 及所有 tenet 分析模式均支持压缩 Trace(v4/v5/v7)
地址一致性 Trace 记录包含 ASLR slide 的运行时地址 各 CLI 命令的地址约定不同;MCP 的 PC 参数通过 image_basemodule_slide 重基,而 VM mem_anchor_addr 等内存地址字段仍使用运行时地址
功能 依赖 启用条件
Triton 驱动的精确污点语义 Triton 构建时 TENET_ENABLE_TRITON=ON;否则污点工具使用启发式回退
YARA 内存扫描(yara_mem_scan libyara 构建时 TENET_ENABLE_YARA=ON
Tauri 桌面应用 Tauri / Web 前端工具链 tools/tenet/web/ 中独立构建
Trace 压缩(现代默认) zstd qbditrace 中 QBDITRACE_ENABLE_ZSTD=ON
并行索引 / 任务调度 Intel oneTBB TENET_ENABLE_TBB=ON,默认启用

没有 Triton 或 YARA 的构建仍支持结构分析及大多数其他能力,但明确依赖这些库的工具会不可用,或按当前构建能力降级。

以下章节各自深入一个分析区域,包含概念、入口与排查:

章节 交叉链接
恢复程序结构 functionxrefcfgloopcall_graph
污点与数据流 taintbackward_tainttaint_source_annotationdataflow_graph
内存、字符串与值搜索 mem_searchmemory_stringsmemory_snapshotentropyyara_mem_scan
算法与模式识别 patternloop_semanticsalgorithm_summary
ObjC、系统调用与平台 API objcsyscall_interceptobjc_crypto
Trace 工具 trace_foldtrace_diffwindow_statsreg_timeline
虚拟机分析 vm_abstract + MCP VM 工具

完整 Pass 列表含 CLI 标志与依赖图见 Pass 目录。所有 MCP 工具见 MCP 服务指南