如何準(zhǔn)備并進行iOS逆向工程

因為我比較懶所以創(chuàng)建了這個IPAForce來幫助你一鍵完成許多功能。傳統(tǒng)的逆向非常復(fù)雜,至少對我一個懶人來說,太麻煩。

IPAForce 界面展示


但是...

傳統(tǒng)工藝依然彌散著自己的香味,所以如果你想見證自己成長的每一個腳印,請你至少進行一次傳統(tǒng)工藝~!

類似于iOS-砸殼+IDA分析這樣的的傳統(tǒng)工藝教學(xué)文章不下幾百篇,你閱讀他們,一定是會有收獲的。

其實光看App內(nèi)部的文字你就能了解它的運作,所以下面的講解會比較深入。(至少對于新手來說)

逆向思路:

????????????????1.搭建環(huán)境

????????????????2.開始獲取資料

????????????????3.開始逆向

????????????????4.分享



1.搭建環(huán)境

搭建macOS環(huán)境

搭建mac環(huán)境就是安裝一些必備的工具。我們經(jīng)常會用到下面的這些工具。對這些工具的熟練掌握是進行逆向的前提。

- HomeBrew? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????macOS 上優(yōu)秀的軟件包管理軟件,類似于Linux中 Ubuntu的apt, CentOS的yum

- wget? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????非常好用的下載命令行

- ldid, ldid2, jtool, jtool2? ? ? ? ? ? ??

????主要功能為App簽名,輔助功能有機會探討

- dpkg? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????deb軟件包控制工具,可以安裝卸載,可以打包解包

- libimobiledevice? ? ? ? ? ? ? ? ? ? ? ??

????牛人逆向iTunes服務(wù)獲取到的AppleUSB接口組件

-?MonkeyDev? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????逆向iOS工程的模版,已經(jīng)集成了各類注入,附加debugger,自動簽名安裝?

- frida, frida-iOS-dump? ? ? ? ? ? ? ??

????方便獲取iOS解密包。后者為AloneMonkey寫的腳本

-?class-dump? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????經(jīng)典的iOS App逆向工具,適合dump頭文件

- Hopper, IDA? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????經(jīng)典的逆向App軟件,用于查看偽代碼獲取頭文件

你可以通過在這里獲取的一鍵安裝腳本IPAForce幫助程序來安裝這些必備的工具。安裝前建議使用代理,避免出現(xiàn)下載失敗重新開始的尷尬。當(dāng)然這個一鍵安裝腳本也可以用來更新這些工具。

使用IPAForce安裝環(huán)境

搭建iOS環(huán)境

搭建iOS環(huán)境其實與macOS環(huán)境的搭建非常類似,但是出于安全原因所有的搭建都是用越獄以后自帶的dpkg完成的。dpkg在安裝的時候會檢查插件的兼容性及其可用性。如果缺少依賴或者與其他插件沖突都會導(dǎo)致安裝失敗。同時,這也保護了你的越獄環(huán)境。比如這個插件支持到iOS8,但是你的越獄手機卻是iOS11,那么強行安裝一些插件會導(dǎo)致進入安全模式(插件注入模塊,對不是進程,終止插件注入進入的Fail Safe模式)。當(dāng)然,如果這個插件包含了不兼容的守護進程(LaunchDaemon)則會導(dǎo)致無法進入越獄環(huán)境或者白蘋果。(完美越獄會在啟動時注入守護進程并且守護進程與插件注入模塊相互獨立)每個插件實際上是dylib庫和需要注入的App列表plist。更多信息稍后討論。

- 依賴包? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????iOS的依賴包非常多,再次不一一贅述。

????有一些依賴是開發(fā)者自己寫的封裝,比如lakr_Great_Method.deb

- rocketbootstrap? ? ? ? ? ? ? ? ? ? ? ?

????進程間通信用的插件。(這個其實我并不是特別清楚)

- MobileSubstrate? ? ? ? ? ? ? ? ? ? ? ?

????插件注入模塊。是的他需要單獨安裝。

????這個模塊相當(dāng)于總開關(guān),他會讀取你放在指定位置的插件加載到App。

- Tweak Inject? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????Electra專用插件注入模塊,向下兼容MobileSubstrate。

- Preferenceloader? ? ? ? ? ? ? ? ? ? ??

????把插件的設(shè)置注入系統(tǒng)的設(shè)置App。

- afc2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????用于在電腦上訪問iOS系統(tǒng)文件。

????因為安裝他會創(chuàng)建了守護進程,所以請一定要選擇正確的版本。

- Filza? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????最好用的iOS越獄文件管理器,沒有之一。

????安裝他可能會失敗,LaunchDaemon權(quán)限不正確導(dǎo)致的.

-?bfdecrypt? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????解密ipa并在本地生成安裝包,可以開啟服務(wù)器在電腦上用nc獲取。

????官方的最新版本支持在設(shè)置選擇解密目標(biāo)。

- Crash Repoter? ? ? ? ? ? ? ? ? ? ? ? ??

????閱讀崩潰日志。

- frida-server? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

????電腦用USB獲取解密包的瑞士軍刀。更多功能請自行了解。

- NewTerm2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

????手機上最好用的終端,沒有之一。

你可以使用IPAForce這款A(yù)pp來完成環(huán)境的搭建,但他是為iOS11專門定制的。如果你運行可能會出現(xiàn)問題,但dpkg會幫你很好的處理這些問題。至少你不會有機會損壞你的設(shè)備,丟失越獄。注意,在越獄之后一定要使用passwd修改root密碼。請注意,如果使用本幫助軟件,你的ssh密碼將被以明文的形式保存在本地App路徑,你可以通過點擊Reset App來清除。

使用IPAForce配置iOS環(huán)境
請注意本提示框

iOS越獄疑難解答

為什么我的插件沒有注入成功?

如果你是iOS11的操作系統(tǒng),那么你的插件可能沒有被鏈接到iOS11專用的TweakInjector目錄中。請嘗試為/Library/MobileSubstrate/DynamicLibraries/創(chuàng)建軟連接指向/Library/TweakInject/,然后注銷。如果你不是iOS11用戶,請檢查依賴。

為什么設(shè)置里看不到我插件的設(shè)置?

請檢查插件注入是否成功,Preferenceloader安裝是否正確。

如何查看我的軟件包狀態(tài)?(安裝成功,配置失敗等)

請用ssh連接到設(shè)備輸入dpkg -l查看。ii為安裝成功,iU為安裝成功配置失敗。dpkg在安裝和卸載軟件包時均可以執(zhí)行腳本(如果有需要)。如果腳本之行失敗,或者dpkg進程被終止,都有可能導(dǎo)致軟件包配置失敗。

如何強制安裝或卸載軟件包?

當(dāng)你確定你的軟件包可以安裝,但dpkg給出錯誤的時候,可以使用如下指令來強制執(zhí)行。dpkg --force-all [軟件包名稱]

為什么我的Filza沒有文件權(quán)限?

LaunchDaemo設(shè)置不正確。越獄并沒有移除文件沙箱,你并不能修改這些文件。LaunchDaemon創(chuàng)建的守護進程權(quán)限附屬于launchd,權(quán)限r(nóng)oot,沒有沙箱,可以進行這些操作。嘗試一下操作來正確配置Filza

chown root:wheel /Library/LaunchDaemons/com.tigisoftware.filza.helper.plist?

chmod 0644 /Library/LaunchDaemons/com.tigisoftware.filza.helper.plist?

launchctl load /Library/LaunchDaemons/com.tigisoftware.filza.helper.plist?


iOS越獄基本流程

了解越獄基本流程有助于保護你的iOS設(shè)備。

運行App --> 執(zhí)行漏洞 --> 獲取root權(quán)限 --> 破解代碼簽名 --> 掛載文件系統(tǒng)(--> 注入代碼到開機前,完美越獄) --> 注銷

其中關(guān)于掛載文件系統(tǒng)需要特殊說明,這有助于理解在早期越獄中硬盤空余較多卻報容量不足的問題。較早版本的iOS的越獄會將系統(tǒng)分區(qū)的文件鏈接到/var分區(qū),這是因為系統(tǒng)分區(qū)通常只夠系統(tǒng)存放文件。而對/大量讀寫并不會被鏈接,導(dǎo)致把系統(tǒng)分區(qū)寫滿了而用戶分區(qū)還剩下許多空間。此時系統(tǒng)會提示空間不足從iOS10開始的越獄為了解決Cydia兼容性移除了這個步驟,導(dǎo)致用戶不能對更目錄有太多的讀寫。coolstar的stash插件則解決了這個問題。其原理就是為特定的文件夾創(chuàng)建軟連接到/var文件夾。

從iOS11開始,根目錄和/var的分區(qū)不再那么明顯,具體情況可以理解為動態(tài)大小。(實際情況只有Apple知道)而根目錄掛載的則是一個快照。iOS11.2-11.3.1的越獄就是通過技術(shù)手段重命名這個快照,讓系統(tǒng)掛載/為只讀,然后通過技術(shù)手段移除只讀flag。

iOS 文件系統(tǒng)掛載列表



2.開始獲取資料

iOS-砸殼+IDA分析所述,(具體請看鏈接的文章)所有從 App Store 下載的App都經(jīng)過了DRM保護。如果你需要逆向這款A(yù)pp你就需要解密這款A(yù)pp。而解密這款A(yù)pp,只有iOS設(shè)備能做到。你會發(fā)現(xiàn)現(xiàn)在PP助手,同步推這類幫助軟件越獄軟件的更新越來越慢,其中很大的原因就是iOS的越獄發(fā)布越來越慢。當(dāng)時間回溯到iOS7,基本上盤古越獄會在第一時間破解iOS。在iOS8時,太極越獄在iOS8.1.2發(fā)布的一個月內(nèi)發(fā)布了越獄。iOS9.0.2則是盤古在第一個星期發(fā)布的。再往后一直到iOS9.3.3,最后一個可以完美越獄的iOS中,(完美越獄插件)越獄的發(fā)布還可以說是0day。在這之后,基本上能越獄的版本,蘋果都已經(jīng)關(guān)閉了該固件的驗證通道。最靠近的一次是iOS11.3.1,漏洞發(fā)布時驗證通道還打開,但是第一個帶有文件系統(tǒng)掛載的公開越獄是我在驗證通道關(guān)閉的第三周發(fā)布的,功能還很不完整。接下來將講述用IPAForce幫助軟件獲取解密安裝包的過程,請確保你已經(jīng)配置好了本軟件需要的環(huán)境。(依次點擊Setup macOS, Setup SSH. Setup iOS)

演示視頻:https://www.youtube.com/watch?v=dTFsSNlORFI

獲取目標(biāo)App信息

在設(shè)置并保存好ssh信息(包括密碼)之后,你就可以用USB連接到手機。通過點擊Refresh App List來刷新已安裝的App列表。這個過程調(diào)用了AloneMonkey寫的frida-iOS-dump腳本來獲取數(shù)據(jù)。如果4秒內(nèi)沒有傳回任何數(shù)據(jù),App會終止這個創(chuàng)建的進程,并要求檢查USB連接。

你在設(shè)備上已經(jīng)打開的App會顯示在最前端,這有利于方便的找到你的App。

刷新App列表演示

獲取解密的App安裝包 *.ipa

復(fù)制你的App顯示的名字,或者BundleID,粘貼到Start Coding --> Decrypt App & Get Headers?

------確保你解鎖了iOS設(shè)備,并退出了你要解密的App ------

這一步對于解決一些疑難雜癥特別重要,比如dylib注入失敗導(dǎo)致的啟動解密失敗,亦或者手機崩潰重啟。

填寫目標(biāo)App名稱并解密

查看解密的App以及頭文件

本幫助軟件在配置macOS的時候安裝了class-dump,在解密App的時候自動獲取了頭文件。這些文件被保存在

~/Documents/IPAForceDump/App名字或BundleID????????????????文件夾內(nèi)

解密完成的示意圖

3.開始逆向

逆向的詳細(xì)過程將會在稍后有機會心情好的時候一點一點記錄。目前來說就是把ipa拖進MonkeyDev模版中開始逆向。

MonkeyDev安裝App到設(shè)備失敗?

請檢查App是否為解密的App。如果不是,請解密,如果是,請使用Xcode9安裝一次,再使用Xcode10調(diào)試。

安裝Reavel動態(tài)調(diào)試框架到iOS設(shè)備?

在配置完整幫助軟件以后,點擊Inject Reveal并輸入BundleID則會自動注入這個框架。 注意,是BundleID。

com.apple.springboard

其他瑣碎以后想到了有心情會寫



4.分享

二話不說你先開源嘛,打飽個deb我也不贅述了。

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

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