在某个时刻,处理器需要能够读取您的应用程序中的指令,以知道它应该做什么。操作系统本身需要知道如何处理您的应用程序。
暂且不考虑应用程序的打包方式,出于上述原因,我认为没有技术原因阻止Google或任何具有相关知识和资源的技术实体修改您的应用程序。让我进一步解释:
无论应用程序如何打包 - 操作系统加载应用程序的那一刻,您就知道应用程序的功能。如果操作系统不知道如何处理应用程序,则该应用程序将毫无用处。
您可以尝试混淆它,就像一些流行的蠕虫试图隐藏其目的一样,但这只是拖延不可避免的结果。人们从一开始就一直在反汇编和反编译软件,这就是为什么许多许可证曾经明确禁止反汇编。
了解这一点后,显然,如果“谷歌”想要修改您的应用程序,他们可以这样做,因为即使包被混淆,当应用程序最终执行时,您可以看到它正在做什么,然后记录下来,根据需要修改应用程序。他们也拥有所有必要的技术技能和资源。
让我们暂停一下:
使用签名进行签署的目的是为了确定接收到的应用程序副本是否真实,即在这种情况下,最终用户接收到的应用程序是否与Play商店上的应用程序匹配。目的是确保您拥有的副本与分发给其他用户的副本相同。
您问的是Google无法修改应用程序的技术原因 - 并没有。您自己提到apk只是一个zip文件。如果您的应用程序由您自己签名,并且该相同的签名包含在最终用户接收到的应用程序副本中,则最终用户可以验证Google是否篡改了您的应用程序。但是,如果您的签名被剥离,则用户只能信任Google。
您的问题很有趣,因为它让我想到了另一件事:我猜您提出问题的背景是“Google是否能够在分发之前修改应用程序”。随着现代设备变得越来越强大,什么能阻止操作系统(因为制造商可以定制他们的Android版本)在分发后或将来在执行期间动态修改应用程序呢?
我在下面留下这篇文章:
https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf
由于在我们今天使用的系统中,人类不可能单独验证每个软件的每一部分,因此这似乎将永远是一个长期存在的问题。
我也觉得有点有趣的是,人们认为只要应用程序的源代码可用,就意味着他们可以信任实际在设备上运行的应用程序 - 除非他们已经费力地检查了设备上的应用程序,否则从技术上讲,运行在他们设备上的应用程序可能与源代码描述的不同 - 它可能已被开发人员本身或分发应用程序的商店出于恶意或意外原因进行修改。
但信任必须从某个地方开始。未来,随着量子计算的发展,我们可能会改变做事的方式。但再次,能够真正理解系统每个部分的人很少,我们仍然必须把信任放在某个地方。即使我们理解某些东西,拥有资源来验证它也是另一回事...
那么,是什么阻止了谷歌对其进行修改?
- 他们真的需要吗?是开发人员通过创建和提交应用程序为Google Play创造价值。
- 如果谷歌未经您的许可修改您的应用程序,您会信任谷歌吗?隐私已经是一个重大问题,这将如何影响您对他们作为一家公司的看法。
- 如果他们的修改导致您的应用程序行为不正确并对客户、您或某个第三方实体造成损害,谁将承担责任?
以上只是考虑谷歌是否会修改您的应用程序时要考虑的一些原因。这是一个棘手的问题。最终,这归结于成本效益和风险回报分析。他们会修改您的应用程序用于什么目的,这是否值得承担任何后果的风险?
总之,技术上没有理由他们不能这样做。他们不这样做的原因是由于他们的商业动机和模式。没有什么可以说明他们将来会或不会这样做。但是,没有任何理由武断地修改应用程序 - 必须有一个有效的业务原因,从而产生某种收益。