Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-11-13:谈一谈Android的签名机制? #187

Open
MoJieBlog opened this issue Nov 13, 2019 · 6 comments
Open

2019-11-13:谈一谈Android的签名机制? #187

MoJieBlog opened this issue Nov 13, 2019 · 6 comments

Comments

@MoJieBlog
Copy link
Collaborator

  • V1和V2有什么区别?
@canyie
Copy link

canyie commented Nov 14, 2019

首先,签名是防止apk信息被修改的一个机制,打包时把apk的信息与证书做处理,生成加密信息,安装时发现问题则拒绝安装
v1签名将apk的其他文件与证书做处理,信息保存到META-INF文件夹里,这么做的主要问题是直接修改apk包体是没法检测出来的,并由此导致了如Janus(CVE-2017-13156)这样的极严重的漏洞(ART支持直接运行dex文件,通过dex头部的魔数进行判断,而应用安装过程中是通过zip尾部的魔数判断是否是有效的zip文件,所以只要构造出一个既是dex又是zip的文件就能绕过签名验证修改里面的dex文件)
v2签名则直接用apk文件,处理之后写入进去,这样修改包体也会被系统检测出从而被拒绝安装

@PigletPain
Copy link

Android的签名机制包含消息摘要、数字签名和数字证书

@icytz
Copy link

icytz commented Nov 28, 2019

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区

@protectedMan
Copy link

当面试题要考察你某个技术的理解时,除了他们两个在技术上的区别和特点之外。更希望听到的是在业务上的应用,技术是为业务服务的,展现你的业务能力远比展现你的技术能力要重要。
现在我将从技术和业务应用两个方面来剖析android v1和v2签名的区别。
关于v1和v2两种签名的技术上的区别上面👆已经有很详细的回答了,那么我就说一说他们在业务应用方面的区别:
我们有时候做app推广,需要记录这个APP是通过谁的推广链接安装的,那么我我们只需要在每次通过服务器下发apk的时候对apk文件动一些手脚,在apk中标示这个apk是哪个用户分享的,然后当apk安装好打开时就可以读到apk事先存储好的标示,从而实现我们需要的业务需求。
给apk文件动手脚,v1支持,v1+v2的签名方式就不支持了。

@aositeluoke
Copy link

V2
1、更加安全(不可修改),一旦修改则无法安装
2、安装更快(不解压,验证时间缩短)
3、7.0以后的签名方式
建议v1和v2一起使用,7.0以下的手机安装时会使用v1验证,7.0以上的手机使用v2验证

@senlinxuefeng
Copy link

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则所有机型都没问题

Andriod Studio 两种签名机制V1和V2的区别

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants