Android 签名
目录
Android 签名
我们已经知道的是:Android对每一个Apk文件都会进行签名,在Apk文件安装时,系统会对其签名信息进行比对,判断程序的完整性,从而决定该Apk文件是否可以安装,在一定程度上达到安全的目的。
给定一个Apk文件,解压,可以看到一个META-INFO
文件夹,在该文件夹下有三个文件:分别为MANIFEST.MF、CERT.SF和CERT.RSA
。这三个文件分别表征以下含义:
MANIFEST.MF
这是摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。
说明:如果攻击者修改了程序的内容,又重新生成了新的摘要,那么就可以通过验证,所以这是一个非常简单的验证。
部分内容:
Manifest-Version: 1.0
Built-By: Generated-by-ADT
Created-By: Android Gradle 3.3.2
Name: AndroidManifest.xml
SHA1-Digest: uM0xGcY9delfxcFXNCecepGoXjY=
Name: classes.dex
SHA1-Digest: FVa2sFQFi/hEnW8M5MXYiNvKB8o=
CERT.SF
这是对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。
说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(CERT.SF)。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装文件。
部分内容:
Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA1-Digest-Manifest: chkCHg3YRXYD0bpDBe3KqkrmoJw=
X-Android-APK-Signed: 2
Name: AndroidManifest.xml
SHA1-Digest: s/4woLGlrUeK9U3GcWM/U25utVs=
Name: classes.dex
SHA1-Digest: v0G/nrC12foMdi3VsoUc6oAxbFQ=
CERT.RSA
文件中保存了公钥、所采用的加密算法等信息。
说明:系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。
结论
从上面的总结可以看出,META-INFO里面的说那个文件环环相扣,从而保证Android程序的安全性。
只是防止开发者的程序不被攻击者修改,如果开发者的公私钥对被攻击者得到或者开发者开发出攻击程序,Android系统都无法检测出来。
2016-03-29
本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/5334243.html