我寫本篇文章的目的只是想梳理一下初探逆向流程時的步驟及開發(fā)過程中的一些心得。
1. 首先需要一個砸殼過得ipa包,對app砸殼需要用到一部越獄手機及一些砸殼工具,沒有的話可以直接從"pp助手mac版"下載一些越獄應(yīng)用,這些越獄應(yīng)用的ipa包都是經(jīng)過砸殼后的.
2. 得到砸殼后的ipa包后,需要對其進行重簽名把它運行到真機上進行調(diào)試.?
(1). 打開xcode新建一個工程并保證這個工程是可以直接運行到真機上進行行調(diào)試的。因為對ipa重簽名的步驟都是一樣的所以一些大佬直接把這個步驟封裝到了一個腳本文件里面就是"appSign.sh"文件.
(2).將腳本文件拷貝到工程根目錄下

(3).在工程中新建一個腳本并將路徑指向腳本文件.這樣在運行時就會執(zhí)行腳本文件里的步驟

(4).在工程根目錄下新建一個APP文件夾并將砸殼后的ipa包放進這個文件夾里面.因為需要運行腳本對其進行重簽名并且腳本文件里的路徑指向了這里.

(5).comm+R運行這個時候砸殼后的ipa包就運行到真機上面來了.可以對其進行view debug及l(fā)ldb調(diào)試 例如輸入: ?po "內(nèi)存地址" ?+ 回車 ?就可以找到該地址下的方法或控件的名稱信息(內(nèi)存地址可通過右邊欄復(fù)制)

3. 其實我們平時開發(fā)時的編譯執(zhí)行代碼都寫在了一個叫做"MachO"的文件里.這時候可以用一個叫做"class-dump"的工具將頭文件從這個文件里導(dǎo)出來
(1)首先把"class-dump"拷貝到?/usr?/local?/bin? 目錄下

(2) 打開終端運行 ?sudo chmod 777 /usr/local?/bin/class-dump ? 編譯成功后就將class-dump工具安裝好了
(3)通過工程根目錄下的?Temp->Payload路徑找到應(yīng)用程序并右擊顯示包內(nèi)容.從里面找到MachO文件(結(jié)合ipa包名稱比較容易找到).將這個文件拷貝到工程根目錄下

(4) 打開終端cd到工程根目錄執(zhí)行 class-dump -H "你的MachO文件名稱" -o "你想存放頭文件的文件夾的名稱"/ ? 命令.如果文件過多這段時間會很長. ?執(zhí)行完成后在工程根目錄下就會出現(xiàn)所導(dǎo)出的所有頭文件.可以將這個文件夾拖到sublime工具下查看研究.

4. 此時運行工程的時候是不會執(zhí)行新建工程里的代碼的.因為在利用腳本重簽名的作用就是把砸過殼的ipa包拷貝到新建工程的products下的app包里.這樣就騙過了xcode讓其運行砸殼后的ipa包.如何才能讓砸殼的ipa運行我們的代碼呢?
(1).剛剛說過我們的代碼執(zhí)行都是在ipa包里的一個叫做machO的文件里.這里用到了一個叫做MachOView的工具.我們將在上面的步驟里所獲取的machO文件直接拖到這個工具里進性分析會發(fā)現(xiàn)在load commands目錄下有一個DYLIB的東西會加載一些我們開發(fā)所需要的一些系統(tǒng)的第三方庫,而在右邊顯示的正是這個庫所在的路徑。如果我們在我們的工程里新建一個framework并且在machO文件里添加一個指向這個framework的路徑,那么在編譯時ipa會不會去加載我們新建的庫呢?

(2).在我們的工程里新建一個framework庫并在庫里新建一個類,注入我們自己的代碼

(3).這里用到了一個叫"yololib"的工具進行代碼注入.只需將這個工具拷貝到?/usr?/local?/bin? 目錄下即可使用. 然后在腳本文件里添加一句代碼:?yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/<你的framework庫名稱>.<你的framework庫名稱>/hook"

(4).設(shè)置完成后再去command+r運行. 就會發(fā)現(xiàn)我們添加的庫已經(jīng)被ipa下的machO所依賴并且我們添加到庫中的代碼也可以被執(zhí)行.此時就可以利用viewdbug及l(fā)ldb調(diào)試再結(jié)合我們導(dǎo)出的頭文件通過runtime去改變ipa中的程序讓其執(zhí)行我們的代碼.