日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android digest 认证,探究 Android 签名机制和原理

發(fā)布時(shí)間:2025/3/8 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android digest 认证,探究 Android 签名机制和原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

最近在調(diào)研一個(gè)測試工具的使用,在使用中發(fā)現(xiàn)被測試工具處理過的apk文件經(jīng)安裝后打開就會崩潰,分析崩潰日志后原因是簽名不一致導(dǎo)致的。

說到Android中的簽名,可能大家都知道簽名的目的就是為了保護(hù)apk文件的安全,如果apk被惡意篡改后經(jīng)過安裝校驗(yàn)的時(shí)候,就會出現(xiàn)校驗(yàn)失敗,導(dǎo)致安裝包安裝失敗的情況。但如果更深去問一下Android簽名機(jī)制和原理,是不是就被問住了?接下來的就讓我們?nèi)ヌ骄緼ndroid簽名機(jī)制和原理。

Android 簽名機(jī)制和原理

Android系統(tǒng)在安裝APK的時(shí)候,首先會檢驗(yàn)APK的簽名,如果發(fā)現(xiàn)簽名文件不存在或者校驗(yàn)簽名失敗,則會拒絕安裝,所以應(yīng)用程序在發(fā)布之前一定要進(jìn)行簽名。給APK簽名可以帶來以下好處:

應(yīng)用程序升級如果想無縫升級一個(gè)應(yīng)用,Android系統(tǒng)要求應(yīng)用程序的新版本與老版本具有相同的簽名與包名。若包名相同而簽名不同,系統(tǒng)會拒絕安裝新版應(yīng)用。

應(yīng)用程序模塊化Android系統(tǒng)可以允許同一個(gè)證書簽名的多個(gè)應(yīng)用程序在一個(gè)進(jìn)程里運(yùn)行,系統(tǒng)實(shí)際把他們作為一個(gè)單個(gè)的應(yīng)用程序。此時(shí)就可以把我們的應(yīng)用程序以模塊的方式進(jìn)行部署,而用戶可以獨(dú)立的升級其中的一個(gè)模塊。

代碼或數(shù)據(jù)共享Android提供了基于簽名的權(quán)限機(jī)制,一個(gè)應(yīng)用程序可以為另一個(gè)以相同證書簽名的應(yīng)用程序公開自己的功能與數(shù)據(jù),同時(shí)其它具有不同簽名的應(yīng)用程序不可訪問相應(yīng)的功能與數(shù)據(jù)。

應(yīng)用程序的可認(rèn)定性簽名信息中包含有開發(fā)者信息,在一定程度上可以防止應(yīng)用被偽造。例如網(wǎng)易云加密對Android APK加殼保護(hù)中使用的“校驗(yàn)簽名(防二次打包)”功能就是利用了這一點(diǎn)。

簽名的目的:

1. 對發(fā)送者的身份認(rèn)證:

由于開發(fā)商可能通過使用相同的package name來混淆替換已經(jīng)安裝的程序,以此保證簽名不同的包不被替換。

2. 保證信息傳輸?shù)耐瓿尚?#xff1a;

簽名對于包中的每個(gè)文件進(jìn)行處理,以此確保包中內(nèi)容不被替換。

3. 防止交易中的抵賴發(fā)生,market對軟件的要求。

簽名原理:

簡單來說總體分為以下幾個(gè)步驟:

1. 對Apk中的每個(gè)文件做一次算法(數(shù)據(jù)摘要+Base64編碼),保存到MAINFEST.MF

2. 對MAINFEST.MF整個(gè)文件做一次算法(數(shù)據(jù)摘要+B阿瑟64編碼),存放到CERT.SF文件的頭屬性中,在對MAINFEST.MF文件中各個(gè)屬性塊做一次算法(數(shù)據(jù)摘要+Base64編碼),存放到一個(gè)屬性塊中。

3. 對CERT.SF文件做簽名,內(nèi)容存檔到CERT.RSA中

對一個(gè)APK文件簽名之后,APK文件根目錄下會增加META-INF目錄,該目錄下增加三個(gè)文件,分別是:MANIFEST.MF、CERT.SF和CERT.RSA,以下是具體的流程:

MANIFEST.MF

這是摘要文件,文件中保存了APK里面所有文件的SHA1校驗(yàn)值的BASE64編碼,格式如下(一個(gè)文件對應(yīng)一條記錄)。如果改變了APK包中的文件,在apk安裝校驗(yàn)時(shí),改變后的文件摘要信息與 MANIFEST.MF 的檢驗(yàn)信息不同,程序就不會安裝成功。假如攻擊者修改了程序的內(nèi)容,又重新生成了新的摘要,就可以通過驗(yàn)證。

Name: AndroidMainfest.xmlSHA1-Digest: incCj47jcu56R8pKV8dLACZBKD8=Name: META-INF/android.arch.core_runtime.versionSHA1-Digest: BeF7ZGqBckDCBhhvlPj0xwl01dw=

CERT.SF

這是對摘要的簽名文件,對前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用開發(fā)者的私鑰進(jìn)行簽名。在安裝時(shí)只能使用公鑰才能進(jìn)行解密。解密之后,與未加密的MANIFEST.MF進(jìn)行對比,如果相符,則表明內(nèi)容沒有被異常修改。如果在這一步,開發(fā)者修改了程序內(nèi)容,并生成了新的摘要文件,但是攻擊者沒有開發(fā)者的私鑰,所以不能生成正確的簽名文件。系統(tǒng)在對程序進(jìn)行驗(yàn)證的時(shí)候,用開發(fā)者公鑰對不正確的簽名文件進(jìn)行解密,得到的結(jié)果和摘要文件對應(yīng)不起來,導(dǎo)致不能通過檢驗(yàn),不能成功安裝文件。文件格式如下:

Name:?AndroidMainfest.xmlSHA1-Digest:?SyFsd2VUpCg4nq8jSOB7dBwuMyI=Name:?META-INF/android.arch.core_runtime.versionSHA1-Digest:?OPQCkzMXJVPQryHeMowVNZmfRMw=

CERT.RSA

該文件中保存了公鑰、所采用的加密算法等信息。

從上面的內(nèi)容來看,Android系統(tǒng)就是根據(jù)這三個(gè)文件的內(nèi)容對APK文件進(jìn)行簽名檢驗(yàn)的。

總結(jié)

以上是生活随笔為你收集整理的android digest 认证,探究 Android 签名机制和原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。