Android Apk签名信息详解
2015-11-10 09:51
288 查看
应用程序打包时,会对每一个未签名的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文件)进行对比,如果相符,则表明内容没有被异常修改。
(说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(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
给定一个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文件)进行对比,如果相符,则表明内容没有被异常修改。
(说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(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
相关文章推荐
- Android反射机制实现与原理
- Android Studio 1.4 调试时SDK源码行错乱解决方法
- Android Studio 1.4带来的福利
- Android 监听软键盘弹出状态
- Android开发之getMeasuredWidth和getWidth区别从源码分析
- 美团Android资源混淆保护实践
- 教你轻松制作Android音乐播放器
- 使用selector设置按钮不同状态的样式(Android)
- 使用Drawble文件实现圆角,填充颜色,边框等属性的设置(Android)
- Android开发中的armeabi和armeabi-v7a介绍
- android开发之---管理FragmentManager
- Android studio Git及TortoiseGit使用全程图解
- 史上最详细的android的点9(.9)图片制作教程,菜鸟看完也保证可以学会
- ·(二)Android处理JSON
- 【总结】Dialog的使用(Android)
- Android5.0设置主题样式
- Android客户端与服务端交互之登陆示例
- android90 bind方式启动服务service调用service里的方法
- android中的几个Versoin
- Android中三大组件和Fragment生命周期汇总