End

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

posted @ 2016-03-29 19:54  白乾涛  阅读(1742)  评论(0编辑  收藏  举报