AndroidV1,V2,V3签名原理详解

简介: AndroidV1,V2,V3签名原理详解

AndroidV1,V2,V3签名原理详解

签名校验流程

基础知识

1.数字签名

2.数字证书

3.对称加密和非对称加密

背景介绍:

一般开发者会指定使用自己创建的证书,如果没有指定,则会默认使用系统的证书,该默认的证书存储在C:\Users\admin.android\debug.keystore,不同的电脑可能安装不同路径。一个签名证书文件中,是包含一对公私钥,用私钥对apk进行签名,在安装到android手机时,系统会使用证书中对应签名私钥的公钥来验证,查看apk是否被更改过,如果没有则可以安装在手机上。任何的app store都不允许使用默认的debug.keystore打包的apk发布上去,因为debug.keystore的密码是默认的,不安全。

一,没有签名的APK无法安装

Android的APK要进行签名才能够安装到手机上,这是因为在安装的时候系统会进行检测,平时我们直接点AS里面那个绿色的运行按钮也能够直接安装到手机上,这是因为其实它也进行了签名,只不过AS自动帮我们做了这个操作有个默认的签名

在.android目录中有个debug.keystore默认的签名)。

二,校验流程

9.0以上的系统会判断apk是否使用到V3版本的签名,如果有,那么按照V3版本签名校验方式进行校验校验成功直接安装,校验失败拒绝安装;如果apk不是使用V3签名,判断是不是使用V2,如果没有使用V2那么再判断是不是使用V1的签名。

三,进行V3签名

Android不支持V3版本的签名,所以在AS里面看不到V3。但是在SDK中有个签名工具apksigner.jar。只有9.0以上这个签名工具才能签V3版本的签名。

(如果想要签V3版本的签名,那么只能自己去使用这个签名工具在命令行中进行签名)

接下来详细介绍的就是不同的签名版本之间的区别。

不同的签名版本之间的区别

V1签名保护机制

保护APK中已有文件

基于JAR的签名。在打包后的apk中会多三个文件:

一.MANIFEST.MF

APK当中的所有文件都会列出来用Name表示,除此之外每个文件都有SHA-256签名摘要记录

签名摘要记录:校验码对我们的数据内容进行验证,防止别人会修改你的文件。如果文件改动那么对应的检验码就会不一致

二.CERT.SF

这里面存放的和上面MANIFEST.MF的内容一样,只不过多了一个文件就是MANIFEST.MF文件,并对它进行了和其他文件一样的操作:生成校验码。

目的:上面说过修改了文件后,如果只是和之前文件的校验码对比是可以检测到修改的。但是如果我把文件和校验码都进行修改,那么他就检测不出来,这样的安全性就太低了。所以我们把上面的MANIFEST.MF文件也给他进行一次校验。

但是如果你把SF文件和校验码也改了呢?接下来看最后一个文件CERT.RSA

三.CERT.RSA

在签名的时候会给一个证书,里面有公钥和私钥;

这个RSA文件使用私钥计算SF文件的数字签名+包含公钥的证书信息保存到RSA文件中。

第三层防护:理论上没有私钥是无法伪装数字签名的。

总结:

RSA文件保护SF文件,SF文件保护MF文件,MF文件保护apk中已有的所有文件

注意:V1签名保护的是APK中已有文件不被修改,但是新加的文件并不会受影响。

下面我们来分析一下,如果apk文件被篡改后会发生什么。

首先,如果你改变了apk包中的任何文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是验证失败,程序就不能成功安装。

其次,如果你对更改的过的文件相应的算出新的摘要值,然后更改MANIFEST.MF文件里面对应的属性值,那么必定与CERT.SF文件中算出的摘要值不一样,照样验证失败。

最后,如果你还不死心,继续计算MANIFEST.MF的摘要值,相应的更改CERT.SF里面的值,那么数字签名值必定与CERT.RSA文件中记录的不一样,还是失败。

那么能不能继续伪造数字签名呢?不可能,因为没有数字证书对应的私钥。

所以,如果要重新打包后的应用程序能再Android设备上安装,必须对其进行重签名。

从上面的分析可以得出,只要修改了Apk中的任何内容,就必须重新签名,不然会提示安装失败。

V2签名保护机制

保护的是整个APK的字节数据

原理:apk文件本身就是一个zip文件,按照ZIP文件格式插入APK Signing Block分块去记录签名信息

APK Signing Block格式:

size of block: APK分块总长度-8

id-value paris: id与value数据总长度

id:id数据

value:value数据

size of block:与第一个字段相同

magic:魔数(标记文件格式,目的为了快速识别文件格式)

举例:

假如APK签名分块数据总长度为108

size of block:100(108-8)

id-value paris:X(id和value总长度)

id:(4个字节)

value:签名信息(X-4)

size of block:100(108-8)

magic:ZIP文件的魔数

其中可以有多个id-value paris,id和value

那么前面说过V2签名保护的是整个ZIP文件的字节数据,那么具体是保护哪些呢:

可以看到保护的是1,3,4部分和刚才图里面的APK中V2签名存储的其中一个ID值对,但是"刚刚说了可以有多个id-value paris,id和value值对,所以我们可以添加这些东西而且不会影响签名机制"

V3签名保护机制

V3签名和V2签名类似,区别:

一,V3签名多了一个判断机制:“APK签名数据块大小必须是4096的倍数”

二,V3签名分块采用V2相同的签名分块格式,只不过改了V2签名分块中的那个ID

三,增添了有关受支持的SDK版本和prof-of-rotation结构的信息

怎样判断使用的是哪种签名

V1直接看APK的目录就可以分辨

另外两个涉及到了EOCD格式中有一个值代表Central Directory到Contents of Zip Entries的位移,

这里就用图去表示了。。

由此也可以得出:偏移量-APK签名分块长度=签名分块从第几个字节开始

偏移量:上面提到过在EOCD格式中存储着

APK签名分块长度:偏移量-16个字节(magic魔数)-8个字节(size of block)

参考链接:

https://www.2cto.com/kf/201512/455388.html


相关文章
|
存储 监控 前端开发
Java实现根据概率中奖率怎么算
【4月更文挑战第24天】本文介绍了如何使用Java实现基于概率的中奖率计算,涵盖权重分配法和轮盘法。通过实例代码展示了使用Java的权重分配法进行计算,并讨论了常见问题和解决办法,如概率设置错误、浮点数比较误差和随机数生成。此外,还探讨了性能优化、动态调整概率、支持多种抽奖模式以及确保公平性与监管合规的方法。最后,提到了构建一个完整的抽奖系统涉及的奖品管理、抽奖服务、用户接口、日志记录与审计等核心组件。
496 0
Java实现根据概率中奖率怎么算
|
存储 移动开发 JavaScript
H5加载Android本地路径图片
H5加载Android本地路径图片
1483 0
|
API 开发工具 Android开发
AppsFlyer 研究(一)AppsFlyer SDK 集成(1)
AppsFlyer 研究(一)AppsFlyer SDK 集成
1784 0
|
Android开发
Android系统自带样式(android:theme)解析
做Android开发时经常会修改系统默认的主题样式,在android的sdk  安装目录data\res\values\themes.
2604 0
|
存储 Java 开发工具
Git 仓库瘦身与 LFS 大文件存储
【8月更文挑战第13天】在软件开发中,Git仓库可能因累积大量数据而变得臃肿。通过删除多余分支和标签、清理无用提交,并利用`git gc`命令,可有效瘦身仓库。此外,使用Git LFS(Large File Storage)管理大文件,不仅能维持仓库精简,还能高效协作。需先安装并初始化LFS,然后跟踪特定格式的大文件。通过标准的`git add`和`git commit`命令即可管理这些文件,LFS会自动处理其存储与传输。这种方式有助于提升仓库性能与可维护性,但需注意可能产生的额外存储成本。
412 1
|
Dart 开发工具
Dart配置环境变量
在学习dart语言时,当你遇到`zsh: command not found: dart`这个错误时,这说明你的dart没有添加进环境变量中。
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
962 3
|
JSON 自然语言处理 Android开发
Flutter本地化(国际化)之App名称
Flutter本地化(国际化)之App名称
327 1
|
小程序
阿里云短信签名申请流程,手动整理(附短信签名问题解答)
阿里云短信签名是短信中的标识信息,如【阿里云】,用于表明发送方身份。申请流程简便:登录阿里云短信服务控制台,选择国内消息下的签名管理并添加签名,按指引填写表单。审核通常2小时内完成。个人用户每日限申请一个通用签名,企业用户数量不限。签名审核需确保业务主体一致,已通过审核的签名不可改名,仅能调整其它信息并重新审核。特定情况下需上传授权委托书,且签名需关联已备案网站。
3241 1