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