在不发布应用的情况下添加 Google Play“安全元数据”

Posted

技术标签:

【中文标题】在不发布应用的情况下添加 Google Play“安全元数据”【英文标题】:Add Google Play "security metadata" without publishing an app 【发布时间】:2018-12-05 23:46:54 【问题描述】:

最近,Google 引入了security metadata,该security metadata 添加到上传到 Google Play 的每个应用程序中。我们曾经有一个篡改保护,它在运行时计算应用程序的签名(哈希),并检查它是否等于在发布期间计算的哈希。这多年来一直运行良好,但现在 GP 正在通过添加安全元数据来修改应用程序的二进制文件。

有没有办法完全禁用 GP 安全元数据? 有没有办法在不发布的情况下从商店检查(下载)修改过的 APK?测试版中的应用似乎没有被修改,所以这个解决方案不起作用。

【问题讨论】:

【参考方案1】: 无法禁用 Google Play 安全元数据。 不发布应用就无法获取 Alpha 和 Beta 通道中的 APK 已修改(或应该修改),但前提是它们是在计划开始日期(2018 年 6 月 19 日 12:00 UTC)之后上传的。但是,APK 在 Beta 版和生产版中会有不同的元数据。 散列解决方案将继续工作,但不是散列整个文件的解决方案。您可以考虑的替代方法包括散列 zip 条目或散列 classes.dex 文件。这些方法适用于其他开发者。

如果您偶尔可以在线访问(如果您正在检查哈希,我假设您这样做),另一个可行的选项是使用SafetyNet attestation API 检查您的应用程序,并在服务器上离线验证签名。同样,许多大牌开发者都成功地使用了它。

【讨论】:

嗨尼克。正如您所指出的,我们对整个文件进行哈希处理。我们正在考虑切换到散列 DEX 和关键资源文件,但这种更改对我们来说将是非向后兼容的 :( 散列不仅用作 DRM,而且还用作许多其他内部安全功能的组件。你能解释一下我们可以散列什么样的 ZIP 条目而不是整个 APK/ZIP? 没有更改任何 zip 条目。正如块帖子所说,元数据被添加到 APK 签名块中,因此每个单独的文件都与开发人员发送的完全相同。要了解更多信息,请参阅source.android.com/security/apksigning/v2 所以只有 APK 的整个文件哈希会破坏 - 其他任何内容的哈希都不会改变【参考方案2】:

抱歉,不直接回答您的问题,但无论如何发布以防万一您或其他任何人在同一情况下:您是否考虑过验证 APK 的签名,而不是检查哈希? Apksig 是一个开源库,可以让您以更强大的方式获得类似的结果。

【讨论】:

您好,我们还验证了应用的签名,但这还不足以满足我们的需求。

以上是关于在不发布应用的情况下添加 Google Play“安全元数据”的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Android Studio 的情况下为 Google Play 开发控制台创建即时应用程序?

我可以在不使用 Google Play/App Store 的情况下分发 Ionic 应用程序吗? [关闭]

我们可以在不更改 APP 版本的情况下更新 Google Play Store 上的 APK

新的 Google Play 隐私政策中的包可见性

修改google play商店列表[关闭]

有没有办法在不将应用上传到 Play 管理中心的情况下使用真实的 unitID 测试 adMob 广告?