ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PlayIntegrityFix 使用指南:Root 设备如何重新通过 Play Integrity 验证

PlayIntegrityFix 使用指南:Root 设备如何重新通过 Play Integrity 验证

PlayIntegrityFix 使用指南:Root 设备如何重新通过 Play Integrity 验证

【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix

PlayIntegrityFix 是一个基于 Zygisk 的 Magisk 模块,用来修复 Root 设备上 Google Play Integrity 与 SafetyNet 的验证失败问题,支持 Android 8 到 15。它把 GMS 进程看到的设备指纹、签名信息替换成官方 Pixel 配置,让银行、支付和部分对设备认证敏感的应用能够正常运行。适合已经 Root、启用了 Zygisk,并且想弄清楚每一项在做什么的用户。

快速上手:首次使用最小步骤

先跑起来,再回头看原理。整个流程只需要三步:

  1. 从项目发布页下载最新的模块 zip(当前为 v19.1,见 module/module.prop),不要 clone 源码自己构建,除非你想改东西。
  2. 打开 Magisk App → 模块 → 右上角「本地模块」,选中刚才的 zip,等待重启。
  3. 重启完成后,验证模块是否生效:
getprop ro.build.fingerprint getprop ro.build.version.security_patch

第一条应显示google/oriole_beta/oriole:...(Pixel 6 的构建指纹),说明伪装已生效;若仍显示你自己设备的值,先确认 Zygisk 是否开启。随后装一个 Play Integrity Checker 类应用,查看 Device、App、Integrity 三项结果,作为后续排查的基准。

它能解决什么:四个典型场景

  • 银行、支付与金融类应用打不开:这类应用普遍接入 Play Integrity,Root 设备常被直接判定为不安全,模块把设备判定拉回正常。
  • 部分游戏拒绝启动:游戏服务端或本地校验依赖完整性结论,修复后可进入游戏。
  • 旧版 SafetyNet 接口:模块同时兼容 SafetyNet 的验证路径,依赖旧接口的应用也能继续工作。
  • Android 12 及以下设备:这个范围内的设备用本模块单独处理,通常就能拿到全部通过,无需额外组件。

原理通俗版:三层伪装,只动 GMS

把它理解成「只给 Google 看一份经过整理的名片」,而不是改动整台设备。模块只在com.google.android.gms(特别是unstable进程)里工作,其他应用进程不受影响,实现见 app/src/main/cpp/main.cpp。

属性层。GMS 读取系统属性时,hook 会拦截并替换一批敏感值:指纹、安全补丁日期、构建 ID 换成 Pixel 配置,同时把 ADB 状态、USB 状态伪装成「已断开」,抹掉开发者的痕迹。

内存层。在进程内部直接改写android.os.Build的静态字段,这样凡是走 Java 层Build.xxx拿信息的代码,看到的型号、品牌、构建号也都是 Pixel 的。

证书层。脚本会检查 ROM 的 OTA 证书,若发现是测试签名(开发版系统常见),就把 GMS 查询到的包签名替换为 Google 官方证书,避免签名异常直接判死。

这些替换值的来源是 module/pif.json,内容就是FINGERPRINT、MANUFACTURER、MODEL、SECURITY_PATCH四组字段,一句话概括:它定义了「这台设备对外自称是什么」。

进阶场景:按需处理的五件事

Android 13+:Device 认证要配合 TrickyStore

从 Android 13 起,Google 移除了旧版检查,Device 判定与旧版 Strong 同等严格。此时仅靠本模块不够,需要再装TrickyStore模块并提供有效的keybox文件。模块检测到 TrickyStore 存在后,会自动关闭自己的属性与证书伪装,把这两项工作交给 TrickyStore 完成。另有一条不稳定路线——用 PlayIntegrityFork 并开启spoofVendingSdk强制走旧版检查——但官方明确提示 Play Store 可能闪退,非熟练用户不推荐。

指纹会过期,定期刷新

pif.json 里的指纹来自 Pixel 官方 Beta 的 OTA 元数据(抓取逻辑在 module/action.sh),时效性有限。刷新方式是重新安装模块(脚本会重新联网拉取),或单独执行action.sh。生成的配置最终落在/data/adb/pif.json。

想固定一套指纹:自定义配置

把 JSON 写到/data/adb/pif.json即可覆盖自动生成的版本,可加入spoofProvider、spoofProps、spoofSignature等开关。注意FINGERPRINT必须保持brand/product/device:release/id/incremental/type/tags的完整斜杠格式,模块靠它拆出品牌、型号等字段,写错会导致解析失败。

别与其他属性伪装模块叠加

同时装其他修改ro.*属性的模块会互相打架,还可能破坏部分机型的指纹识别等硬件功能。TrickyStore 属于本模块「期望中」的搭配,其余伪装类模块建议移除。

验证结果的解读顺序

用 Play Integrity Checker 依次看三项:Device是门槛,不通过时 App 和 Integrity 基本没意义;App依赖应用本身的接入方式;Integrity是最终结论。排查时按 Device → App → Integrity 的顺序定位,而不是反过来。

问题自检:故障排查清单

现象可能原因处理方式
Device 不通过(Android 13+)缺少 keybox / 未装 TrickyStore安装 TrickyStore 并配置有效 keybox,重启后复测
App 或 Integrity 不通过GMS 数据缓存了旧判定清除 Google Play 服务数据或重启设备
安装失败并提示检查网络脚本需联网抓取 Pixel OTA 元数据,或存在 busybox 模块冲突联网后重装;移除 busybox 类模块再试
重启后卡在 Recovery模块脚本或与其他模块冲突Recovery 中删除模块目录/data/adb/modules/playintegrityfix,重启
getprop看到的指纹仍是旧值Zygisk 未启用,或模块未实际加载在 Magisk 设置中确认 Zygisk 开启,重装模块
解析错误、字段缺失手写的 pif.json 格式不完整删除自定义配置,让安装脚本重新生成

注意事项与合规

  • 适用范围为Android 8–15,且环境必须已 Root(Magisk / KernelSU / APatch)并启用 Zygisk;非 Root 设备无法使用。
  • 绕过设备完整性验证可能违反 Google Play 服务条款,关联的账号存在被限制的风险,使用后果自担。
  • 设备伪装不保证长期通过:Google 会持续调整策略,验证结论随时可能变化,需要定期维护。
  • Android 13 及以上设备,官方建议直接搭配 TrickyStore + keybox;不建议叠加其他属性伪装模块,以免破坏系统行为。
  • 如果你只是需要一台认证状态绝对稳定的设备,官方给出的建议是刷回原版 ROM 并锁定引导加载器,这比任何伪装都可靠。

模块源码在 app/ 目录,安装脚本集中在 module/ 目录,更新记录见 changelog.md;项目动态与讨论可关注作者的 Telegram 频道。

【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进