谈⼀谈Android的签名机制?
⾸先,签名是防⽌apk信息被修改的⼀个机制,打包时把apk的信息与证书做处理,⽣成加密信息,安装时发现问题则拒绝安装android获取真正的签名
v1签名将apk的其他⽂件与证书做处理,信息保存到META-INF⽂件夹⾥,这么做的主要问题是直接修改apk包体是没法检测出来的,并由此导致了如Janus(CVE-2017-13156)这样的极严重的漏洞(ART⽀持直接运⾏dex⽂件,通过dex头部的魔数进⾏判断,⽽应⽤安装过程中是通过zip尾部的魔数判断是否是有效的zip⽂件,所以只要构造出⼀个既是dex⼜是zip的⽂件就能绕过签名验证修改⾥⾯的dex⽂件)
v2签名则直接⽤apk⽂件,处理之后写⼊进去,这样修改包体也会被系统检测出从⽽被拒绝安装.
v1签名:将apk中⽂件加密保存到META-INF⽬录中,不包含META-INF⽬中的⽂件。⽣成MANIFEST.MF、CERT.SF、CERT.RSA⽂件MANIFEST.MF :保存各⽂件的SHA-1通过BASE64加密后的值
CERT.SF:保存MANIFEST.MF⽂件的SHA-1通过Base64加密后的值 和MANIFEST.MF中各项的值再次SHA-1并Base64加密保存
CERT.RSA:保存公钥和发布机构信息
v2签名:对apk整个⽂件进⾏分块摘要加密,并把加密信息存在zip中央⽬录前 放在apk sign block区
Android 7.0中引⼊了APK Signature Scheme v2,v1是jar Signature来⾃JDK。
V1:应该是通过ZIP条⽬进⾏验证,这样APK 签署后可进⾏许多修改 - 可以移动甚⾄重新压缩⽂件。
V2:验证压缩⽂件的所有字节,⽽不是单个 ZIP 条⽬,因此,在签名后⽆法再更改(包括 zipalign)。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成⼀步完成。好处显⽽易见,更安全⽽且新的签名可缩短在设备上进⾏验证的时间(不需要费时地解压缩然后验证),从⽽加快应⽤安装速度。
v1和v2的签名使⽤
1)只勾选v1签名并不会影响什么,但是在7.0上不会使⽤更安全的验证⽅式
2)只勾选V2签名7.0以下会直接安装完显⽰未安装,7.0以上则使⽤了V2的⽅式验证
3)同时勾选V1和V2则所有机型都没问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。