iOS非越獄狀態(tài)下對(duì)ipa包注入代碼(調(diào)用自己framework)

聲明

本文僅僅是自己學(xué)習(xí)逆向的記錄,承諾不作任何危害社會(huì)的事情!

demo場(chǎng)景

創(chuàng)建自己的framework和測(cè)試App,將framework嵌入到目標(biāo)App中,然后測(cè)試App發(fā)送推送,目標(biāo)App收到推送。

使用場(chǎng)景

將代碼注入到任意App內(nèi)

代碼注入原理

眾所周知,iOS app 在打包的過(guò)程中將代碼全部轉(zhuǎn)換成了 可執(zhí)行文件 Mach - O 文件,所以我們直接改源碼是萬(wàn)萬(wàn)不可能的(除非你拿到的源碼,話說(shuō)你源碼都拿到了你還逆向個(gè)啥?)。那么我們可不可以以第三方lib的方式注入呢?必須可以?。?!

那么怎么才能將第三方的lib 注入目標(biāo)程序呢?這個(gè)我們要從二進(jìn)制文件的結(jié)構(gòu)說(shuō)起,Mach-O文件的數(shù)據(jù)主體可分為三大部分,分別是頭部(Header)、加載命令(Load commands)、和最終的數(shù)據(jù)(Data)。mobileloader會(huì)在目標(biāo)程序啟動(dòng)時(shí),會(huì)根據(jù)指定的規(guī)則檢查指定目錄是否存在第三方庫(kù),如果有,則會(huì)通過(guò)修改二進(jìn)制的loadCommands,來(lái)把自己注入進(jìn)所有的app當(dāng)中,然后加載第三方庫(kù)。

代碼注入思路

dyld會(huì)動(dòng)態(tài)加載ipa包內(nèi)Frameworks中所有的動(dòng)態(tài)庫(kù),那么在Frameworks中增加一個(gè)自己的動(dòng)態(tài)庫(kù)(framework),然后在自己動(dòng)態(tài)庫(kù)中寫(xiě)要注入的代碼。

準(zhǔn)備

1、yololib
下載地址:https://github.com/KJCracks/yololib?spm=a2c4e.11153940.blogcont63256.9.5126420eAJpqBD

下載成功后,運(yùn)行工程,把工程里面的yololib拷貝出來(lái)(下圖紅框內(nèi)文件),然后把yololib復(fù)制到/usr/local/bin,后面便可直接在終端用命令行使用


WeChat68da7655dfe4f0295945b7cd55bef82f.png

2、目標(biāo)ipa包

3、注入的代碼(framework)

開(kāi)始

1、解壓ipa包---->顯示包內(nèi)容---->替換包內(nèi)證書(shū)配置文件(embedded.mobileprovision)
2、將要注入的代碼(Hook.framework)拷貝到包內(nèi)的Frameworks文件夾中


WeChatd7462d70cbf25202a106828ea65ec6e1.png

3、使用yololib去添加動(dòng)態(tài)庫(kù)依賴(修改目標(biāo)App文件夾的ipa包中的MachO),將Hook.framework(添加到Frameworks文件夾內(nèi)的)加到ipa包中MachO文件
解壓ipa,找到MachO文件


WeChatd7462d70cbf25202a106828ea65ec6e1.png

cd到App所在文件夾下
使用命令
yololib TestApp Frameworks/Hook.framework/Hook
第一個(gè)參數(shù)指定被修改的mach-o文件的路徑,第二個(gè)參數(shù)指定動(dòng)態(tài)庫(kù)的路徑
主要,這邊的TestApp后面不要帶上.app,比如TestApp.app,只要寫(xiě)TestApp


WeChatd3ed1ba697ca11a731b1e4ea53e16651.png

看到complete! 說(shuō)明添加動(dòng)態(tài)庫(kù)依賴成功

接下來(lái)將Payload壓縮生成一個(gè)Payload.zip,接著將Payload.zip后綴名改成.ipa,生成Payload.ipa,并對(duì)Payload.ipa重簽名

重簽名成功后,將App安裝到手機(jī)上運(yùn)行


WeChatc3e2aa06653fcff50d2057bfd7aefda2.png

推送過(guò)來(lái)了,說(shuō)明代碼注入成功了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容