android - 是什么阻止了 Google 修改我们通过应用签名服务签名的 APK?

标签 android android-app-signing

作为 this question 的后续行动,我试图弄清楚是什么阻止了谷歌修改它签署和分发的应用程序。无论我们是分发 APK 还是 App Bundle,App Signing 服务都会剥离我们拥有的任何签名,而 Google 会对它分发的 APK 进行签名。对于 App Bundle,这将产生多个 APK,类似于 bundletool生成。
但由于 APK 只是一个包含已编译代码和资源的 ZIP 存档,因此 Google 似乎可以在签名之前按照他们认为合适的方式对其进行修改,包括添加或替换代码。
Google has stated :

we don’t modify and distribute your application code without your knowledge and approval


和:

As stated before, Play will not modify the functionality of your application without your knowledge and approval.


值得注意的是,谷歌使用了“不要”和“不会”……而不是“不能”和“不能”。事实上,在同一篇文章中,我们看到:

For apps uploaded as app bundles, we will improve this security by introducing what is called a source stamp. This source metadata is inserted into the app’s manifest by bundletool.


因此,我们知道至少一项修改,尽管是元数据。
加,
the Amazon AppStore for Android modifies APKs before re-signing them :

Regardless of whether you choose to apply Amazon DRM, Amazon wraps your app with code that enables the app to communicate with the Amazon Appstore client to collect analytics, evaluate and enforce program policies, and share aggregated information with you. Your app will always communicate with the Amazon Appstore client when it starts, even if you choose not to apply DRM.


Amazon removes your signature and re-signs your app with an Amazon signature that is unique to you, does not change, and is the same for all apps in your account.


亚马逊一直在做这种事情for a decade .
似乎谷歌应该拥有与亚马逊相同的技术能力。
那么,我是否缺少任何东西来阻止 Google 添加或修改它重新签名和分发的 APK 中的代码?

最佳答案

Google 不仅有能力修改 .apk上传到它的 Google Play 签名程序的文件——它们已经是了。
诚然,目前这是一个微小的变化,而且肯定是非恶意的;但它仍然是您的 .apk 的实际变化.他们补充说

<meta-data
      android:name="com.android.vending.derived.apk.id"
      android:value="1" />
AndroidManifest.xml以下是我在 2018 年研究该主题时所做的比较。它具有上传前的 apk(使用上传 key 签名),以及从 Google Play 下载并启用了 Google Play 签名的 apk。
Comparison of apk before-after Google play signing
从这张图中可以看出;只有两个变化——旧的签名(上传 key )被删除,并被谷歌签名所取代。并且还略微附加了 AndroidManifest.xml(带有上面提到的元数据)
我还要指出 2017 年的这段 Google IO 视频,他们在其中介绍了 Google Play 签名:https://www.youtube.com/watch?v=5tdGAP927dk&feature=youtu.be .从 11:25 开始,他们正在谈论所谓的“应用签名 + 优化”。他们的想法是他们可以为您优化 apk,并生成子 apk。
Planned architecture of Google play signing optimizations
这是您可以在 Google Play 中基于每个 apk 启用的功能。当然,今天除了这个视频之外,你不会在任何文档中找到任何提及这些内容的内容——那是因为他们后来提出了应用程序包,并且基本上将所有这些工作都移到了其中。因此,这主要是相关的,因为问题是“是什么阻止了 Google 修改我们通过应用签名服务签名的 APK?”,这表明即使是专门针对 .apk他们可以的文件;他们打算;他们是。
正如其他人指出的那样;任何拥有给定应用程序的签名 key 和访问 Google Play 帐户的权限的人都可以上传任何 .apk.aab包含任何东西;只要 packageName 保持不变,并且 versionCode 加一。当启用 Google Play 签名时,这同样适用于 Google。如果他们愿意,他们可以更改、删除或添加到应用程序的任何和所有部分。
值得记住的是,虽然是; Google 可以修改 Google Play 中签名的所有内容和任何内容 .apk文件,这些修改不一定是邪恶的或恶意的。无论是出于优化目的、兼容性还是热修复; Google 可以或将修改上传的 apk 并证明这些修改的理由有很多。他们不一定会就此警告开发人员;开发人员也不一定会对这一发现做出强烈抗议。
我确实相信我们不太可能看到谷歌故意对上传的应用程序进行恶意内容更改,主要是为了商业、声誉和道德风险,这里的其他答案已经很好地概述了。我只是无法想象这对谷歌来说是一个有值(value)的攻击媒介,它超过了相当高的成本风险,并且考虑到其他通常更强大的攻击媒介可供他们使用。
最后,我将提到完整性检查作为发现它的一种方式。在这个领域有几个解决方案比签名检查更进一步,以验证应用程序的完整性。无论是应用程序开发人员自己开发,还是使用现成的解决方案——这些检查通常在设备运行时运行,以验证 apk 的完整性;与编译时或接近编译时获取的记录进行比较。在传输过程中对 apk 执行的修改确实会被此拾取,包括 Google Play 可能进行的任何更改。
免责声明:我在一家应用程序安全公司工作,该公司对我们保护的应用程序执行此类完整性检查(任何其他检查和验证)。我们必须规划并考虑 Google Play 可能对常规 apk 文件和应用程序包的应用程序所做的所有更改 - 因此我们可以区分 Google Play 进行优化和重新打包应用程序的恶意行为者。

关于android - 是什么阻止了 Google 修改我们通过应用签名服务签名的 APK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63705739/

相关文章:

java - 如何在内部静态类中使用 Intent 启动 Activity ?

android - 无法解析函数 'glDrawTexfOES'

android - 如何为 Google App Signing 生成上传 key ?

android - 启用 Google App Signing 后出现 "The AndroidManifest.xml of the uploaded APK could not be parsed. Was it compiled properly?"错误

android - shaperenderer 矩形上的 Libgdx 着色器

android - 在 Android 应用程序中访问唤醒锁统计信息

android - Fit API 在 debup.apk 中有效,但从 Play 商店安装时无效

android - 将签名信息添加到 gradle 中的 apk 文件名

java - 可以禁止 GoogleMap 在点击时移动到标记吗?

android - 丢失 Android keystore 密码但应用程序正在使用谷歌签名方法进行签名