APK签名原理

一、APK签名简介

1.APK签名的作用
  • 使用特殊的key签名可以获取一些特殊的权限
  • APK如果使用一个key签名,发布另一个key签名的文件将无法安装或覆盖老的版本。
  • 应用程序升级,只有以同一个证书签名,系统才会允许安装升级的应用程序。
  • 应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序。
2.签名方式

常用的签名方式:

  • V1签名:基于JAR的签名。

               1: keystore(使用jarsigner工具)

                2:.pk8+.x509.pem(使用signApk.jar)。

生成签名后在apk 的META-INF文件夹下会生成下图中三个文件。

MANIFEST.MF是除了三个文件(MANIFEST.MF,CERT.RSA,CERT.SF),其他的文件都会对文件内容做一次SHA1算法,然后用Base64对SHA1进行编码。

CERT.SF是对之前的MANIFEST.MF文件整个内容做一个SHA1放到SHA1-Digest-Manifest字段中。

再对MANIFEST.MF中的每个条目内容进行一次SHA算法。

例如AndroidManifest.xml:

"Name: AndroidManifest.xml\r\nSHA1-Digest: Sov8xvSPp6Hy1XaO20ZtQTIxH7w=\r\n\r\n"

CERT.RSA是把CERT.SF文件用私钥计算签名,然后将签名和包含公钥信息的数字证书一同写入。

V1签名的缺点:签名校验比较慢,增加了安装时间;META-INF 文件不会计入校验过程,可能会带来一些安全隐患。

  • V2签名:全文件签名方案

v2 签名模式在原先 APK 块中增加了一个新的签名块,签名块存储了签名,摘要,签名算法,证书链,额外属性等信息。

签名块所在位置实际是zip文件的EFS(存档额外数据记录)所在位置,zip未加密时EFS数据段不会被zip解析。

摘要计算:

将zip中的每个块按1M大小进行分割,计算每个块的数据摘要,再计算所有数据摘要的摘要。

  • V3签名:

V3基于V2,在V2的基础上增加了秘钥轮替。新增Proof-of-rotation数据结构,包含一个单链表,按照签名证书版本排序。

  • V4签名:

v4 基于 APK 所有的字节计算出 Merkle Hash 树,并将 Merkle 树的根 Hash、盐值作为签名数据进行包完整性校验,v4 签名必须单独存在 .idsig 文件中,不会存在于 APK 文件中,所以 apk 文件中仍然需要 v2 或者 v3 签名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值