news 2026/10/18 1:34:42

Play Integrity Fix:Root设备Play认证修复模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Play Integrity Fix:Root设备Play认证修复模块

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 请求的拦截流程走一遍。

  1. 进程分叉拦截。应用发起的请求由 Google Play 服务的com.google.android.gms.unstable进程统一处理。该进程分叉时触发 ZygiskpreAppSpecialize钩子(逻辑在 main.cpp)。模块只对这个进程继续处理,其他任何应用会直接卸载模块库,后续修改不会影响它们。
  2. 属性层替换。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)则报告为"未连接"。效果相当于该进程读取硬件信息时看的是另一套配置好的视图。
  3. KeyStore 层注入。内置 dex 注入进程,把 AndroidKeyStore Provider 换成包装实现(CustomKeyStoreSpi.java)。包装层把所有方法转发给原始 SPI,只在调用栈出现 DroidGuard 时抛出异常拦截证书链查询,避免暴露修改痕迹。若 ROM 使用测试密钥签名,android包的签名也会一并替换(spoofSignature,基于 otacerts.zip 检测自动开启)。
  4. 服务端响应。GMS 最终发出的请求携带替换后的指纹、安全补丁与证书信息,服务端校验无法将其与真实认证设备区分,返回 MEETS_DEVICE 或 MEETS_STRONG。

模块在第 1 步还会检测 TrickyStore 是否安装。若已安装,自动关闭自身的 KeyStore 注入与属性替换,相应职责交给 TrickyStore,两者不互相干扰。

安装与最小配置

前提:Android 8.0+,Zygisk 已启用(Magisk 内置 Zygisk 或 ZygiskNext / ReZygisk),不支持在 recovery 模式安装。

  1. 克隆仓库:git clone https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix.git
  2. 构建模块:cd PlayIntegrityFix && ./gradlew assembleRelease,完成后在out/目录生成模块 zip(构建会编译 classes.dex 与 zygisk .so 并拷入 module 目录)
  3. 在 Magisk(或 KernelSU / APatch)应用中选择"从存储安装",选中 out 目录中的 zip
  4. 重启设备
  5. 确认生效配置:cat /data/adb/modules/playintegrityfix/pif.json
  6. 重新拉取最新 Pixel Beta 指纹(可选,需联网):sh /data/adb/modules/playintegrityfix/action.sh
  7. 需要固定设备画像时,把自定义 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+需要 TrickyStoremodule.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 1:34:13

MathArena Leaderboard揭秘:aime_2026如何衡量并排名各大LLM的数学水平

【免费下载链接】aime_2026 项目地址: https://ai.gitcode.com/hf_mirrors/MathArena/aime_2026 点击查看 免费下载 想知道你的大模型数学能力到底处于什么水平?aime_2026 正是 MathArena Leaderboard(数学竞技场排行榜)所使用的…

作者头像 李华
网站建设 2026/10/18 1:34:11

GhostTrack开源情报工具:用IP、手机号、用户名做快速定位

GhostTrack开源情报工具:用IP、手机号、用户名做快速定位 【免费下载链接】GhostTrack Useful tool to track location or mobile number 项目地址: https://gitcode.com/GitHub_Trending/gh/GhostTrack 收到一封来源可疑的邮件,想确认发件IP来自…

作者头像 李华
网站建设 2026/10/18 1:34:10

gdsdecomp:一条命令把APK反编译成可打开的Godot工程

gdsdecomp:一条命令把APK反编译成可打开的Godot工程 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp 源码丢了,手里只剩一个APK,而GDScript字节码在不同God…

作者头像 李华
网站建设 2026/10/18 1:33:33

REA 如何把 Hopper 反汇编器变成 Agent 可驱动的自动化分析后端

REA 如何把 Hopper 反汇编器变成 Agent 可驱动的自动化分析后端 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea REA 是一个"万物皆可逆向&quo…

作者头像 李华
网站建设 2026/10/18 1:32:53

[deprecated]番外篇:DRM 子系统 —专业解说版

本文是番外篇:戏说 DRM 子系统 —显存租房那些事儿的姊妹篇,专业解说版。可以对照着看。 1. 引言:GPU 场景下的存储管理的需求和场景 在基于 GPU 的应用系统中,存储管理的复杂性远超纯 CPU 场景 —— 系统中存在多个并发进程,每个进程内部需要协调 CPU 与 GPU 两大硬件,…

作者头像 李华
网站建设 2026/10/18 1:32:48

电解电容可控释压:嵌入式硬件反馈新范式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华