裝載請標明出處,維權必究:https://www.cnblogs.com/tangZH/p/12040927.html 首先我們在as中雙擊apk,出現apk的分析界面,然後選中保存簽名相關文件的文件夾: 一:簽名文件: 1、MANIFEST.MF:保存了所有其他文件的SHA-1並base64編碼後 ...
裝載請標明出處,維權必究:https://www.cnblogs.com/tangZH/p/12040927.html
首先我們在as中雙擊apk,出現apk的分析界面,然後選中保存簽名相關文件的文件夾:
一:簽名文件:
1、MANIFEST.MF:保存了所有其他文件的SHA-1並base64編碼後的值
2、CERT.SF:
SHA1-Digest-Manifest的值,這個值就是MANIFEST.MF文件的SHA-1並base64編碼後的值。
後面幾項的值是對MANIFEST.MF文件中的每項再次SHA1並base64編碼後的值。
將上一個文件的某一項取出,比如:
Name: assets/BookCategoryConfig
SHA1-Digest: u5YLUiucukHRhO/xAqnzbnCb6cU=
加兩個\r\n,保存文件,再SHA1並base64編碼便可得到。
3、CERT.RSA:
包含了公鑰信息和發佈機構信息。它把之前生成的 CERT.SF文件, 用私鑰計算出簽名, 然後將簽名以及包含公鑰信息的數字證書一同寫入 CERT.RSA 中保存。CERT.RSA是一個滿足PKCS7格式的文件。
Name”屬性,其值就是該文件在apk包中的路徑。
二、簽名過程
CERT.RSA文件生成:
它會把前面生成的 CERT.SF文件用私鑰計算出簽名, 然後將簽名以及包含公鑰信息的數字證書一同寫入 CERT.RSA 中保存。CERT.RSA是一個滿足PKCS7格式的文件。
三、APK安裝校驗過程
1、通過在CERT.RSA文件中記錄的簽名信息,驗證了CERT.SF沒有被篡改過
RSA是一種非對稱加密演算法。用私鑰通過RSA演算法對摘要信息進行加密。在安裝時只能使用公鑰才能解密它。解密之後,將它與未加密的摘要信息進行對比,如果相符,則表明內容沒有被異常修改。
2、通過CERT.SF文件中記錄的摘要值,驗證了MANIFEST.MF沒有被修改過
3、apk內文件的摘要值要與MANIFEST.MF文件中記錄的一致
這裡簡單介紹下SHA1數字簽名。簡單地說,它就是一種安全哈希演算法,類似於MD5演算法。它把任意長度的輸入,通過散列演算法變成固定長度的輸出(這裡我們稱作“摘要信息”)。你不能僅通過這個摘要信息複原原來的信息。另外,它保證不同信息的摘要信息彼此不同。因此,如果你改變了apk包中的文件,那麼在apk安裝校驗時,改變後的文件摘要信息與MANIFEST.MF的檢驗信息不同,於是程式就不能成功安裝。
1、 Android簽名機制其實是對APK包完整性和發佈機構唯一性的一種校驗機制。
2、 Android簽名機制不能阻止APK包被修改,但修改後的再簽名無法與原先的簽名保持一致。(擁有私鑰的情況除外)。
3、 APK包加密的公鑰就打包在APK包內,且不同的私鑰對應不同的公鑰。換句話言之,不同的私鑰簽名的APK公鑰也必不相同。所以我們可以根據公鑰的對比,來判斷私鑰是否一致。