iOS逆向之App簽名

來源:互聯網
上載者:User

標籤:shu   src   view   develop   真機調試   iphone   ids   strong   電腦安裝   

iOS App簽名

在學習iOS簽名之前,需要對密碼學有一定的瞭解,比如RSA加密、HASH雜湊函數
參考:https://www.jianshu.com/p/003288dfb3b7

一、簡單的簽名原理:
  • 目的:
  • 保證每個App都是經過蘋果公司官方認證的

  • 背景:因為手機和系統都是蘋果公司生產的,所以蘋果公司可以在手機上內建公開金鑰,然後在App Store上放置私密金鑰
  • 蘋果手機:公開金鑰
  • App Store:私密金鑰
  • 原理:
    1.App上傳到App Store時,蘋果公司拿到App的HASH(MD5,SHA等)值,然後用私密金鑰進行加密(簽名),這時候只有手機上的公開金鑰才可以解密;
    2.手機下載應用安裝App時,先用公開金鑰解密(驗證簽名),拿到HASH值,然後將此HASH值,與要安裝的App的HASH值進行校正,如果App有被修改過,則校正失敗。這樣就可以有效保證每個App都是經過蘋果公司官方認證的。

弊端:
這樣的做法,需要所有的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簽名

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.