executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
re-teeTEE/TrustZone 逆向:OP-TEE 架构、可信应用(Trusted App)、secure storage、SMC 接口与设备密钥。 触发词:TEE、TrustZone、OP-TEE、可信应用、Trusted App、secure world、SMC、安全存储、secure storage、设备密钥
Independent GitHub snapshot · Automated classification · Original documentation governs
静态分析(镜像解析/反编译)免沙箱;主机侧动态(跑 client、hook ioctl)按 [[re-analyze/platform-tips]] 最高原则进沙箱;secure world 内动态不做(见坑 3),默认以静态 + 主机侧观察为主。
smc 指令调用点与 TA_InvokeCommandEntryPoint 类分发表binwalk --version(安装命令见 [[re-fw-extract]]「工具准备」)apt install python3 / dnf install python3 / pacman -S python;macOS: 自带;Windows: 官方安装器或 choco install pythonpython3 --versionfrida --version按顺序执行,每步产物(镜像定位、头结构标注、命令号表)记录证据路径 + sha256(见 [[re-triage]]),供报告引用。
架构定位(world 划分 / SMC / TEE OS 入口):
smc #imm(AArch32 为 smc),从 EL1/EL2 执行即陷入 EL3 监控层,监控层再分发给 TEE OS;反编译中搜 smc 指令即调用面落点OP-TEE 结构(core 与 TA 分离、.ta 格式):
TEE_* 内部 API(密码学、secure storage、时间等),TA 依赖该 API 实现业务逻辑——分析 TA 前先确认 core/TA 边界(谁提供 API、谁调用 API)struct shdr,官方 core/include/signed_hdr.h):magic(0x4f545348 = "OTSH")、img_type、img_size、algo、hash_size、sig_size,其后跟 hash 与签名;img_type 取值:0 明文签名 TA / 1 bootstrap TA(带 UUID+版本子头)/ 2 加密 TA / 3 子密钥链式头;加密变体(img_type=2)后跟 shdr_encrypted_ta 子头(enc_algo、flags、iv_size、tag_size + iv + tag),密文为 AES-GCMta_head(UUID、版本、flags 等;UUID 即 TA 接口标识,与主机侧调用的 UUID 对应)TA 分析(入口 / 命令分发 / secure storage):
TA_CreateEntryPoint(初始化)→ TA_OpenSessionEntryPoint(会话建立)→ TA_InvokeCommandEntryPoint(命令分发,按 cmd_id switch)——命令分发表就是 TA 的对外接口目录,逐分支标注命令号与行为TEE_Param(value 标量对 / memref 内存引用两类);memref 指向共享内存,是输入输出主通道——每个命令分支标注参数类型与结构TEE_* 存储 API 调用点(对象创建/打开/读/写/定位/删除类),还原对象 ID(常由 UUID + 对象名/索引派生)与数据流;secure storage 密文最终落盘于普通世界文件系统(经 tee-supplicant)或硬件存储(RPMB 类,硬件侧见 [[re-hw-chip]])——找到密文文件的解密路径即找到对象数据主机侧调用面(ioctl / client 库,两头夹逼):
/dev/tee0(客户端 libteec 使用)上的 TEE_IOC_* ioctl(打开会话、invoke、关闭会话、共享内存分配/注册类);/dev/teepriv0 归 tee-supplicant(特权守护进程)使用,不做客户端调用——别把 teepriv0 当「私密会话」通道(见 [[gotchas]])TEEC_InitializeContext → TEEC_OpenSession(带 UUID 与参数)→ TEEC_InvokeCommand(带命令号与 TEEC_Operation)→ TEEC_CloseSession → TEEC_FinalizeContextdmesg 中 tee 驱动与 OP-TEE 初始化日志(驱动版本、中断号、supplicant 状态)辅助指纹与版本判定厂商差异处理(自定义 TEE,泛化):
TEE_IOC_*)调用面 + client 库调用序列记录 UUID/命令号/参数布局(步骤 4),结合返回行为反推 TA 接口与内部逻辑,静态证据不足时以调用面证据为主smc 调用点,参数含义以约定表为准不靠猜(见 [[gotchas]] 调用约定组)