Play Integrity Fix:Root设备Play认证修复模块
【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix
Play Integrity Fix 是一个 Zygisk 类型的 Magisk 模块。它让 Root 设备上的 Play Integrity API 返回已认证 verdict,使银行、支付类应用可以正常启动。仅面向已开启 Zygisk 的 Android 8.0+ Root 设备,非 Root 设备不需要。
使用后的实际变化
绕过 Play Integrity 验证在用户层面的变化集中在三处,按安装前后对照:
安装前
- Play Integrity API Checker 返回 MEETS_NONE 或 MEETS_BASIC,
meetsDeviceIntegrity为 false - 银行、支付应用检测到 Root 环境后拒绝启动,或仅提供受限功能
- Play 商店提示设备未获认证,部分功能不可用
安装并重启后(默认配置,Android 12 及以下)
- Checker 返回 MEETS_STRONG,BASIC / DEVICE / STRONG INTEGRITY 三个布尔值均为 true
- 原先拒绝启动的应用可以正常打开
- 该模块同时保留 SafetyNet verdict 修复;Android 13+ 的判定路径已改变,需配合 TrickyStore 才能达到 MEETS_DEVICE,详见后文版本兼容一节
一次验证请求的完整路径
上述变化的本质是 Android Root 认证修复:模块只作用于一个 GMS 进程,拦截发生在应用感知之前的进程启动阶段。下面跟着一次 Play Integrity API 请求的拦截流程走一遍。
- 进程分叉拦截。应用发起的请求由 Google Play 服务的
com.google.android.gms.unstable进程统一处理。该进程分叉时触发 ZygiskpreAppSpecialize钩子(逻辑在 main.cpp)。模块只对这个进程继续处理,其他任何应用会直接卸载模块库,后续修改不会影响它们。 - 属性层替换。
postAppSpecialize阶段,pif.json 中的字段经 JNI 写入android.os.Build类的静态字段(fingerprint、型号、安全补丁等);同时用 Dobby 钩住__system_property_read_callback函数,进程读取*.security_patch、*.build.id、api_level等属性时返回配置值,USB/ADB 状态(init.svc.adbd、sys.usb.state)则报告为"未连接"。效果相当于该进程读取硬件信息时看的是另一套配置好的视图。 - KeyStore 层注入。内置 dex 注入进程,把 AndroidKeyStore Provider 换成包装实现(CustomKeyStoreSpi.java)。包装层把所有方法转发给原始 SPI,只在调用栈出现 DroidGuard 时抛出异常拦截证书链查询,避免暴露修改痕迹。若 ROM 使用测试密钥签名,
android包的签名也会一并替换(spoofSignature,基于 otacerts.zip 检测自动开启)。 - 服务端响应。GMS 最终发出的请求携带替换后的指纹、安全补丁与证书信息,服务端校验无法将其与真实认证设备区分,返回 MEETS_DEVICE 或 MEETS_STRONG。
模块在第 1 步还会检测 TrickyStore 是否安装。若已安装,自动关闭自身的 KeyStore 注入与属性替换,相应职责交给 TrickyStore,两者不互相干扰。
安装与最小配置
前提:Android 8.0+,Zygisk 已启用(Magisk 内置 Zygisk 或 ZygiskNext / ReZygisk),不支持在 recovery 模式安装。
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix.git - 构建模块:
cd PlayIntegrityFix && ./gradlew assembleRelease,完成后在out/目录生成模块 zip(构建会编译 classes.dex 与 zygisk .so 并拷入 module 目录) - 在 Magisk(或 KernelSU / APatch)应用中选择"从存储安装",选中 out 目录中的 zip
- 重启设备
- 确认生效配置:
cat /data/adb/modules/playintegrityfix/pif.json - 重新拉取最新 Pixel Beta 指纹(可选,需联网):
sh /data/adb/modules/playintegrityfix/action.sh - 需要固定设备画像时,把自定义 JSON 写入 /data/adb/pif.json(可选,加载优先级最高)
pif.json字段说明
模块默认配置(module/pif.json):
{ "FINGERPRINT": "google/oriole_beta/oriole:16/BP22.250325.012/13467521:user/release-keys", "MANUFACTURER": "Google", "MODEL": "Pixel 6", "SECURITY_PATCH": "2025-04-05" }- FINGERPRINT:完整设备指纹,模块自动拆分为 BRAND、PRODUCT、DEVICE、RELEASE、ID、INCREMENTAL、TYPE、TAGS 八个子字段后覆盖 Build 类
- MANUFACTURER / MODEL:厂商与型号,写入 Build 对应字段
- SECURITY_PATCH:安全补丁级别,服务端以此判断设备补丁是否够新
- 可选开关:
spoofProvider、spoofProps、spoofSignature可分别关闭各层注入,DEVICE_INITIAL_SDK_INT指定设备初始 API 级别,DEBUG打开日志
版本兼容与参数适配
| Android 版本 | 是否需要额外模块 | 关键参数与说明 |
|---|---|---|
| 8.0 – 12 | 否 | 默认配置即可,Google 保留 legacy 检查,STRONG INTEGRITY 判定仍有效 |
| 13 – 15 | 需要 TrickyStore(提供有效 keybox) | legacy 检查已移除,DEVICE verdict 取代原 STRONG;TrickyStore 安装后 PIF 自动关闭自身 KeyStore 与属性替换 |
| 16+ | 需要 TrickyStore | module.prop 声明的支持范围为 8–15;如需使用,建议配置DEVICE_INITIAL_SDK_INT,并跟随模块最新版本 |
规律只有一条:版本越老,拿到高 verdict 越容易;13 起 keybox 是 DEVICE verdict 的前提。
常见问题
问题一:安装重启后 Checker 仍返回 MEETS_NONE
- 现象:模块安装并重启后,Play Integrity API 响应无变化
- 原因:模块没有作用到
com.google.android.gms.unstable进程——Zygisk 未开启,或 GMS 进程被加入 DenyList 而被隐藏 - 解法:确认 Magisk 的 Zygisk 开关已启用后重启;DenyList 开启时检查 com.google.android.gms 不在列表内(装有 Shamiko 时启用其白名单功能)
问题二:Android 13+ 只能拿到 BASIC,拿不到 DEVICE
- 现象:设备为 13 及以上,Checker 返回 MEETS_BASIC,
meetsDeviceIntegrity为 false - 原因:Google 在 13+ 移除了 legacy 检查,旧 STRONG 路径不存在,DEVICE 校验需要有效 keybox 证书
- 解法:安装 TrickyStore 并导入有效 keybox,PIF 无需改动,它会自动检测 TrickyStore 并让出 KeyStore 层
问题三:曾经认证通过,之后 verdict 自行下降
- 现象:使用一段时间后 verdict 从 DEVICE / STRONG 降为 BASIC 或 NONE
- 原因:pif.json 中 FINGERPRINT 与 SECURITY_PATCH 是静态值,Google 服务端设备库定期更新,旧版指纹被拒
- 解法:运行模块目录下的 action.sh 重新拉取最新 Pixel Beta 指纹,或手动更新 /data/adb/pif.json 中两个字段;模块发新版时跟随(v19.1 即指纹更新)
当前版本 v19.1(versionCode 19100),changelog 最后一条为指纹更新。仓库地址即安装步骤中的克隆地址;若上述步骤无法解决问题,可在该仓库 issues 页面说明设备型号、Android 版本、是否使用 TrickyStore 以及 Checker 完整返回。
【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考