TEESimulator完整入门指南:Root安卓上让软件KeyMint绕过硬件密钥证明的TEE模拟器 TEESimulator完整入门指南Root安卓上让软件KeyMint绕过硬件密钥证明的TEE模拟器【免费下载链接】TEESimulatorSoftware simulation for Android hardware-backed key pairs with key attestation项目地址: https://gitcode.com/gh_mirrors/te/TEESimulatorTEESimulator是一款专为 Root 安卓设备打造的TEE 模拟器它能让指定 App 的KeyMint 密钥证明Key Attestation由软件实现完成从而绕过硬件密钥证明的校验。它把 AOSP 官方的参考版 KeyMint 可信应用kmr-ta直接跑在真实的 keystore 守护进程内部用你自己提供的 keybox 为证书签名——证书的产生方式与真实 TEE 完全一致因此从结构上就是自洽的。本文带你完成安装、keybox 配置与 Profile 设置的全流程。 TEESimulator 是什么能解决什么问题很多银行、支付、钱包类 App 会通过 Android 的硬件密钥证明Key Attestation来验证设备是否处于安全环境验证启动状态verified-boot、安全补丁级别、设备型号等信息。一旦检测到设备已解锁 / 已 Root / 补丁过期这些 App 往往直接拒绝服务。TEESimulator 的思路很聪明不篡改证书而是嵌入 AOSP 自己的参考 KeyMint 可信应用 kmr-ta让证书像真实 TEE 产出的那样被生成只模拟你指定的 App没被列入配置的 App 的密钥全部走真实硬件互不干扰没有加载 keybox 时完全不动作配置错误时模块是惰性的而不是隐患。✅ 安装前提环境要求清单上手前请确认你的设备满足以下 3 个条件要求说明Android 10 及以上同时支持旧版keystore10/11和keystore212两代架构64 位设备arm64-v8a或x86_64keystore 守护进程是 64 位的已 Root支持 Magisk、KernelSU 或 APatch 提示KernelSU / APatch 用户还能额外获得WebUI 图形化界面配置体验更好。 一键安装步骤4 步完成第 1 步刷入模块并重启。用你的 Root 管理器Magisk/KernelSU/APatch刷入 TEESimulator 模块然后重启设备。第 2 步放入 keybox。将一份硬件级keybox.xml放到/data/adb/teesim/keybox.xml格式要求见下一节。第 3 步配置要模拟的 App。在/data/adb/teesim/config.json的某个 Profile 中列出目标 App 包名或通过 WebUI 直接编辑。第 4 步保存生效。守护进程会监视配置文件改动实时生效、无需重启。模块自带一份 默认配置默认针对 Google Play 服务和 Play Store{ version: 1, profiles: { default: { keybox: keybox.xml, mode: patch, patchLevel: { system: today, vendor: YYYY-MM-05, boot: YYYY-MM-05 }, osVersion: , apps: [com.google.android.gms, com.android.vending] } } }️ keybox.xml 怎么准备keybox 是模拟器的信任根里面存放签名用的私钥和证书链必须同时包含 RSA 和 ECDSANIST P-256两组密钥每组都带 PEM 私钥和至少两级叶证书 根证书的证书链结构大致如下?xml version1.0? AndroidAttestation Keybox DeviceID... Key algorithmrsa PrivateKey formatpem-----BEGIN PRIVATE KEY-----.../PrivateKey CertificateChain Certificate formatpem-----BEGIN CERTIFICATE-----.../Certificate /CertificateChain /Key Key algorithmecdsa PrivateKey formatpem-----BEGIN EC PRIVATE KEY-----.../PrivateKey CertificateChain Certificate formatpem-----BEGIN CERTIFICATE-----.../Certificate /CertificateChain /Key /Keybox /AndroidAttestation注意两点keybox 包含私钥属于私密文件模块从不随包分发没放 keybox 时拦截器什么都不做。每个 Profile 用相对路径引用自己的 keybox因此你可以用不同的 keybox 签名不同的 Profile。keybox 的解析逻辑在 attest.rs缺少任一算法、链级数不足 2 时拦截器会拒绝安装钩子——配置错误无操作而非故障。️ 用 WebUI 或 config.json 创建 Profile配置的组织单位是Profile一份keybox 运行模式 补丁/系统版本 可选设备身份值品牌、型号、IMEI… 目标 App 列表的命名组合。每个目标 App 只属于一个 Profile它的证明证书就由该 Profile 决定。WebUI 方式推荐支持 WebUI 的 Root 管理器KernelSU、APatch中打开模块网页即可可视化地创建/分配 Profile、导入并重命名 keybox、选择运行模式、设置补丁与系统版本。界面源码见 module/webroot/。config.json 关键字段速查字段含义keybox相对/data/adb/teesim的 keybox 路径modepatch默认或generationpatchLevel支持today、YYYY-MM-05当月 5 号、harvested复用真实 TEE 值、no不上报等简易语言osVersion留空自动采集真实值也可填16、16.0.0或整数brand/model/imei等留空则回退到启动时从真实 TEE 采集的设备身份一个刻意的设计信任根verified-boot 键/状态/锁机标志不可配置——守护进程启动时用一次性硬件密钥采集真实值并冻结。这样证明出的信任根是真实的同时保证密钥加密密钥KEK派生稳定跨重启已存的密钥仍可解密。 核心原理Patch 与 Generation 两种模式理解这两种模式你就明白了 TEESimulator 为什么检测点少Patch 模式默认generateKey请求照常转发给真实 HAL——密钥仍是真正的硬件密钥证明内容版本号、TEE 强制授权等是货真价实的系统只把证明叶证书重新签名到你的 keybox 下并把信任根改成 locked/Verified重签逻辑见 resign.rs。检测点最少。Generation 模式整把密钥都在软件 TA 里生成证明由 keybox 直接签发。密钥不接触真实硬件是硬件不可用时的兜底方案。架构上可以这样理解整个系统控制守护进程Kotlin启动时采集设备真实参数、解析 Profile、把拦截器注入 keystore、通过本地 socket 推送配置。源码在 app/。ptrace 注入器把拦截库加载进运行中的 keystore 进程原理详解见 injector/。Android 12 拦截器钩住AIBinder_transact把目标 App 的 KeyMint 事务重定向到进程内软件 KeyMint其余全部转发真实硬件见 keymint/。Android 10/11 拦截器钩住 libbinder 的ioctl对IKeystoreService做同样的拦截路由见 keystore/。加密引擎Rust 编写的进程内可信应用驱动 AOSP 参考 KeyMint TA 的全部状态机见 rust/teesim-km/。⚠️ 模拟器创建的密钥会被打上标记Android 12或按调用者追踪Android 10/11后续操作自动回到软件路径真实硬件密钥永远不会被拦截。 问题排查与恢复遇到问题时按这个顺序检查没生效确认 keybox 已就位且可解析——没有 keybox 时拦截器本来就是空转的。查看日志WebUI 的 Logs 页会实时抓取 logcatTEESimulator标签、SELinux 拒绝记录、被注入的 keystore pid源码见 LogTail.kt。终极恢复手段杀掉 keystore 守护进程即可得到一个干净无拦截的新进程su -c kill $(pidof keystore2) # Android 12Android 10/11 用 keystore新进程在模块重新注入之前不会有任何拦截行为这是官方推荐的恢复路径。 从源码构建可选构建不依赖任何真机只需 Android SDK提供aidl和 NDKgit clone --recurse-submodules https://gitcode.com/gh_mirrors/te/TEESimulator TEESimulator cd TEESimulator export ANDROID_HOME/path/to/android/sdk export ANDROID_NDK_HOME/path/to/android/ndk ./gradlew zipRelease # 输出 out/TEESimulator-version-...-Release.zipzipRelease会一次构建 Rust TA、两套原生拦截器arm64-v8a x86_64和守护进程 dex组装成可刷模块接上设备后还可./gradlew installMagiskAndReboot直接推送安装。构建图定义见 settings.gradle.kts 与 CMakeLists.txt。 项目目录结构速览路径内容app/Kotlin 控制守护进程采集参数、解析 Profile、注入拦截器、WebUI 后端injector/基于 ptrace 的进程注入工具keymint/Android 12 拦截器AIBinder_transact钩子 路由keystore/Android 10/11 拦截器ioctl钩子 服务处理rust/teesim-km/进程内可信应用密钥生成、加密运算、证明签名module/可刷模块本体启动服务、sepolicy、默认配置与 WebUIthird_party/子模块参考 KeyMint、AIDL 接口、BoringSSL、LSPlt 等常见问题 FAQQ需要修改系统分区吗不需要。这是一个标准的 Root 管理器模块刷入即可卸载同样简单。Q会影响没配置的其他 App 吗不会。未在 Profile 中的 App 对模块完全透明密钥直通真实硬件。Q为什么 root of trust 不让我自己改因为它是 KEK 派生的输入也是证明可信度的核心。冻结真实值后证明与真实锁定设备一致且已存密钥跨重启、跨 Profile 都能解密详见 rust/teesim-km/ 的 Stable key-encryption keys 一节。Q4.0 版有什么新变化4.0 重写了底层不再伪造硬件后端而是进程内运行 AOSP 参考 KeyMint TA并首次支持持久密钥存储覆盖 Android 10 → 17。详见 module/changelog.md。写在最后TEESimulator 的价值在于像真的那样模拟真实的 KeyMint 状态机、真实的采集值、按需重签的最小改动面。把它当作学习 Android 密钥证明体系的活教材也非常合适——从 injector/README.md 到 rust/teesim-km/README.md每个模块都配有高质量的架构文档值得逐篇阅读。【免费下载链接】TEESimulatorSoftware simulation for Android hardware-backed key pairs with key attestation项目地址: https://gitcode.com/gh_mirrors/te/TEESimulator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考