android apk v1 签名验证分析

本文详细介绍了Android APK的V1签名验证过程,包括MANIFEST.MF、ANDROIDR.SF和ANDROIDR.RSA三个文件的作用及内容分析,以及如何通过SHA1运算和Base64编码来验证APK的完整性。
摘要由CSDN通过智能技术生成

作者:jafon.tian

转载请注明出处:https://blog.csdn.net/JT_Notes

Android的应用包格式具有防篡改,防重打包的能力,这是如何做到的?秘密就隐藏在META-INF文件夹中,下面通过QQ安装包的分析来进行详细的说明和分析。

1. 准备

1 QQ官网下载Android安装包mobileqq_android.apk
2 将安装包后缀由apk改为zip,使用解压软件释放中其中的文件
3 将其中的META-INF文件夹拷贝出来,用于后续分析

  META-INF/

    --ANDROIDR.RSA

    --ANDROIDR.SF

    --MANIFEST.MF

2. 文件分析

名称 说明
MANIFEST.MF 包含了除META-INFO目录外所有文件的路径和hash结果
ANDROIDR.SF 对MF整个文件和里面每个条目进行了二次hash
ANDROIDR.RSA 包含开发者证书以及使用开发者私钥对SF文件的签名

文件之间的逐层保护关系为 RSA文件–>SF文件–>MF文件–>应用其他文件

2.1 MANIFEST.MF文件

下面截取文件头部的片段进行说明,除了文件头,其他文件内容都遵循相同的规则。

Manifest-Version: 1.0

Name: AndroidManifest.xml
SHA1-Digest: 8tS1gpP+QbotpYp6jN1PCfulDbU=

名称 说明
Manifest-Version: 1.0 Manifest版本信息,应该是用于日后扩展使用
Name: AndroidManifest.xml
SHA1-Digest: 8tS1gpP+QbotpYp6jN1PCfulDbU=
Name字段指明应用文件全路径
SHA1-Digest字段指明使用的hash算法是SHA1以及计算结果的base64编码

SHA1-Digest计算过程:

  1. 对文件AndroidManifest.xml的进行SHA1运算,结果用16进制字符串表示为:

      f2d4b58293fe41ba2da58a7a8cdd4f09fba50db5
  2. 将16进制字符串进行base64编码的结果为:

      8tS1gpP+QbotpYp6jN1PCfulDbU=

2.2 ANDROIDR.SF文件

下面截取文件头部的片段进行说明,与MF文件类似,除了文件头,其他文件内容也是遵循相同的规则。

Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA1-Digest-Manifest: ouJT4yGiaaiMea/Wu6708IP44P4=
X-Android-APK-Signed: 2

Name: AndroidManifest.xml
SHA1-Digest: lu99E667G2n1uJJ2nDaMFNZLEmE=
名称 说明
Signature-Version: 1.0
Created-By: 1.0 (Android)
X-Android-APK-Signed: 2
版本信息
SHA1-Digest-Manifest: ouJT4yGiaaiMea/Wu6708IP44P4= 对MANIFEST.MF整个文件进行hash运算结果的base64编码形式,hash运算采用SHA1算法
Name: AndroidManifest.xml
SHA1-Digest: lu99E667G2n1uJJ2nDaMFNZLEmE=
Name字段指明应用文件全路径
SHA1-Digest字段是对SF中对应字段内容的hash运算结果,详细见下文说明

SHA1-Digest-Manifest计算过程:

  1. 对文件MANIFEST.MF进行SHA1运算,结果的16进制字符串表示为:

      a2e253e321a269a88c79afd6bbaef4f083f8e0fe
  2. 将16进制字符串进行base64编码的结果为:

      ouJT4yGiaaiMea/Wu6708IP44P4=

SHA1-Digest计算过程:

  1. 在MANIFEST.MF文件中找到具有相同Name字段的内容。

在MANIFEST.MF文件中找到Name字段为AndroidManifest.xml的条目



Name: AndroidMani

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值