我读过 PackageInfo.GET_SIGNATURES 可能与 FakeID 漏洞有关。
如果我做对了,它不会只返回有效证书,所以我可以弄乱证书并在那里添加会破坏信任链的无效证书,这些证书将由 GET_SIGNATURES 返回。在 KitKat 及以下版本中,Android 实施了一些错误的证书检查,并没有检查所有应该检查的内容,因此链可能会被破坏,但一切仍然被认为是正确的。我做对了吗?
如果我这样做了,我有一个问题。
- 由于 GET_SIGNATURES 返回应用程序持有的任何证书,无论它是否证明它可以持有它们,我如何才能体面地检查应用程序的证书之一是否有效?这个问题适用于 KitKat 及以下,以及 Lollipop 及以上(直到 Pie,我们可以使用 GET_SIGNING_CERTIFICATES,它只返回有效的并结束)。
- 我考虑过使用 PackageManager.checkSignatures()。但是……是不是受Pie下面的漏洞影响?(包括 KitKat 及以下和 Lollipop 及以上)因为我不知道如何检查包(抽象方法)。我想从 Lollipop 开始就可以了,因为他们修好了这个东西?如果那是正确的,那么 KitKat 及以下版本呢?在这种情况下,我是否需要自己检查信任链?(或者在任何其他情况下?无论如何都要检查!?)
编辑: checkSignatures()
似乎检查两个包中的所有签名是否相等。这样就可以绕过漏洞。然后我改变我的问题:要检查是否只有一个返回的证书GET_SIGNATURES
是有效的,我是否需要通过自己的信任链算法进行编码?