登录

去注册

登录

注册

去登录

注册

每日一问 Android 签名机制 v1 v2 v3 , 卧槽都 v3 了?

xiaoyang   2019-12-04 00:18   收藏

技术的演进都是有原因的,带着好奇的思路,所以今天的问题是:

  1. Android v1 v2 v3 签名机制是什么样子的,或者说各自是如何保证 apk 的防篡改的?
  2. v1 -> v2 -> v3 主要是为了解决什么问题,或者带来了什么好处?
  3. 对于快速的多渠道打包,针对 v1,v2,v3 都可以怎么做,有哪些开源库可以考虑?
3

卧槽,这两天在搞多渠道打包,想这几天忙完学习一下签名,这都出题了!

参考美团的文章
https://tech.meituan.com/2017/01/13/android-apk-v2-signature-scheme.html
目前总结如下:

v1

以前大部分通过python打多渠道包原理,都是解压apk,在META-INF目录下添加空文件,文件名就是渠道名,而这种方式只能在v1签名的情况下使用,v1签名不校验META-INF,而v2签名将META-INF列入保护区,这种方式打出来的渠道包是过不了安装时候的签名验证的。

v2

v2签名,首先整个APK(ZIP文件格式)会被分为以下四个区块

  1. Contents of ZIP entries(from offset 0 until the start of APK Signing Block)
  2. APK Signing Block
  3. ZIP Central Directory
  4. ZIP End of Central Directory

应用的签名信息会被保存在区块2(APK Signing Block)中,其它3个区块是受保护的,所以可以在区块2做文章:

区块2中APK Signing Block是由这几部分组成:

  • 2个用来标示这个区块长度的8字节
  • 这个区块的魔数(APK Sig Block 42)
  • 这个区块所承载的数据(ID-value 组)

V2的签名信息是以ID-value格式保存在APK Signing Block这个区块的ID-value 组中,所以美团开源的“瓦力”,原理就是将渠道信息以id-value的格式,写到区块2(APK Signing Block)的 ID-value 组中

最终我选择美团的“瓦力”,搞定多渠道打包,就等发布apk了~

美团瓦力
https://github.com/Meituan-Dianping/walle

回复
蓝师傅 : @蓝师傅 

v3 我还没用过,所以没有考虑,后面学习~

2天前 回复
陈小缘 : @蓝师傅 

赞~

2天前 回复
1

v1:先有个apk校验功能,把签名信息放一个地方
v2:在此基础上优化一下,把签名信息放好几个地方
v3:签名过期了可怎么办,得处理处理

回复
xujiafeng : @Reginer 

看到id先点个赞

22小时前 回复
0

知识盲区了。。。

Google到一篇关于介绍v3的文章,觉得讲得很棒:
https://xuanxuanblingbling.github.io/ctf/android/2018/12/30/signature/

官网上介绍v3的地址(要那个):
https://source.android.com/security/apksigning/v3

回复
有时放纵 : @陈小缘 

已经养成习惯了,每次看到有新的问答的时候,点进来先看回答区是否有小缘。。

1天前 回复
陈小缘 : @有时放纵 

有点感动

1天前 回复

删除留言

确认删除留言,会导致相关评论丢失?

取消 确定