【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )
文章目錄
- 一、Android 簽名機制
- 二、生成 Android 簽名文件
- 三、分析簽名文件
- 四、簽名文件兩個密碼的作用
- 五、三種簽名方式
一、Android 簽名機制
APK 文件簽名 是為了保證 APK 來源真實性 , 以及 APK 文件沒有被修改過 ;
APK 簽名基于 Hash 散列算法進行 ;
Hash 散列算法特性 :
- 唯一性
- 長度固定
- 不可逆
常用的 Hash 三列算法 :
- SHA-1 算法 : 安全散列算法 111 , 長度 160160160 位 ;
- MD5 算法 : 128128128 位 ;
簽名過程 :
- ① 計算數(shù)據(jù)摘要 : 通過 Hash 算法 , 計算出原始數(shù)據(jù) ;
- ② 私鑰加密 : 使用私鑰對原始數(shù)據(jù)再次進行加密 ; 校驗時 , 使用公鑰對原始數(shù)據(jù)進行解密 ;
- ③ 寫入簽名 : 將簽名寫入簽名區(qū)塊 ;
簽名時 , 輸入簽名文件 keystore 的密碼后 , 還要輸入的別名 和 別名密碼 ; 一個 keystore 可以存放多個密鑰 ;
簽名相當于一個指紋 , 對 APK 的任何修改 , 哪怕在任意資源文件上加上一個空格 , 都會導致簽名被破壞 , 無法通過校驗 ;
簽名時 , 使用私鑰對 APK 加密 ; 安裝 APK 包時 , 系統(tǒng)會使用公鑰解密 ;
二、生成 Android 簽名文件
生成簽名密鑰 :
在 Android Studio 中 , 選擇 " 菜單欄 / Build / Generate Signed Bundle/APK… " 選項 ,
選擇 APK 選項 ,
選擇創(chuàng)建新的簽名文件 ,
在 " Key store path " 中 , 選擇簽名文件的生成路徑 ,
在彈出的對話框中 , 點擊綠色的安卓圖標 , 生成在工程根目錄 ,
輸入密碼和別名密碼 , 都設置為 123456 , 點擊 " OK " 即可生成該簽名文件 ;
簽名文件生成在工程根目錄中 ;
三、分析簽名文件
使用
keytool -list -v -keystore keystore.jks命令 , 可以查看該簽名密鑰的詳細信息 ;
下方的擴展中 , 有 111 個密鑰 #1: ObjectId: 2.5.29.14 Criticality=false ;
111 個 jks 文件中 , 可以有多個密鑰的 , 在該擴展中 , 可以有多個密鑰 ;
上述簽名 , 有負責 Java 程序簽名的 , 有負責 Android APK 簽名的 ;
Y:\002_WorkSpace\001_AS\AppStart>keytool -list -v -keystore keystore.jks 輸入密鑰庫口令: 密鑰庫類型: PKCS12 密鑰庫提供方: SUN您的密鑰庫包含 1 個條目別名: key0 創(chuàng)建日期: 2021-9-14 條目類型: PrivateKeyEntry 證書鏈長度: 1 證書[1]: 所有者: CN=Han Shuliang 發(fā)布者: CN=Han Shuliang 序列號: 3f8f6290 有效期為 Tue Sep 14 22:31:41 GMT+08:00 2021 至 Sat Sep 08 22:31:41 GMT+08:00 2046 證書指紋:MD5: C1:02:69:22:1F:DB:62:A2:75:B4:C3:B8:6A:55:0C:23SHA1: 52:00:F8:BB:3B:3E:5B:DC:CF:BD:94:5A:30:A4:DF:C4:9D:33:54:EESHA256: 02:42:F3:F2:5B:9A:04:9A:28:FD:16:06:25:66:BF:28:F0:DE:14:42:69:04:60:DF:2C:AD:42:C0:51:6D:9B:57 簽名算法名稱: SHA256withRSA 主體公共密鑰算法: 2048 位 RSA 密鑰 版本: 3擴展:#1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 26 9F 73 C0 B7 BC 03 F2 6A 15 0A E1 B7 8C 0B 78 &.s.....j......x 0010: 1A 92 C4 8E .... ] ]******************************************* *******************************************四、簽名文件兩個密碼的作用
紅色矩形框內(nèi)的密碼是簽名文件的密碼 ;
藍色矩形框內(nèi)的別名和密碼 , 是給 APK 簽名的密碼 ;
五、三種簽名方式
Android 有 333 套簽名方式 ,
V1 簽名是 Jar 文件簽名 ; 該簽名有一定的不安全性 ;
V2 簽名是 整個 APK 文件簽名 ; 這是在 Android 7.07.07.0 之后出現(xiàn)的 ;
V3 簽名需要升級簽名密鑰 ; 在 Android 9.09.09.0 之后出現(xiàn)的 ;
總結
以上是生活随笔為你收集整理的【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于flask框架的高校舆情分析系统
- 下一篇: 如何建立一个Java商城系统?