iOS逆向-ipa包重簽名及非越獄手機(jī)安裝多個(gè)微信
前一段時(shí)間學(xué)了點(diǎn)兒逆向相關(guān)的一些東西,但是都是基于越獄手機(jī)上的操作,給視頻類(lèi)應(yīng)用去廣告之類(lèi)的。隨著蘋(píng)果生態(tài)圈的逐漸完善、及蘋(píng)果對(duì)自身系統(tǒng)的保護(hù)越來(lái)越嚴(yán)格,導(dǎo)致現(xiàn)在的iPhone手機(jī)并不像以前那樣存在大量的越獄用戶(hù)。
前段時(shí)間我自己申請(qǐng)了個(gè)微信小號(hào),申請(qǐng)小號(hào)的目的就是原來(lái)微信號(hào)好友中亂七八糟的人實(shí)在太多,感覺(jué)自己的朋友圈都是一些無(wú)關(guān)緊要的垃圾信息,曾經(jīng)關(guān)閉了一段時(shí)間的朋友圈,但是最近遇到了好多技術(shù)上很強(qiáng)的同行,還想了解大佬們的動(dòng)態(tài)。
于是我就想著申請(qǐng)了個(gè)小號(hào),但是麻煩來(lái)了,iPhone手機(jī)并不像安卓手機(jī)那樣存在著微信多開(kāi)之類(lèi)的應(yīng)用,將自己手機(jī)越獄吧成本太高,于是就想著通過(guò)技術(shù)手段安裝多個(gè)微信,下面步入正題:
為什么要重簽名
其實(shí)我們平時(shí)開(kāi)發(fā)的App,程序運(yùn)行主要就是加載一個(gè)Mach-o可執(zhí)行文件。當(dāng)我們將程序打包成ipa文件,上傳到App Store的時(shí)候,期間就是進(jìn)行了一些加殼操作,比如:數(shù)字證書(shū)簽名等。重簽名的目的就是將別人的程序重新簽上我們的證書(shū)信息。也可以簡(jiǎn)單理解為將別人的加密文件解密,加上我們自己的加密算法。
逆向當(dāng)中的一些專(zhuān)業(yè)術(shù)語(yǔ)
- 加殼:利用特殊算法(iOS中數(shù)字證書(shū)),對(duì)可執(zhí)行文件的編碼進(jìn)行改變,以達(dá)到保護(hù)程序代碼的目的
- 脫殼:摘掉殼程序,將未加密的可執(zhí)行文件Mach-o還原出來(lái)
查看應(yīng)用是否加殼
將下載好的ipa包解壓縮之后,拿到里面的Mach-o文件,cd到所在目錄,執(zhí)行如下命令:
- otool -l 可執(zhí)行文件路徑 | grep crypt
其中cryptid代表是否加殼,1代表加殼,0代表已脫殼。我們發(fā)現(xiàn)打印了兩遍,其實(shí)代表著該可執(zhí)行文件支持兩種架構(gòu)armv7和arm64.
查看應(yīng)用支持哪種架構(gòu)
終端下執(zhí)行如下命令查看架構(gòu)信息
- lipo -info 文件路徑
除了查看架構(gòu)信息,還可以利用該指令導(dǎo)出某種特定架構(gòu)、合并多種架構(gòu):
導(dǎo)出特定架構(gòu)
- lipo 文件路徑 -thin 架構(gòu)類(lèi)型 -output 輸出文件路徑
合并多種架構(gòu)
- lipo 文件路徑1 文件路徑2 -output 輸出文件路徑
怎么給應(yīng)用脫殼
給應(yīng)用脫殼有兩種途徑:
- 直接從一些第三方應(yīng)用商店里面下載你想脫殼的應(yīng)用,例如:PP助手、iTools等
- 自己脫殼,利用GitHub上開(kāi)源的一些工具,常用的有Clutch、dumdecrypted。具體如何使用,請(qǐng)自行Google
前期準(zhǔn)備工作:
- 一臺(tái)iPhone,越不越獄都行
- 開(kāi)發(fā)者證書(shū)或者企業(yè)證書(shū)(個(gè)人賬號(hào)也行,但是應(yīng)用安裝上之后,有效期只有7天)
- 電腦安裝 iOS App Signer
其實(shí)重簽名的方式有很多,比如:可以利用sigh resign命令,在終端下操作,還可以借助一些逆向相關(guān)的重簽名工具,本文采用iOS App Signer
了解以上基本概念之后,下面正式開(kāi)始史上最詳細(xì)的重簽名過(guò)程,以微信為例:
第一步:準(zhǔn)備好脫殼后的微信App
我是直接從PP助手上下載的,感興趣的可以自己手動(dòng)脫殼
第二步:將對(duì)用的ipa文件解壓,修改一些東西
注意:個(gè)人證書(shū)不能重簽Extension文件,所以要?jiǎng)h除ipa包中包含的相應(yīng)文件,包括Watch里面的Extension,為了方便一般直接將Watch文件刪除:
第三步:利用iOS App Signer給微信重簽名
- 第一項(xiàng):對(duì)應(yīng)的.ipa或者.app路徑
- 第二項(xiàng):我們自己的簽名證書(shū)
- 第三項(xiàng):證書(shū)對(duì)應(yīng)的Profile文件,默認(rèn)項(xiàng)Re-Sign Only是無(wú)效的,選擇證書(shū)下存在的Profile文件)
- 第四項(xiàng):重簽名之后的Bundle identifier(選擇了Profile文件,一般會(huì)自動(dòng)填寫(xiě))
下面幾項(xiàng)可以隨便寫(xiě)
簽名完畢之后對(duì)應(yīng)的文件夾下會(huì)生成重簽名之后的ipa包
注意:利用iOS App Signer重簽名,在刪除掉相應(yīng)的Extension,選擇路徑的時(shí)候,一定要選擇Payload文件夾下對(duì)應(yīng)的.app文件,否則會(huì)報(bào)找不到Payload文件夾的錯(cuò)誤:
安裝重簽名之后的微信
可以用PP助手安裝,也可以用Xcode安裝,我采用Xocde安裝:
不出意外地話(huà),第二個(gè)微信就成功的安裝到了你的手機(jī)上。如果裝不上的話(huà),基本上大部分原因就是證書(shū)不對(duì)。。。
最終效果
多個(gè)證書(shū)可以多次重新簽名,安裝多個(gè)相同的應(yīng)用
這篇文章圖有點(diǎn)兒多。。。。。
注意:重簽名方式安裝的微信,是對(duì)微信APP的一種破解,會(huì)被官方認(rèn)定為非安全軟件,有被封號(hào)的危險(xiǎn)。但是這種方式對(duì)破解各種其他軟件都是有用的,利用逆向相關(guān)的知識(shí),我們可以利用這種知識(shí)做很多我們想做的事兒!!!(不要做非法的事情哈!)
遇到的坑
錯(cuò)誤一:
解決辦法:證書(shū)不對(duì),仔細(xì)檢查下證書(shū)
錯(cuò)誤二
解決辦法:刪除ipa包里面的watch相關(guān)的文件