欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Apk去掉签名以及重新签名的方法

程序员文章站 2024-02-29 07:58:52
android apk去掉签名以及重新签名的方法 android开发中很重要的一部就是用自己的密钥给apk文件签名,不经过签名的apk文件一般是无法安装的,就算装了最后也...

android apk去掉签名以及重新签名的方法

android开发中很重要的一部就是用自己的密钥给apk文件签名,不经过签名的apk文件一般是无法安装的,就算装了最后也是失败。

网上流传的“勾选允许安装未知来源的应用”其实跟签不签名没啥关系,说白了就是允许安装不从电子市场上下载的应用而已。

近几日需要修改一个apk中jni调用的.so文件,苦于没有apk源代码,只好研究了一下签名相关的问题。当然有很多第三方工具可以做到,但其实jdk中已经提供了强大的签名工具jarsigner。

1.去除签名

其实很简单,用winrar打开apk,找到meta-inf文件夹,删除manifest.mf之外的所有其他文件即可。

2.签名

运行jarsigner,如果没有设置path环境变量,那可以从jdk安装路径下的bin目录中找到,比如我本机的就是c:\program files\java\jdk1.8.0_31\bin\jarsigner.exe

jarsigner用法如下:

用法: jarsigner [选项] jar-file 别名
    jarsigner -verify [选项] jar-file [别名...]

[-keystore <url>]      密钥库位置

[-storepass <口令>]     用于密钥库完整性的口令

[-storetype <类型>]     密钥库类型

[-keypass <口令>]      私有密钥的口令 (如果不同)

[-certchain <文件>]     替代证书链文件的名称

[-sigfile <文件>]      .sf/.dsa 文件的名称

[-signedjar <文件>]     已签名的 jar 文件的名称

[-digestalg <算法>]    摘要算法的名称

[-sigalg <算法>]      签名算法的名称

[-verify]          验证已签名的 jar 文件

[-verbose[:suboptions]]   签名/验证时输出详细信息。
              子选项可以是 all, grouped 或 summary

[-certs]          输出详细信息和验证时显示证书

[-tsa <url>]        时间戳颁发机构的位置

[-tsacert <别名>]      时间戳颁发机构的公共密钥证书

[-tsapolicyid <oid>]    时间戳颁发机构的 tsapolicyid

[-altsigner <类>]      替代的签名机制的类名

[-altsignerpath <路径列表>] 替代的签名机制的位置

[-internalsf]        在签名块内包含 .sf 文件

[-sectionsonly]       不计算整个清单的散列

[-protected]        密钥库具有受保护验证路径

[-providername <名称>]   提供方名称

[-providerclass <类>    加密服务提供方的名称
 [-providerarg <参数>]]... 主类文件和构造器参数

[-strict]          将警告视为错误

比较常用的参数就是指定keystore的位置和签名后的文件,举例如下:

jarsigner -keystore c:\mykey.key -signedjar apk-signed.apk apk-unsigned.apk mykey

待签名的文件是apk-unsigned.apk,签名后的apk是apk-signed.apk。我们也可以不指定-signedjar参数,则在待签名的apk上直接签名。最后一个mykey是我的keystore的别名。

签名完成后再用winrar打开,会发现meta-inf目录下多了mykey.rsa和mykey.sf两个文件,他们分别是:

manifest.mf中保存了所有其他文件的sha-1并base64编码后的值。
mykey.sf中也有其他文件的sha-1并base64编码的值,而且还多一个manifest.mf文件的sha-1并base64编码后的值
mykey.rsa包含了公钥信息和发布机构信息

后两个文件的名称和我的key别名转换为大写后一致。

关于如何生成本机的keystore就不再赘述了,在androidstudio和eclipse中都有相应的工具,图形界面,so easy。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!