Android 簽名(META-INF)
阿新 • • 發佈:2018-12-31
在Android的apk包中含有一個叫做META-INF的資料夾,這個裡邊儲存的是關於簽名的一些資訊。
其中將apk包解壓出來,進入META-INF目錄,發現會有3個檔案:CERT.RSA,CERT.SF,MANIFEST.MF。
用記事本開啟MANIFEST.MF檔案,這是個可讀的文字檔案,大約內容如下:
Manifest-Version: 1.0 Created-By: 1.0 (Android) Name: res/drawable-hdpi/shop_search_bg.png SHA1-Digest: OgQ5gmKTFoxuZWAaKBBJKl1Oy24= Name: res/drawable/merchant_btn_selector.xml SHA1-Digest: AkxLT25+wtnL6DCN10rcSTpz6kM=
版本號以及對每一個檔案的雜湊值(BASE64)。包括資原始檔。這個是對每個檔案的整體進行SHA1 hash
然後是CERT.SF檔案,用記事本開啟,內容如下:
Signature-Version: 1.0 Created-By: 1.0 (Android) SHA1-Digest-Manifest: I2tqVFgbG+PZh6o8SWuDePSrTcQ= Name: res/drawable-hdpi/shop_search_bg.png SHA1-Digest: twMIUeZAdwmMBjIDlo/5EiSFWj0= Name: res/drawable/merchant_btn_selector.xml SHA1-Digest: GJqtJ+iUO4Xrjgzri8nzR+GDLVU=
看到跟manifest.mf中的很類似,也是BASE64編碼的雜湊值,這個是對每個檔案的頭3行進行SHA1 hash。
這兩個檔案中的內容僅僅是個摘要,也就是僅僅對檔案做個hash。
最後一個檔案是CERT.RSA,這個檔案中放的是apk包的簽名,同時還有證書的公鑰。
一般來說,證書的內容是:開發者資訊+開發者公鑰 +CA的簽名( CA對前兩部分做hash值然後私鑰加密之後的密文)
驗證過程是:用CA公鑰對括號裡的內容解密,然後對前兩部分hash,跟CA的簽名進行對比,看是否相同。
暫時不知道Android中既然已經有了對整個檔案的摘要,為什麼還要弄個前3行的摘要。
猜想:
cert.rsa這個檔案中應該存放的是開發者資訊+開發者公鑰+開發者簽名【自己就是CA】(對前兩部分的hash用自己私鑰做加密),
解密過程應該是:首先提取自己公鑰,然後對自己加密的那部分解密,然後對前2部分做hash進行比對,模擬跟驗證證書。然後再用公鑰依次驗證每一個檔案的摘要看是否正確。