写点什么

V1 签名校验

作者:北洋
  • 2022 年 6 月 16 日
  • 本文字数:1540 字

    阅读完需:约 5 分钟

签名校验流程

==基础知识==: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 中的任何内容,就必须重新签名,不然会提示安装失败。

发布于: 刚刚阅读数: 5
用户头像

北洋

关注

Android开发 2021.05.25 加入

记录Android学习之路 分享读书心得体会~

评论

发布
暂无评论
V1签名校验_Andriod_北洋_InfoQ写作社区