標籤:shu src view develop 真機調試 iphone ids strong 電腦安裝
iOS App簽名
在學習iOS簽名之前,需要對密碼學有一定的瞭解,比如RSA加密、HASH雜湊函數
參考:https://www.jianshu.com/p/003288dfb3b7
一、簡單的簽名原理:
弊端:
這樣的做法,需要所有的App上傳App Store,才能在手機上安裝使用,那麼當開發人員要用真機調試時,則必須將開發階段的App上傳App Store,才能調試;另外企業帳號的App並不用上傳到App Store就能安裝使用。這樣的做法明顯不合理,所以蘋果公司在此基礎上再做修改。
簽名原理圖1:
二、進階的簽名原理:
*目的:
- 沒上傳App Store的應用,要經過蘋果的允許才能安裝
- 背景:
- mac電腦:私密金鑰M和公開金鑰M(電腦產生)
- 蘋果伺服器:私密金鑰A
- iPhone手機:公開金鑰A
- 原理:
1.mac電腦將公開金鑰M(產生的CSR檔案)和開發人員資訊傳到蘋果伺服器,這個過程叫做申請認證
2.蘋果伺服器對公開金鑰M進行加密(用私密金鑰A來加密),產生認證檔案(包含公開金鑰M和公開金鑰M的HASH值),發送給mac電腦安裝認證,存在本地鑰匙串
3.蘋果電腦安裝App到手機時,做了一件事情:用私密金鑰M對App的HASH值進行加密(簽名) ,這時的APP內部實際包含了APP的簽名(私密金鑰M加密App的HASH值)、第2步產生的認證檔案(包含公開金鑰M和公開金鑰M的HASH值),App可執行檔以及其他資訊
4.兩次解密過程:
4.1. iPhone手機拿到認證檔案(包含公開金鑰M和公開金鑰M的HASH值),因為手機裡有公開金鑰A,所以能解密認證檔案,得到公開金鑰M和公開金鑰M的HASH值,先驗證公開金鑰M產生的HASH值(MD5,SHA等)是不是和認證檔案裡的公開金鑰M的HASH值一致,確保認證沒有被修改;
4.2. 驗證一致後,就可以用公開金鑰M來解密第2步的APP的簽名,同樣道理可以驗證App是否被修改過。 因為在開發階段App會經常修改,所以App就算是修改過,也能安裝。第4步主要是驗證認證是不是蘋果認證的,只要認證對就可以安裝運行。
這種方式能夠保證安裝的App是經過蘋果允許的,但是還有弊端。
弊端:
只要申請一個認證,就可以安裝在所有的iOS裝置。
簽名原理圖2:
三、終極的簽名原理:
*目的:
- 不能濫用安裝
- 背景:
- mac電腦:私密金鑰M和公開金鑰M(電腦產生)
- 蘋果伺服器:私密金鑰A
- iPhone手機:公開金鑰A
- 原理:
加了兩個限制:
第一個:需要在蘋果伺服器註冊過的裝置才能安裝,認證對應的是有裝置的(UUID)
第二個:簽名只能針對某一個App,並且還需要UUID、AppID、推送,後台運行等權力描述資訊,蘋果公司把這些許可權統一產生一個檔案,稱為許可權檔案,專門用來描述App簽名的許可權,並最產生Provision Profile(描述檔案):包含裝置IDs,AppID,Entitlements(權力檔案包含是否可調試,推送,後台運行等資訊)。
1.在進階的簽名原理中的第2步,認證檔案(包含公開金鑰M和公開金鑰M的HASH值)和Provision Profile(描述檔案)傳給發送給mac電腦;
2.在進階的簽名原理中的第3步,Provision Profile(描述檔案)也會和認證檔案一起打包進去 。
查看Provision Profile資訊:
cd ~/Library/MobileDevice/Provisioning\ Profiles/ls
開啟檔案夾:
open .
在該目錄下用終端查看:
security cms -D -i 0ae1aea3-6094-5dc4dc867596.mobileprovision
其中包含了一些重要訊息:
- TeamName
- AppIDName
- ProvisionedDevices 裝置
- UUID 描述檔案本身的UUID
- Entitlements:
- get-task-allow 是否可以調試
- com.apple.developer.team-identifier
簽名原理圖3
iOS逆向之App簽名