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

接下來我們就看看整套機制是如何進行的:
設備安裝描述文件后,設備會向服務器(描述文件內(nèi)回調(diào)服務器地址)發(fā)送設備的UDID。
服務器收到UDID后,將UDID注冊到某個蘋果開發(fā)者賬號下。
再生成簽名用的描述文件,給IPA簽名。
然后iPA傳Server,使用itms-services方式讓用戶下載。
技術細節(jié)
UDID的獲取:
蘋果公司允許開發(fā)者通過IOS設備和Web服務器之間的某個操作,來獲得IOS設備的UDID(包括其他的一些參數(shù))。這里的一個概述:
在你的Web服務器(可以是任意語言的web服務)上創(chuàng)建一個.mobileconfig的XML格式的描述文件;
用戶下載描述文件后需要再手機設置里操作完成.mobileconfig描述文件的安裝;
服務器需要的數(shù)據(jù):UDID,需要在.mobileconfig描述文件中配置好,以及服務器接收數(shù)據(jù)的URL地址;
當用戶設備安裝描述文件后,設備會回調(diào)你設置的URL,如果你的URL返回302跳轉(zhuǎn)的話,Safari瀏覽器會跳轉(zhuǎn)到你所給的地址;
開發(fā)者設備注冊 更新Provisioning Profile:
注冊設備前提是需要登陸蘋果開發(fā)者中心才能有權限注冊設備,現(xiàn)有文章資料是通過(AppleDeveloperCenter自動化工具)調(diào)用Api實現(xiàn)注冊更新,這個工具我沒有去研究,應該是個很不錯的工具。下面介紹下直接通過調(diào)用蘋果開發(fā)者網(wǎng)站接口來實現(xiàn)登陸注冊和更新描述文件,直接調(diào)用蘋果接口的速度基本是秒生成,和AppleDeveloperCenter工具理論是一個方式都是調(diào)用Api接口所以在速度方面是相同的。
登陸蘋果開發(fā)者網(wǎng)站有很多請求頭參數(shù),最主要的就是“X-Apple-I-FD-Client-Info” 參數(shù),X-Apple-I-FD-Client-Info請求頭算法決定著通過蘋果的驗證
這里大致說下算法參數(shù),這個算法通過獲取瀏覽器的類型navigator.browser,瀏覽器版本navigator.Version,瀏覽器語言navigator.browserLanguage,插件Plugin,地域area,時間timestamp,screen.deviceXDPI,screen.deviceYDPI等多個參運算才能生成一個動態(tài)驗證串 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驗證數(shù)據(jù)就可以登陸蘋果開發(fā)者中心了,拿到授權Cookie可以操作開發(fā)者中心任意接口。
2.獲取蘋果團隊TeamId,這在以后的注冊設備,新建描述文件接口當中都會用到,具體的登陸地址以你可以使用Fildder進行抓包查看。
3.調(diào)用注冊設備接口 “/services-account/QH65B2/account/device/addDevices.action” 提交設備UDID,teamid,devicePlatforms,deviceNames,deviceNumbers,register 參數(shù)進行注冊。
4.創(chuàng)建描述文件 /services-account/QH65B2/account/ios/profile/createProvisioningProfile.action 我們通過這個接口來創(chuàng)建一個新的描述文件
IPA重新簽名
ipa的組成

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