在大部分超級(jí)簽名原理及實(shí)現(xiàn)都是基于linux平臺(tái)來(lái)實(shí)現(xiàn)簽名的,代碼都是JAVA,php的需要各種部署,各種調(diào)用第三方工具,具體實(shí)現(xiàn)起來(lái)還是有些麻煩的,以下介紹超級(jí)簽名完全基于windows平臺(tái)來(lái)實(shí)現(xiàn),方便部署,給不懂php和linux提供個(gè)思路。
超級(jí)簽名原理
簽名原理其實(shí)就是,使用了蘋果提供給開發(fā)者的Ad-Hoc分發(fā)通道,把安裝設(shè)備當(dāng)做開發(fā)設(shè)備進(jìn)行分發(fā),要做到自動(dòng)化首先需要獲取用戶設(shè)備的UDID,獲取UDID后需要將UDID添加到蘋果開發(fā)者中心進(jìn)行生成描述文件,根據(jù)生成的描述文件、證書文件、待簽名包進(jìn)行重新簽名生成安裝包ipa。
整體流程
接下來(lái)我們就看看整套機(jī)制是如何進(jìn)行的:
設(shè)備安裝描述文件后,設(shè)備會(huì)向服務(wù)器(描述文件內(nèi)回調(diào)服務(wù)器地址)發(fā)送設(shè)備的UDID。
服務(wù)器收到UDID后,將UDID注冊(cè)到某個(gè)蘋果開發(fā)者賬號(hào)下。
再生成簽名用的描述文件,給IPA簽名。
然后iPA傳Server,使用itms-services方式讓用戶下載。
技術(shù)細(xì)節(jié)
UDID的獲取:
蘋果公司允許開發(fā)者通過(guò)IOS設(shè)備和Web服務(wù)器之間的某個(gè)操作,來(lái)獲得IOS設(shè)備的UDID(包括其他的一些參數(shù))。這里的一個(gè)概述:
在你的Web服務(wù)器(可以是任意語(yǔ)言的web服務(wù))上創(chuàng)建一個(gè).mobileconfig的XML格式的描述文件;
用戶下載描述文件后需要再手機(jī)設(shè)置里操作完成.mobileconfig描述文件的安裝;
服務(wù)器需要的數(shù)據(jù):UDID,需要在.mobileconfig描述文件中配置好,以及服務(wù)器接收數(shù)據(jù)的URL地址;
當(dāng)用戶設(shè)備安裝描述文件后,設(shè)備會(huì)回調(diào)你設(shè)置的URL,如果你的URL返回302跳轉(zhuǎn)的話,Safari瀏覽器會(huì)跳轉(zhuǎn)到你所給的地址;
開發(fā)者設(shè)備注冊(cè) 更新Provisioning Profile:
注冊(cè)設(shè)備前提是需要登陸蘋果開發(fā)者中心才能有權(quán)限注冊(cè)設(shè)備,現(xiàn)有文章資料是通過(guò)(AppleDeveloperCenter自動(dòng)化工具)調(diào)用Api實(shí)現(xiàn)注冊(cè)更新,這個(gè)工具我沒(méi)有去研究,應(yīng)該是個(gè)很不錯(cuò)的工具。下面介紹下直接通過(guò)調(diào)用蘋果開發(fā)者網(wǎng)站接口來(lái)實(shí)現(xiàn)登陸注冊(cè)和更新描述文件,直接調(diào)用蘋果接口的速度基本是秒生成,和AppleDeveloperCenter工具理論是一個(gè)方式都是調(diào)用Api接口所以在速度方面是相同的。
登陸蘋果開發(fā)者網(wǎng)站有很多請(qǐng)求頭參數(shù),最主要的就是“X-Apple-I-FD-Client-Info” 參數(shù),X-Apple-I-FD-Client-Info請(qǐng)求頭算法決定著通過(guò)蘋果的驗(yàn)證
這里大致說(shuō)下算法參數(shù),這個(gè)算法通過(guò)獲取瀏覽器的類型navigator.browser,瀏覽器版本navigator.Version,瀏覽器語(yǔ)言navigator.browserLanguage,插件Plugin,地域area,時(shí)間timestamp,screen.deviceXDPI,screen.deviceYDPI等多個(gè)參運(yùn)算才能生成一個(gè)動(dòng)態(tài)驗(yàn)證串 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驗(yàn)證數(shù)據(jù)就可以登陸蘋果開發(fā)者中心了,拿到授權(quán)Cookie可以操作開發(fā)者中心任意接口。
2.獲取蘋果團(tuán)隊(duì)TeamId,這在以后的注冊(cè)設(shè)備,新建描述文件接口當(dāng)中都會(huì)用到,具體的登陸地址以你可以使用Fildder進(jìn)行抓包查看。
3.調(diào)用注冊(cè)設(shè)備接口 “/services-account/QH65B2/account/device/addDevices.action” 提交設(shè)備UDID,teamid,devicePlatforms,deviceNames,deviceNumbers,register 參數(shù)進(jìn)行注冊(cè)。
4.創(chuàng)建描述文件 /services-account/QH65B2/account/ios/profile/createProvisioningProfile.action 我們通過(guò)這個(gè)接口來(lái)創(chuàng)建一個(gè)新的描述文件
IPA重新簽名
ipa的組成
事實(shí)上,ipa文件只是一個(gè)zip包,可以使用如下命令解壓:
/usr/bin/unzip -q xxx.ipa -d
解壓后,得到上圖的Payload目錄,下面是個(gè)子目錄,其中的內(nèi)容如下:
資源文件,例如圖片、html、等等。
_CodeSignature/CodeResources。這是一個(gè)plist文件,可用文本查看,其中的內(nèi)容就是是程序包中(不包括Frameworks)所有文件的簽名。注意這里是所有文件。意味著你的程序一旦簽名,就不能更改其中任何的東西,包括資源文件和可執(zhí)行文件本身。iOS系統(tǒng)會(huì)檢查這些簽名。
可執(zhí)行文件。此文件跟資源文件一樣需要簽名。
一個(gè)mobileprovision文件.打包的時(shí)候使用的,從MC上生成的。
Frameworks。程序引用的非系統(tǒng)自帶的Frameworks,每個(gè)Frameworks其實(shí)就是一個(gè)app,其中的結(jié)構(gòu)應(yīng)該和app差不多,也包含簽名信息CodeResources文件
重新簽名條件需要獲取對(duì)應(yīng)文件:
UDID描述文件(上面我們已經(jīng)拿到了)
蘋果開發(fā)者賬號(hào)Cer證書(這個(gè)可以從開發(fā)者賬號(hào)下載,前提是你生成了這個(gè)證書)將這個(gè)證書通過(guò)openssl轉(zhuǎn)換為p12證書(證書和密碼)
有了上面兩個(gè)文件后開始簽名,簽名利用到的工具大多數(shù)都是mac,linux平臺(tái)的 mac平臺(tái)成本高,這也就是為什么現(xiàn)在的簽名大多數(shù)都是linux平臺(tái),以下大概介紹window平臺(tái)下進(jìn)行重簽名。
IPA重新簽名原理本質(zhì)是利用蘋果根證書進(jìn)行校驗(yàn)開發(fā)者證書及利用證書加密,先要獲取到蘋果根證書 X509Certificate,再獲取開發(fā)者賬號(hào)證書
X509Certificate校驗(yàn)證書和密碼,加載待簽名IPA包利用證書給每一個(gè)文件進(jìn)行重新簽名。
重新簽名后得IPA包使用itms-services方式下載,就可以安裝到指定的UDID設(shè)備手機(jī)上了。
作者:一只懵逼的土撥鼠
鏈接:https://www.jianshu.com/p/95f579d0b445
來(lái)源:簡(jiǎn)書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。