1.安卓應用簽名
V1
簽名過程詳細描述
不想深究可直接閱讀簡述模塊。
解壓一個APK文件,用V1簽名的。
會有三個這樣的文件
單獨分析一條:
MANIFEST.MF
Name: AndroidManifest.xml
SHA-256-Digest: Oxzxu/fRfdUg00s2LvddlkY9d6ut2fs9l4zBj2otNl0=
CERT.SF
Name: AndroidManifest.xml
SHA-256-Digest: y+Sc5MScGxRMbjr07+F78kpNBHmZ+PkBmkG2R39CjNs=
算出SHA256
就得到了這個值。
簽名過程簡述
查看SignApk源碼,分析簽名流程。
校驗簽名的過程
1. 首先校驗cert.sf文件的簽名
計算cert.sf文件的摘要,與通過簽名者公鑰解密簽名得到的摘要進行對比,如果一致則進入下一步;
2. 校驗manifest.mf文件的完整性
計算manifest.mf文件的摘要,與cert.sf主屬性中記錄的摘要進行對比,如一致則逐一校驗mf文件各個條目的完整性;
3. 校驗apk中每個文件的完整性
逐一計算apk中每個文件(META-INF目錄除外)的摘要,與mf中的記錄進行對比,如全部一致,剛校驗通過;
4. 校驗簽名的一致性
如果是升級安裝,還需校驗證書籤名是否與已安裝app一致。
V2
Android 7.0 引入APK簽名方案V2。
爲什麼引入V2簽名
v1 簽名不保護 APK 的某些部分,例如 ZIP 元數據。APK 驗證程序需要處理大量不可信(尚未經過驗證)的數據結構,然後會捨棄不受簽名保護的數據。這會導致相當大的受攻擊面。此外,APK 驗證程序必須解壓所有已壓縮的條目,而這需要花費更多時間和內存。爲了解決這些問題,Android 7.0 中引入了 APK 簽名方案 v2。
V2的簽名過程
V2的校驗簽名過程
V3
https://source.android.google.cn/security/apksigning/v3
V4
https://developer.android.google.cn/preview/features#signature-scheme-v4
2.基於V2的多渠道打包
爲什麼要實現做多渠道打包
每當發新版本時,Android客戶端會被分發到各個應用市場,比如小米、華爲、應用寶等。爲了統計這些市場的效果,比如安裝數,活躍數、需要有一種方法來唯一標識它們。
傳統方式的問題是什麼
需要手動配置渠道,每次修改完之後都需要重新打包。
假如打一個包的時間是1分鐘,打10個渠道包就需要10分鐘。
可以接受,但不夠優雅。
解決方案是什麼
美團walle方案。
3. 結合實際項目中的實踐
配合360加固等,gradle自定義task實現。
參考資料
博客v1
https://blog.csdn.net/zwjemperor/article/details/80877305
博客v2
https://blog.csdn.net/zwjemperor/article/details/81051120
v2 騰訊
https://cloud.tencent.com/developer/article/1006237
v1 美團
https://tech.meituan.com/2014/06/13/mt-apk-packaging.html
v2 美團
https://tech.meituan.com/2017/01/13/android-apk-v2-signature-scheme.html
安卓官網 v2,v3