Android签名文件转化为pk8和pem来对apk重签名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android签名文件转化为pk8和pem来对apk重签名相关的知识,希望对你有一定的参考价值。

     当我们需要修改已经打包好的apk中的某个文件时,比如改下图标,我们势必要采用反编译apk,改文件,重编译apk,重签名才行,参考:https://www.cnblogs.com/zndxall/p/9628475.html

    但是如果我们不需要改apk里的东西呢,只是想重新签名一下,比如我们会有这样的场景需要验证,apk只能是我们自己的签名才能安装,如果其他人换用其他签名就会安装失败并报错签名不可用。这个时候我们只需要重新签名apk就可以了,如果还是采用反编译,删META-INF,重编译,再签名,一个apk,我们可以忍受,多个apk呢,就有点吃力了。这个时候,我们可以采用另一种方式签名:就是把key转化成pk8和pem文件,然后一条命令就可以完成重签名了

过程如下:

1.keystore文件转化为pk8+pem

keytool -importkeystore -srckeystore my.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12

2. 将PKCS12 dump成pem

openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
tmp.rsa.pem 是文本格式可以直接查看。
打开文本可以看到私钥(PRIVATE KEY )和证书(CERTIFICATE);

复制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建个文件) cert.x509.pem

复制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem

cert.x509.pem 文件即是我们最后需要的证书文件

3.生成pk8格式的私钥
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt

最后的cert.x509.pem private.pk8即是我们最后需要的文件。

*备注:
-nocrypt 这个参数设定key加密 如果设置了这个参数 下面签名 只要证书+key 不需要密码了 如果加密 应该
openssl pkcs8 -topk8 -outform
DER -in private.rsa.pem -inform PEM -out private.pk8 接下来输入密码*


4.用法
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk

 

以上是关于Android签名文件转化为pk8和pem来对apk重签名的主要内容,如果未能解决你的问题,请参考以下文章

Android : apk系统签名的多种方法

Android 根据源码文件生成.jks的系统签名

SignAPK - PEM 文件和 PK8 文件

Android实践 -- 对apk进行系统签名

Android 给APK系统签名

Android签名机制---签名过程