PlayIntegrityFix 教程:用 Magisk 模块模拟设备指纹,修复 Play Integrity 完整性验证
【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix
PlayIntegrityFix 是 Android 8-15 的 Magisk 模块,靠模拟 Pixel 设备指纹并接管 GMS 进程查询,让解锁 bootloader 的设备重新通过 Play Integrity 完整性验证。
适合谁用,以及装它之前要确认什么
本模块解决的是设备被 Play Integrity 判为"不安全"的问题:解锁 BL 或刷入自定义 ROM 后,银行应用、Google Pay、部分游戏会因验证失败拒绝运行。安装前对照下表确认环境:
| 前置条件 | 要求 |
|---|---|
| 系统版本 | Android 8.0(API 26)至 15 |
| Root 框架 | Magisk、KernelSU 或 APatch |
| Zygisk | 必须启用(Magisk 设置中打开,或安装 ZygiskNext / ReZygisk) |
| 安装方式 | 仅限开机状态下通过框架 App 安装,不支持 recovery 刷入 |
README 里有一条关键提示:Android 13 及以上设备的 Device verdict 已等同于旧的 Strong verdict,仅靠本模块不够,还需配合 TrickyStore 模块与有效 keybox;Android 12 及以下暂不受影响。
安装与指纹配置:一条任务流走完
从下载到验证,整条流程在一次重启内完成。
获取模块包
从项目 Releases 下载对应版本的 zip(当前 v19.1,见 update.json),或克隆源码仓库自行查看:
git clone https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFixMagisk / KernelSU 本地安装
在框架应用内选择"本地安装"并指定 zip,重启完成。module/customize.sh 安装时自动完成校验:低于 API 26 直接终止、Zygisk 未启用直接终止、检测到过时的 safetynet-fix 模块会标记移除;playcurl、MagiskHidePropsConf 等模块会给出冲突警告。
pif.json 指纹的生成与优先级
安装脚本 module/action.sh 会抓取 developer.android.com 上最新 Pixel Beta 的 OTA 元数据,随机挑一台设备(如 Pixel 6 / oriole_beta),提取 FINGERPRINT 与 SECURITY_PATCH 写入 /data/adb/pif.json,再杀掉 GMS 进程使其生效。仓库自带的默认配置见 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" }加载时配置优先级为:/data/adb/pif.json → 模块目录 custom.pif.json → 模块自带 pif.json。KernelSU / ReZygisk 用户还可以打开 module/webroot/ 内置的 Web 界面,点"Fetch pif.json"在线刷新指纹,或用"Use preview fingerprint"开关预览 beta 指纹。
用检测应用验证 verdict
重启后安装 Play Integrity API Checker 一类的检测应用,确认 MEK / Device / Basic / Strong verdict 是否变为 pass。
它是怎么做到的:三层分工
它并非简单改几个属性,而是 Shell、Native、Java 三层各处理验证链路的不同环节。
Shell 层:开机早期修系统属性
module/post-fs-data.sh 在开机早期把各厂商的解锁痕迹属性改回"已锁定"值(Samsung 的 warranty_bit、Realme 的 realmebootstate、OnePlus 的 is_ever_orange),并按 Shamiko 是否存在调整 GMS 的 DenyList 策略;module/service.sh 等待 sys.boot_completed 后再补齐 vbmeta、verifiedbootstate 等属性,其中专门处理了小米、OnePlus、Oppo 上避免指纹传感器失效的细节。旧版 Magisk(< 27003)没有 resetprop -n 时,module/common_func.sh 用 hexpatch 直接改写 /dev/properties。
Native 层:只注入 GMS 进程
核心逻辑在 app/src/main/cpp/main.cpp。Zygisk 模块只接管 com.google.android.gms 的 unstable 进程:把 pif.json 与 classes.dex 送入该进程,用 JNI 改写 android.os.Build 各字段,并通过 Dobby hook 住 __system_property_read_callback,让进程内的属性读取(adb 状态、USB 状态、API 级别、安全补丁)都返回伪装值。其余应用进程直接卸载模块库。
Java 层:签名与密钥库伪装
EntryPoint.java 做两件事:spoofProvider 把系统 AndroidKeyStore 提供者替换为 CustomProvider + CustomKeyStoreSpi,让 GMS 拿到正确的密钥库响应;spoofSignature 用内置的 Google 官方签名替换 GMS 包信息中的签名。两项均可在配置中单独关闭。
进阶:pif.json 可选字段与组合玩法
默认配置已经能跑,以下字段用于微调伪装行为或适配特殊环境(解析逻辑见 main.cpp):
spoofProvider/spoofProps/spoofSignature:布尔值,分别控制 Java 层 Provider 伪装、Build 字段伪装、属性 hook;FINGERPRINT会被自动拆分为 BRAND、PRODUCT、DEVICE、RELEASE、ID、INCREMENTAL、TYPE、TAGS,也可单独指定其中任意 Build 字段;DEVICE_INITIAL_SDK_INT:进程内查询到的 API 级别的伪装值;DEBUG:在 logcat 打开 PIF 标签的详细日志。
两个自动行为值得注意:检测到 TrickyStore 模块(/data/adb/modules/tricky_store 存在且未标记 disable)时,自动关闭 spoofProvider 与 spoofProps,把签名伪装交给 TrickyStore;检测到 ROM 使用 test key 签名(otacerts.zip 含 test)时自动开启 spoofSignature。多台设备管理时,为每台设备维护一份 /data/adb/pif.json,修改后重启 GMS 进程即可生效。
兼容边界与使用边界
先认清限制,再谈使用:
- Android 13+:不配 TrickyStore + keybox 大概率只能过 Basic verdict,README 对非高级用户直接建议刷回官方 ROM 并锁回 bootloader;
- 冲突模块:safetynet-fix 不兼容会被强制移除;playcurl 可能用无效指纹覆盖配置;安装时这些都会打印提示;
- 合规提示:修改完整性状态可能违反目标应用的服务条款,指纹与 keybox 来源需自行核实,风险自负。
维护上最实际的动作是跟紧版本:更新入口在 update.json,变更说明见 changelog.md。安装、配好指纹、重启、验证——按这条任务流走一遍,大多数设备都能恢复 Google 服务的完整访问。
【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考