specdeviceinfo
2026-06-04 · 安全深挖

为什么银行 App 在 Root 过的手机上会崩溃(Play Integrity 到底怎么查)

「您的设备不受支持」这句提示背后,是一整套证明流程。以下是真实逻辑,以及为什么每一款新出的 Root 隐藏工具都在一个版本内被抓。

每隔几个月 Reddit 上就会有一个热帖:「我刚 Root 了手机,银行 App 打不开了」。通常是很谨慎的用户,用的是维护得很好的隐藏工具,装的是没有明显篡改的手机。都不重要 —— 就是这么快。

2026 年的「Root 检测」不是单一检查。它是一套五层证明流水线,Root 隐藏工具只能在最外面那层上真的动动手脚。

第 1 层:Play Integrity API(前身 SafetyNet)

SafetyNet Attestation 撑了将近十年,2024 年 Google 全面切到 Play Integrity API。银行 App 调 requestIntegrityToken(),Play Services 对当前设备状态哈希、用服务端 Google 密钥签名,返回一个 verdict 让 App 转发到后端。

关键的三个字段:

  • deviceIntegrity —— 粗判。MEETS_DEVICE_INTEGRITYMEETS_BASIC_INTEGRITYMEETS_STRONG_INTEGRITY,或者空。
  • appIntegrity —— 调用方 App 是否来自 Play Store 且未被修改?
  • accountDetails —— 调用账号是否有有效的 Play 授权?

Root 隐藏工具全部住在这一层。它们钩住 Play Integrity 服务,让响应写成「未 Root」。这一招能撑到 Google 推下一次 Play Services 更新为止 —— 通常是 4-8 周。

第 2 层:硬件绑定密钥证明

自 Android 8 起,每台现代手机都自带 TEE(可信执行环境),多数旗舰还带一颗物理隔离的 StrongBox。App 生成密钥时,可以要求把密钥绑定到这块安全元件。

OS 会签发一条证书链,证明:

  • 密钥在真硅片里生成,不是软件。
  • bootloader 上锁。
  • system 分区未修改。
  • 上次开机时 Verified Boot 通过。

证书链由 Google 根 CA 签名,使用的硬件绑定私钥没有任何软件够得到。Root 隐藏工具伪造不了这个。Bootloader 解过一次锁,StrongBox 证明就永远返回失败,堆什么工具都白搭。

第 3 层:Verified Boot 状态

开机时 bootloader 用烧在 SoC 出厂里的公钥核验 system 分区。结果暴露为 ro.boot.verifiedbootstatero.boot.flash.locked

  • verifiedbootstate=green + flash.locked=1 —— 官方 OS,完全核验。
  • verifiedbootstate=yellow —— 用户签名的 OS,但 bootloader 仍上锁。
  • verifiedbootstate=orange —— bootloader 已解锁。银行几乎一律拒绝。
  • verifiedbootstate=red —— 核验失败。App 不会启动。

第 4 层:Build 属性交叉核验

银行 App 读 Build.FINGERPRINT、MANUFACTURER、MODEL、HARDWARE,跟 Play Integrity 结果一起送到后端。后端拿这些字段跟 Google 已知合规设备列表 diff(本质上就是 Android Vendor Test Suite 的兼容性数据库)。

假设 Play Integrity 被骗过了,但 build 字段仍然不对头 —— MODEL 说是「Pixel 8」但 SoC 报的是联发科 —— 交叉核验就炸了,会话被拒。

这也是为什么逐个字段伪造一定会被抓:你必须把整个 fingerprint 自洽地一起伪造。我们那篇云手机检测指南把关联逻辑讲清楚了。

第 5 层:Samsung Knox(及 OEM 对应物)

三星设备上还叠了一层 Knox 证明。三星自家的 TrustZone 实现,跟标准 Android TEE 独立,有自己的 API 和自己的 kill switch —— 所谓「Knox 熔断」,bootloader 一解锁就物理熔断。

熔断是单向的。熔了就是熔了,永久。Knox 证明从此永远返回失败,任何依赖 Knox 的 App —— Samsung Pay、几家银行、Samsung Health —— 都用不了。三星把这个当卖点做,叫「Knox Vault」;从反欺诈角度看,确实是卖点。

为什么 Root 隐藏工具永远在输

猫鼠游戏只发生在第 1 层。第 2 到第 5 层依赖硬件层面的密码学保证,任何纯软件方案都动不了。Magisk、Shamiko、LSPosed 之流能骗过随手的字符串检查。银行 App 一旦请求 StrongBox 证明,谎言一句话就崩掉。

更野的方案会用定制内核在加载用户签名 OS 之后重新上锁 bootloader。这能过第 3 层 —— 仍然过不了第 2 层,因为硬件绑定证明里包含 boot 镜像的度量值,Google 根 CA 不会给它不认识的镜像签发。

三条实操结论

  1. Root 就意味着告别 Samsung Pay、Google Pay、多数银行、Pokémon GO、以及多数 DRM 保护的流媒体。不是暂时的麻烦 —— 是架构层面的。
  2. 如果你买了台号称「Root 过」的二手机、银行 App 用不了,前任解锁过 bootloader。三星上验证:设置 → 关于手机 → Knox 保修状态。显示「1」或「已跳过」= 永久解锁,回不去了。
  3. 付款之前先跑一次交叉核验。我们的硬件可信度评分能抓被改过的 Build 字符串、SoC / GPU 不匹配的组合、常见 Root 迹象 —— 远早于你在 ATM 前按下「确认转账」。