最近對iOS逆向工程進行了些研究,由于iOS系統的封閉性,iOS的逆向研究需要使用到一些工具,包括Mac端與iOS客戶端。本文對逆向App Store的應用的整個過程進行了一個總結,所有步驟參考于《iOS應用逆向工程》。
所有逆向工作的前提你需要有一臺越獄的iOS設備,如何越獄設備可以使用太極越獄官網提供的工具。越獄完成后你可以通過cydia安裝OpenSSH工具,這樣你就可以通過ssh工具登錄你的iOS設備了。有一點需要注意,剛越獄完成的手機有兩個用戶:root與mobile用戶,其默認密碼都是alpine,在越獄完成后首先的工作是修改這兩個用戶的密碼。
登錄iOS設備
通過前面在iOS設備上開通了SSH服務,你應該知道使用Terminal就可以登陸iOS設備了,iOS設備與Mac設備在同一個局域網內,你就可以通過ssh命令登陸root用戶了。通過無線局域網調試設備可能會比較慢,或者在沒有wifi的情況下就無法調試了。這時,你可以借助了usbmuxd工具,通過usb線直接連接iOS設備進行調試。注意,usbmuxd需要使用1.0.8版本,其目錄下python-client有兩個python文件:tcprelay.py與usbmux.py。只需要這兩個文件即可,新版本好像只有C實現的工具,python工具只有在1.0.8版本上才有。其可以將本地端口映射到iOS設備端口。命令格式如下:./tcprelay.py -t 22:2222。該命令將iOS設備的22端映射到本機的2222端口了,ssh命令如下:ssh
root@127.0.0.1 -p 2222。
獲取Apple Store可執行文件
逆向iOS應用的目的是對應用的工程結構、運行機制進行研究,首先你需要獲取被分析應用的可執行文件,再結合一些反編譯工具,像IDA、Hopper再進行深入研究。所有Apple Store上的應用都進行了加密,使用反編譯工具無法直接進行分析,你需要先進行“砸殼”。你可以借助于clutch工具,你可以在網上下載完成后直接拷貝到iOS設備的/usr/bin目錄下,添加可執行的權限。然后在iOS命令行下運行clutch –i,其會將所有從Apple Store安裝的應用列舉出來,如下圖所示:
找到你需要分析的應用的下標,執行clutch –d X命令。如下圖所示,最終生成“砸殼”后的應用。你可以將該應用拷貝到Mac電腦上,解壓之后將可執行文件提取出來,再使用IDA工具進行分析。
反編譯
由于現在iOS設備一般都是arm64芯片,而IDA一直沒有找到免費的64位版本,所有目前可以使用hopper來代替。將之前拷貝出來的可執行文件使用hopper打開,如下圖所示:
調試iOS設備
使用蘋果公司提供的lldb與debugserver工具可以實現對iOS設備安裝的應用進行調試。debugserver在iOS設備的/Developer/usr/bin目錄下,需要對該可執行文件進行一些處理,可以對debugserver進行瘦身,只保留iOS設備對應的版本,然后給debugserver添加task_for_pid權限,從iosre網站上下載ent.xml文件,運行下面命令進行重簽名,ldid –Sent.xml debugserver。再拷貝回iOS設備。
使用debugserver啟動進程,debugserver –x backboard *:1234 /可執行文件路徑,該命令將會啟動可執行文件,等待來自1234端口進行連接調試。上面的命令是在iOS設備上運行的。從Apple Store下載的應用都會放在/private/var/mobile/Containers/Bundle/Application/目錄下,你需要找到被分析應用的目錄所在。此時可以借助ps命令來實現,將其它應用全部關閉,打開你需要分析的應用,運行ps -ef | grep Application命令,如果如下圖所示,你將發現能找到你想要分析應用可執行文件的所有路徑。
運行debugserver命令后,iOS設備將會等待來自Mac端的調試連接,在Mac上運行lldb命令,然后再運行process connect connect://127.0.0.1:1234命令,即可開始進行調試。注意,此處還借助了前面的usbmuxd工具將iOS設備的1234端口映射到了本地。
運行到此處后,可以在lldb工具中,運行ni命令,執行命令,直到加載可執行文件成功。目前執行到此處遇到一個問題,剛開始運行幾個ni命令還能夠加載可執行文件,但現在運行ni命令一直停留加載庫的命令中,跳轉不出來,還需要再研究一下。如果加載庫成功了,即可以結合前面使用hopper分析可執行文件的結果,在感興趣的位置打上斷點進行深入分析。