替换Android10.0系统源码的签名key

替换Android10.0系统源码的签名key

1.系统的环境

WSL2 Ubuntu18.04 替换 Android10.0 系统签名的key

由于Android的key的生成是需要openssl的参与,所以首先查看一下openssl的版本

openssl version

如果执行上面的命令后发现openssl的版本是2018年的openssl 1.1.1 那么这个版本太老了,生成key的话会导致一些问题,建议升级到最新的openssl 1.1.1 比如我这边使用的是openssl-1.1.1-stable-SNAP-20220716.tar.gz

下载这个包后放到ubuntu的目录下:根据这个博客操作即可
解决Ubuntu下升级openssh以及openssl全过程

升级完openssl后再次执行以下 openssl version看日期是否改变

2.生成签名

在源码根目录下执行以下脚本:

subject='/C=CN/ST=Wuhan/L=Wuhan View/O=Guide/OU=Android/CN=gd07729/emailAddress=yuw@guideir.com'
mkdir security
for x in releasekey platform shared media networkstack verity; do \
    ./development/tools/make_key security/$x "$subject"; \
  done

如果有以下报错:

Can't load /root/.rnd into RNG
140187905598784:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=/root/.rnd

需要在对应目录下执行以下命令:

我这里的目录时root

cd /root
openssl rand -writerand .rnd

接着生成verity_key

make generate_verity_key (mmm system/extras/verity/)
out/host/linux-x86/bin/generate_verity_key -convert security/verity.x509.pem security/verity_key

最后将所有的key都拷贝到一个目录下:

sudo cp security device/qcom/project_xxx/

3.将上面的目录设置成默认的签名位置

​ (1)由于我们的项目时qssi的项目需要同时修改qssi和项目的mk加入以下:

device/qcom/qssi/qssi.mk
+PRODUCT_DEFAULT_DEV_CERTIFICATE:=device/qcom/zc16a/security/releasekey
device/qcom/project_xxx/project_xxx.mk
+PRODUCT_DEFAULT_DEV_CERTIFICATE:=device/qcom/zc16a/security/releasekey

​ (2) 修改system/sepolicy/private/keys.conf和对应api的prebuild目录下比如10.0就是/system/sepolicy/prebuilts/api/29.0/private/keys.conf中的testkey.x509.pem 替换成releasekey.x509.pem

Android10.0 
19 # Should be synced with keys.conf.
20 all_plat_keys := platform media shared testkey
21 all_plat_keys := $(all_keys:%=$(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE))/%.x509.pem)
//这里是想获取到platform media shared testkey这几个key的位置但是由于上面将all_plat_keys写成了all_keys会导致执行完成后all_plat_keys为null已经在Android11.0修复替换成了如下代码:
21 # Should be synced with keys.conf.
22 all_plat_keys := platform media networkstack shared testkey
23 all_plat_keys := $(all_plat_keys:%=$(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE))/%.x509.pem)

​ (3) 修改/system/sepolicy/mac_permissions.mk 中 将all_plat_keys := platform media shared testkey 中的testkey 改为releasekey(在11.0以上需要修改)

上面的第三步google在10.0 及以下会有个bug

4.替换过程中出现的坑

(1)如果我们的openssl没有升级用的还是ubuntu 系统自带的话 编译过程中给系统apk签名就会出现以下报错

java.lang.IllegalArgumentException: illegal object in getInstance: org.bouncycastle.asn1.DLSequence
at org.bouncycastle.asn1.ASN1Integer.getInstance(ASN1Integer.java:44)
at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.(PrivateKeyInfo.java:134)
at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.getInstance(PrivateKeyInfo.java:83)
at com.android.signapk.SignApk.readPrivateKey(SignApk.java:276)
at com.android.signapk.SignApk.main(SignApk.java:1090)

(2)下面这个报错出现的场景是我升级openssl到3.0.5后编译出现的,将openssl还原回1.1.1后便不会出现了
在这里插入图片描述

5.制作给app用的系统签名文件

source build/envsetup.sh
lunch 34 #这里替换成你们自己的项目 主要是导入keytool命令
mkdir platform_key
sudo cp security/platform.pk8 platform_key
sudo cp security/platform.x509.pem platform_key
cd platform_key
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:android -name platform
keytool -importkeystore -deststorepass android -destkeystore platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android  -alias platform

关于生成系统签名的步骤可以参考

https://blog.csdn.net/qq_21086749/article/details/119701389

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值