iOS逆向之App簽名原理

iOS App簽名原理

在學(xué)習(xí)iOS簽名之前,需要對(duì)密碼學(xué)有一定的了解,比如RSA加密、HASH哈希函數(shù)
參考:http://m.itdecent.cn/p/003288dfb3b7

一、簡(jiǎn)單的簽名原理:

  • 目的:

    • 保證每個(gè)App都是經(jīng)過(guò)蘋(píng)果公司官方認(rèn)證的
  • 背景:因?yàn)槭謾C(jī)和系統(tǒng)都是蘋(píng)果公司生產(chǎn)的,所以蘋(píng)果公司可以在手機(jī)上內(nèi)置公鑰,然后在App Store上放置私鑰

    • 蘋(píng)果手機(jī):公鑰
    • App Store:私鑰
  • 原理:
    1.App上傳到App Store時(shí),蘋(píng)果公司拿到App的HASH(MD5,SHA等)值,然后用私鑰進(jìn)行加密(簽名),這時(shí)候只有手機(jī)上的公鑰才可以解密;
    2.手機(jī)下載應(yīng)用安裝App時(shí),先用公鑰解密(驗(yàn)證簽名),拿到HASH值,然后將此HASH值,與要安裝的App的HASH值進(jìn)行校驗(yàn),如果App有被修改過(guò),則校驗(yàn)失敗。這樣就可以有效的保證每個(gè)App都是經(jīng)過(guò)蘋(píng)果公司官方認(rèn)證的。

弊端:
這樣的做法,需要所有的App上傳App Store,才能在手機(jī)上安裝使用,那么當(dāng)開(kāi)發(fā)者要用真機(jī)調(diào)試時(shí),則必須將開(kāi)發(fā)階段的App上傳App Store,才能調(diào)試;另外企業(yè)賬號(hào)的App并不用上傳到App Store就能安裝使用。這樣的做法明顯不合理,所以蘋(píng)果公司在此基礎(chǔ)上再做修改。

簽名原理圖1:

image.png

二、進(jìn)階的簽名原理:

*目的:

  • 沒(méi)上傳App Store的應(yīng)用,要經(jīng)過(guò)蘋(píng)果的允許才能安裝
  • 背景:
    • mac電腦:私鑰M和公鑰M(電腦生成)
    • 蘋(píng)果服務(wù)器:私鑰A
    • iPhone手機(jī):公鑰A
  • 原理:
    1.mac電腦將公鑰M(生成的CSR文件)和開(kāi)發(fā)者信息傳到蘋(píng)果服務(wù)器,這個(gè)過(guò)程叫做申請(qǐng)證書(shū)
    2.蘋(píng)果服務(wù)器對(duì)公鑰M進(jìn)行加密(用私鑰A來(lái)加密),生成證書(shū)文件(包含公鑰M和公鑰M的HASH值),發(fā)送給mac電腦安裝證書(shū),存在本地鑰匙串
    3.蘋(píng)果電腦安裝App到手機(jī)時(shí),做了一件事情:用私鑰M對(duì)App的HASH值進(jìn)行加密(簽名) ,這時(shí)的APP內(nèi)部實(shí)際包含了APP的簽名(私鑰M加密App的HASH值)、第2步生成的證書(shū)文件(包含公鑰M和公鑰M的HASH值),App可執(zhí)行文件以及其他信息
    4.兩次解密過(guò)程:
    4.1. iPhone手機(jī)拿到證書(shū)文件(包含公鑰M和公鑰M的HASH值),因?yàn)槭謾C(jī)里有公鑰A,所以能解密證書(shū)文件,得到公鑰M和公鑰M的HASH值,先驗(yàn)證公鑰M生成的HASH值(MD5,SHA等)是不是和證書(shū)文件里的公鑰M的HASH值一致,確保證書(shū)沒(méi)有被修改;
    4.2. 驗(yàn)證一致后,就可以用公鑰M來(lái)解密第2步的APP的簽名,同樣道理可以驗(yàn)證App是否被修改過(guò)。 因?yàn)樵陂_(kāi)發(fā)階段App會(huì)經(jīng)常修改,所以App就算是修改過(guò),也能安裝。第4步主要是驗(yàn)證證書(shū)是不是蘋(píng)果認(rèn)證的,只要證書(shū)對(duì)就可以安裝運(yùn)行。

這種方式能夠保證安裝的App是經(jīng)過(guò)蘋(píng)果允許的,但是還有弊端。
弊端:
只要申請(qǐng)一個(gè)證書(shū),就可以安裝在所有的iOS設(shè)備。

簽名原理圖2:

IMG_2817.JPG

三、終極的簽名原理:

*目的:

  • 不能濫用安裝
  • 背景:
    • mac電腦:私鑰M和公鑰M(電腦生成)
    • 蘋(píng)果服務(wù)器:私鑰A
    • iPhone手機(jī):公鑰A
  • 原理:
    加了兩個(gè)限制:
    第一個(gè):需要在蘋(píng)果服務(wù)器注冊(cè)過(guò)的設(shè)備才能安裝,證書(shū)對(duì)應(yīng)的是有設(shè)備的(UUID)
    第二個(gè):簽名只能針對(duì)某一個(gè)App,并且還需要UUID、AppID、推送,后臺(tái)運(yùn)行等權(quán)力描述信息,蘋(píng)果公司把這些權(quán)限統(tǒng)一生成一個(gè)文件,稱為權(quán)限文件,專門(mén)用來(lái)描述App簽名的權(quán)限,并最生成Provision Profile(描述文件):包含設(shè)備IDs,AppID,Entitlements(權(quán)力文件包含是否可調(diào)試,推送,后臺(tái)運(yùn)行等信息)。

1.在進(jìn)階的簽名原理中的第2步,證書(shū)文件(包含公鑰M和公鑰M的HASH值)和Provision Profile(描述文件)傳給發(fā)送給mac電腦;
2.在進(jìn)階的簽名原理中的第3步,Provision Profile(描述文件)也會(huì)和證書(shū)文件一起打包進(jìn)去 。

查看Provision Profile信息:

cd ~/Library/MobileDevice/Provisioning\ Profiles/
ls
image.png

打開(kāi)文件夾:

open .
image.png

在該目錄下用終端查看:

security cms -D -i 0ae1aea3-6094-5dc4dc867596.mobileprovision
image.png

image.png

其中包含了一些重要信息:

  • TeamName
  • AppIDName
  • ProvisionedDevices 設(shè)備
  • UUID 描述文件本身的UUID
  • Entitlements:
    • get-task-allow 是否可以調(diào)試
    • com.apple.developer.team-identifier

簽名原理圖3

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容