马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
之前在公众号的粉丝问答中,有人问到有关SafetyNet的相关问题,今天大概和大家说一下。 简单来说,如果你的设备没有通过谷歌GTS测试,也就意味它没有进行SafetyNet验证,直接导致的问题就是无法出厂预装GMS;后期,即使用户后期自己手动安装了GMS,但是仍然无法下载一些应用。比如Netflix、一些游戏、应用等。它们会告诉你,您的设备与此版本不兼容。
据谷歌 Android 开发者官方网站上的官方文档描述,SafetyNet 全名为:SafetyNet Attestation API ,它是一种反滥用 API,让应用开发者能够评估运行其应用的 Android 设备。该 API 应该用作滥用检测系统的一部分,以帮助确定您的服务器是否与在真实 Android 设备上运行的真实应用互动。[1]
SafetyNet Attestation API 提供采用加密签名的证明,用于评估设备的完整性。为了创建证明,该 API 会检查设备的软件和硬件环境,以查找是否存在完整性问题,并将相应数据与已获批 Android 设备的参考数据进行比较。生成的证明会绑定到调用方应用提供的 Nonce。该证明还包含生成时间戳以及发起请求的应用的元数据。[1] SafetyNet Attestation API 使用以下工作流程[1]: (1)SafetyNet Attestation API 收到您的应用发起的调用。该调用包含一个 Nonce。 (2)SafetyNet Attestation 服务评估运行时环境,并向 Google 的服务器请求已签名的评估结果证明。 (3)Google 的服务器将已签名的证明发送给设备上的 SafetyNet Attestation 服务。 (4)SafetyNet Attestation 服务将此已签名的证明返回给您的应用。 (5)您的应用将已签名的此证明转发给您的服务器。 (6)服务器会验证响应,并将其用于反滥用决策。您的服务器会向您的应用传达其发现的结果。
此流程的图形描述如图 1 所示:
对于国内这些OEM厂商来说,要想预装谷歌服务,必须通过谷歌的GTS验证。
通过验证之后的 手机硬件信息会记录在Google的服务器当中,用户购买新机之后,在如果安装了谷歌框架, 在Google Play Store的Play保护机制认证设置当中,就可以看到「该设备已通过认证」的显示。
这些情况下,你的设备将无法通过SafetyNet验证检查: (1)你的手机在出厂时并未通过谷歌的GTS验证(2)你的手机通过了谷歌GTS验证,但是你解除了BootLoader锁(3)开启了root(4)刷入了非官方ROM(5)其他一些情况(Xposed、太极等) 那么如何知道自己的设备是否通过SafetyNet验证呢?有一种方法如下:(1)安装并打开「Magisk Manager」软件(2)点击 「点按启动SafetyNet检查」 右边的刷新按钮
(3)等待检查完成;注:检测过程可能需要科学上网工具检测完成之后,下方会有两个参数,分别是「 cstProfile」和「basicIntegrity」,只有当二者均为「true」的时候,才意味着你的设备正常通过了SafetyNet验证。
对于玩机爱好者来说,解锁和root是必须的;但同时也希望保留SafetyNet通过验证,可以正常安装和使用一些软件和服务。那么,有没有两全其美的办法呢? 在完成上述的检测操作之后,会有两种可能的情况。[2]情况1:cstProfile 显示为 false,basicIntegrity 显示为 true。
这种情况下,可以通过刷入Magisk模块「MagiskHide Props Config」,来解决问题,使得cstProfile 显示为 true。(注:如果不生效,建议安装一下BusyBox Magisk 模块,在Magisk里面同样搜索即可)
情况2:cstProfile 显示为 false,basicIntegrity 显示为 false。
这种情况下,一般是ROM固件的问题。如果想要使其显示为 true,可以先尝试「开启Magisk核心功能模式」,或者「卸载掉所有的模块」;如果仍然是 false,那么就需要更换你的ROM固件了。需要注意的是,小米的一些机型可能会出现开发版固件无法通过SafetyNet验证的情况,因此建议换稳定版固件。 当cstProfile 和 basicIntegrity 二者均显示为 true的时候,就可以将谷歌服务框架的相关应用(包括Google Play Store、Google Play 服务等)添加到「Magisk Hide」当中。这样,就可以骗过Google Play Store,从而正常的下载一些需要验证SafetyNet的应用了。
而随着谷歌不断加强安卓系统服务的整体安全性,Magisk框架的作者表示,其无法在最新版本的Google Play服务上通过任何类型的SafetyNet(包括basicIntegrity )。尽管低版本的Google Play服务目前仍然可用,但是在将来,其最终还是会被替代。到了那时候,可能通过SafetyNet验证就困难得多,甚至根本无法通过了。
|