在大部分超級簽名原理及實現都是基于linux平臺來實現簽名的,代碼都是JAVA,php的需要各種部署,各種調用第三方工具,具體實現起來還是有些麻煩的,以下介紹超級簽名完全基于windows平臺來實現,方便部署,給不懂php和linux提供個思路。
超級簽名原理
簽名原理其實就是,使用了蘋果提供給開發者的Ad-Hoc分發通道,把安裝設備當做開發設備進行分發,要做到自動化首先需要獲取用戶設備的UDID,獲取UDID后需要將UDID添加到蘋果開發者中心進行生成描述文件,根據生成的描述文件、證書文件、待簽名包進行重新簽名生成安裝包ipa。
整體流程

接下來我們就看看整套機制是如何進行的:
設備安裝描述文件后,設備會向服務器(描述文件內回調服務器地址)發送設備的UDID。
服務器收到UDID后,將UDID注冊到某個蘋果開發者賬號下。
再生成簽名用的描述文件,給IPA簽名。
然后iPA傳Server,使用itms-services方式讓用戶下載。
技術細節
UDID的獲取:
蘋果公司允許開發者通過IOS設備和Web服務器之間的某個操作,來獲得IOS設備的UDID(包括其他的一些參數)。這里的一個概述:
在你的Web服務器(可以是任意語言的web服務)上創建一個.mobileconfig的XML格式的描述文件;
用戶下載描述文件后需要再手機設置里操作完成.mobileconfig描述文件的安裝;
服務器需要的數據:UDID,需要在.mobileconfig描述文件中配置好,以及服務器接收數據的URL地址;
當用戶設備安裝描述文件后,設備會回調你設置的URL,如果你的URL返回302跳轉的話,Safari瀏覽器會跳轉到你所給的地址;
開發者設備注冊 更新Provisioning Profile:
注冊設備前提是需要登陸蘋果開發者中心才能有權限注冊設備,現有文章資料是通過(AppleDeveloperCenter自動化工具)調用Api實現注冊更新,這個工具我沒有去研究,應該是個很不錯的工具。下面介紹下直接通過調用蘋果開發者網站接口來實現登陸注冊和更新描述文件,直接調用蘋果接口的速度基本是秒生成,和AppleDeveloperCenter工具理論是一個方式都是調用Api接口所以在速度方面是相同的。
登陸蘋果開發者網站有很多請求頭參數,最主要的就是“X-Apple-I-FD-Client-Info” 參數,X-Apple-I-FD-Client-Info請求頭算法決定著通過蘋果的驗證
這里大致說下算法參數,這個算法通過獲取瀏覽器的類型navigator.browser,瀏覽器版本navigator.Version,瀏覽器語言navigator.browserLanguage,插件Plugin,地域area,時間timestamp,screen.deviceXDPI,screen.deviceYDPI等多個參運算才能生成一個動態驗證串 json 如下
{"U":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/77.0.3865.90 Safari/537.36","L":"zh-CN","Z":"GMT+08:00","V":"1.1","F":"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD__htduVCbqWxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSAAQnIp.QEh2vLG9mhORoVijvw2WwjftckvIhIDLTK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9PL3rO8V.ueururJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lrCU.6elV2pNJFv64WDvUL0TFl9kmFxH_UavEp.icCmx_B4W1kl1BNlY6SGWY5BOgkLT0XxU..3hs"}
1.得到X-Apple-I-FD-Client-Info驗證數據就可以登陸蘋果開發者中心了,拿到授權Cookie可以操作開發者中心任意接口。
2.獲取蘋果團隊TeamId,這在以后的注冊設備,新建描述文件接口當中都會用到,具體的登陸地址以你可以使用Fildder進行抓包查看。
3.調用注冊設備接口 “/services-account/QH65B2/account/device/addDevices.action” 提交設備UDID,teamid,devicePlatforms,deviceNames,deviceNumbers,register 參數進行注冊。
4.創建描述文件 /services-account/QH65B2/account/ios/profile/createProvisioningProfile.action 我們通過這個接口來創建一個新的描述文件
IPA重新簽名
ipa的組成

事實上,ipa文件只是一個zip包,可以使用如下命令解壓:
/usr/bin/unzip -q xxx.ipa -d
解壓后,得到上圖的Payload目錄,下面是個子目錄,其中的內容如下:
資源文件,例如圖片、html、等等。
_CodeSignature/CodeResources。這是一個plist文件,可用文本查看,其中的內容就是是程序包中(不包括Frameworks)所有文件的簽名。注意這里是所有文件。意味著你的程序一旦簽名,就不能更改其中任何的東西,包括資源文件和可執行文件本身。iOS系統會檢查這些簽名。
可執行文件。此文件跟資源文件一樣需要簽名。
一個mobileprovision文件.打包的時候使用的,從MC上生成的。
Frameworks。程序引用的非系統自帶的Frameworks,每個Frameworks其實就是一個app,其中的結構應該和app差不多,也包含簽名信息CodeResources文件
重新簽名條件需要獲取對應文件:
UDID描述文件(上面我們已經拿到了)
蘋果開發者賬號Cer證書(這個可以從開發者賬號下載,前提是你生成了這個證書)將這個證書通過openssl轉換為p12證書(證書和密碼)
有了上面兩個文件后開始簽名,簽名利用到的工具大多數都是mac,linux平臺的 mac平臺成本高,這也就是為什么現在的簽名大多數都是linux平臺,以下大概介紹window平臺下進行重簽名。
IPA重新簽名原理本質是利用蘋果根證書進行校驗開發者證書及利用證書加密,先要獲取到蘋果根證書 X509Certificate,再獲取開發者賬號證書
X509Certificate校驗證書和密碼,加載待簽名IPA包利用證書給每一個文件進行重新簽名。
重新簽名后得IPA包使用itms-services方式下載,就可以安裝到指定的UDID設備手機上了。
作者:一只懵逼的土撥鼠
鏈接:https://www.jianshu.com/p/95f579d0b445
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。