iOS逆向之App簽名原理

iOS App簽名原理

在學習iOS簽名以前,須要對密碼學有必定的瞭解,好比RSA加密、HASH哈希函數
參考:https://www.jianshu.com/p/003288dfb3b7ios

1、簡單的簽名原理:

  • 目的:服務器

    • 保證每一個App都是通過蘋果公司官方認證的
  • 背景:由於手機和系統都是蘋果公司生產的,因此蘋果公司能夠在手機上內置公鑰,而後在App Store上放置私鑰app

    • 蘋果手機:公鑰
    • App Store:私鑰
  • 原理:
    1.App上傳到App Store時,蘋果公司拿到App的HASH(MD5,SHA等)值,而後用私鑰進行加密(簽名),這時候只有手機上的公鑰才能夠解密;
    2.手機下載應用安裝App時,先用公鑰解密(驗證簽名),拿到HASH值,而後將此HASH值,與要安裝的App的HASH值進行校驗,若是App有被修改過,則校驗失敗。這樣就能夠有效的保證每一個App都是通過蘋果公司官方認證的。ide

弊端:
這樣的作法,須要全部的App上傳App Store,才能在手機上安裝使用,那麼當開發者要用真機調試時,則必須將開發階段的App上傳App Store,才能調試;另外企業帳號的App並不用上傳到App Store就能安裝使用。這樣的作法明顯不合理,因此蘋果公司在此基礎上再作修改。函數

簽名原理圖1:

image.png

2、進階的簽名原理:

*目的:學習

  • 沒上傳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:

IMG_2817.JPG

3、終極的簽名原理:

*目的:3d

  • 不能濫用安裝
  • 背景:
    • 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信息:code

cd ~/Library/MobileDevice/Provisioning\ Profiles/
ls

image.png
打開文件夾:

open .

image.png

在該目錄下用終端查看:

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

image.png
image.png

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

  • TeamName
  • AppIDName
  • ProvisionedDevices 設備
  • UUID 描述文件自己的UUID
  • Entitlements:
    • get-task-allow 是否能夠調試
    • com.apple.developer.team-identifier

簽名原理圖3

image.png

相關文章
相關標籤/搜索