AndroidApk签名信息详解
应⽤程序打包时,会对每⼀个未签名的apk进⾏签名。在Apk安装时,会将其签名信息进⾏⽐对,从⽽判断该Apk是否可以安装,在⼀定程度上达到安全的⽬的。
给定⼀个Apk⽂件,解压,可以看到⼀个META-INFO⽂件夹,在该⽂件夹下有三个⽂件:分别为MANIFEST.MF、CERT.SF和
CERT.RSA。这三个⽂件分别表征以下含义:
MANIFEST.MF:这是摘要⽂件。程序遍历Apk包中的所有⽂件(entry),对⾮⽂件夹⾮签名⽂件的⽂件,逐个⽤SHA1⽣成摘要信息,再⽤Base64进⾏编码。如果你改变了apk包中的⽂件,那么在apk安装校验时,改变后的⽂件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。
(说明:如果攻击者修改了程序的内容,有重新⽣成了新的摘要,那么就可以通过验证,所以这是⼀个⾮常简单的验证)
CERT.SF:这是对摘要的签名⽂件。对前⼀步⽣成的MANIFEST.MF,使⽤SHA1-RSA算法,⽤开发者的私钥进⾏签名。在安装时只能使⽤公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF⽂件)进⾏对⽐,如果相符,则表明内容没有被异常修改。
android获取真正的签名(说明:在这⼀步,即使开发者修改了程序内容,并⽣成了新的摘要⽂件,但是攻击者没有开发者的私钥,所以不能⽣成正确的签名⽂件(CERT.SF)。系统在对程序进⾏验证的时候,⽤开发者公钥对不正确的签名⽂件进⾏解密,得到的结果和摘要⽂件
(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装⽂件)
CERT.RSA⽂件中保存了公钥、所采⽤的加密算法等信息。
(说明:系统对签名⽂件进⾏解密,所需要的公钥就是从这个⽂件⾥取出来的)
结论:从上⾯的总结可以看出,META-INFO⾥⾯的说那个⽂件环环相扣,从⽽保证Android程序的安全性。(只是防⽌开发者的程序不被攻击者修改,如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序,Android系统都⽆法检测出来。
查看Apk签名信息:jarsigner -verify -verbose -certs xxx.apk
查看KeyStore信息:keytool -list -v -keystore keystore.jks
查看Apk签名指纹信息:解压缩Apk,keytool -printcert -file META_INF/CERT.RSA
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论