实战-第三方平台系统升级签名校验问题

需求
需要升级第三方平台的系统,后续自己维护系统所有应用,大前提是拿到源码后,需要进行对系统签名进行替换,便于后续维护。(注不再维护第三方平台的应用)
需要替换的是:
build/target/product/security
platform.pk8、platform.x509.pem
也即platform.签名,这些主要用于我们系统apk 的签名校验。防止其他应用替换

系统包ota 用的是testkey 签名,我们不用替换着个。否则会升级失败。这个testkey 签名也是每个项目私有并独立使用。

理论


1.更换应用时,必须使用与旧应用相同的密钥对其签名,才能存取旧应用的数据。无论是通过覆盖 .apk 来更新用户应用,还是使用安装在 /data 下的新版本应用来覆盖系统应用,这一点都适用。

2.如果两个或多个应用想要共享同一个用户ID(方便共享数据等),则必须使用相同的密钥对它们进行签名。

3.必须使用符合系统预期的密钥对 OTA 更新包进行签名,否则在安装过程中 OTA 更新包将被拒绝。


实战
替换platform 签名后,有两个地方需要注意:

1.修改时间戳

bootable/recovery /updater/install.c
struct utimbuf timestamp = { 1217592000, 1217592000 };  // 8/1/2008 default

这个时间必须变化一下,否则可能导致系统的签名没有更新成功

2.系统升级后,apk解析
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

scanPackageDirtyLI(){
    if (pkgSetting.sharedUser != null) {
        if (compareSignatures(pkgSetting.sharedUser.signatures.mSignatures,
          pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) {
    //                            throw new PackageManagerException(
    //                                    INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES,
    //                                            "Signature mismatch for shared user : "
    //                                            + pkgSetting.sharedUser);
        pkgSetting.sharedUser.signatures.mSignatures = pkg.mSignatures;
        }
    }
}

以上两个关键点解决即可替换platform签名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值