替换Android10.0系统源码的签名key
  EzIAYXiV4scN 2023年11月02日 33 0

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的目录下:根据这个博客操作即可

https://blog.csdn.net/weixin_43846135/article/details/125309399

升级完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/zc16a/

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

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

device/qcom/qssi/qssi.mk
+PRODUCT_DEFAULT_DEV_CERTIFICATE:=device/qcom/zc16a/security/releasekey
device/qcom/zc16a/zc16a.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

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

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

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)

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
#以platform.pk8 为输入生成platform.pem
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
#以 platform.x509.pem和 platform.pem为输入生成 platform.p12 password:android keyalias:platform
openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:android -name platform
#使用keytool将上面的platform.p12 转化成platform.keystore  
keytool -importkeystore -deststorepass android -destkeystore platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android  -alias platform

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

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

EzIAYXiV4scN