检查 GET_SIGNATURES 返回的一张证书的有效性

问题描述

我读过 PackageInfo.GET_SIGNATURES 可能与 FakeID 漏洞有关。

如果我猜对了,它不会只返回有效的证书,所以我可以弄乱证书并在那里添加无效的证书,这会破坏信任链,这些证书将由 GET_SIGNATURES 返回。在 KitKat 及以下版本中,Android 实施了一些错误的证书检查,并且没有检查所有应该检查的内容,因此链可能会中断,但仍然可以看到所有内容都是正确的。我做对了吗?

如果我这样做了,我有一个问题。

  • 由于 GET_SIGNATURES 返回应用程序持有的任何证书,无论它是否证明它可以持有它们,我如何才能体面地检查应用程序的证书之一是否有效?这个问题适用于 KitKat 及以下,以及 Lollipop 及以上(直到 Pie,我们可以使用 GET_SIGNING_CERTIFICATES,它只返回有效的并结束这个)。
  • 我考虑过使用 PackageManager.checkSignatures()。但是……是不是受到了Pie下面的漏洞的影响? (包括 KitKat 及以下,以及 Lollipop 及以上)因为我不知道包是如何检查的(抽象方法)。我猜从棒棒糖开始就可以了,因为他们修好了?如果那是正确的,那么 KitKat 及以下呢?在这种情况下,我是否需要自己检查信任链? (或者在任何其他情况下?还是检查一下!?)

编辑: checkSignatures() 似乎检查两个包中的all 签名是否相同。这样就可以绕过漏洞。然后我改变了我的问题:要检查 GET_SIGNATURES 返回的证书中是否只有一个有效,我是否需要通过自己的信任链算法进行编码?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)