iOS逆向開發(fā)之小試牛刀

寫作背景

最近自己利用業(yè)余時(shí)間研究了一點(diǎn)點(diǎn)逆向的皮毛,在此做個(gè)記錄,坑還是有的,也是個(gè)以后再次學(xué)習(xí)做個(gè)鋪墊吧。

前期準(zhǔn)備工作

需要的硬件:

一部iOS的設(shè)備(有沒有越獄都可以),區(qū)別在于:

·如果是越獄設(shè)備,那么我們可以自己在App Store下載正版軟件自己去砸殼再做逆向。

·如果是非越獄設(shè)備,那么我們只能從一些助手下載越獄過的,也就是砸過殼的App去做逆向。

·本人是非越獄設(shè)備,所以本文重點(diǎn)講第二種方法。

需要的軟件:

MonkeyDev?主要工具

pp助手?管理手機(jī)工具,下載越獄ipa

reveal?查看app的圖層和類名

具體步驟

1、安裝MonkeyDev

具體操作請(qǐng)查看官方幫助文檔,這里只記錄一下我遇到的問題,可能大家也會(huì)遇到。

·當(dāng)執(zhí)行brew install ldid時(shí)提示-bash: brew: command not found 。這是因?yàn)閎rew未安裝,運(yùn)行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"即可

2、創(chuàng)建MonkeyApp項(xiàng)目

安裝好環(huán)境后,重啟Xcode,新建工程,往下拉,選擇MonkeyApp。


然后填寫Product Name,不需要管Target App。創(chuàng)建完成,就會(huì)得到這樣一個(gè)工程。?


3、拖入編譯

將砸殼后的ipa拖入

然后就可以設(shè)置Team,編譯,運(yùn)行了。注意這里只能真機(jī)運(yùn)行。還有需要注意的是MonkeyApp目前只支持普通app,不支持?jǐn)U展(appex),如果您的app有擴(kuò)展,使用MonkeyApp時(shí),會(huì)將所有的擴(kuò)展刪除。

現(xiàn)在可以看到運(yùn)行效果了,與原本的App沒有兩樣?,F(xiàn)在先不要去玩app,看一看其他的東西。

4、class-dump

顧名思義,就是用來dump目標(biāo)對(duì)象的class信息的工具。它利用Objective-c語(yǔ)言的runtime特性,將存儲(chǔ)在Mach-O文件中的頭文件信息提取出來,并生成對(duì)應(yīng)的.h文件。

MonekeyDev很貼心的集成了class-dump功能,可以再build settings最下面開啟該功能。


默認(rèn)值為NO,設(shè)置為YES后開啟,再次build一下工程,就可以在工程目錄下,看到該app的所有頭文件信息了,然后我們就可以從這些頭文件中進(jìn)行探索了。?

5、用Reveal進(jìn)行查看

隨便點(diǎn)一個(gè)view,可以看到它所屬的控制器的名字

6、代碼注入

在工程中找到這個(gè)文件

這時(shí)我們就可以在? 項(xiàng)目名Dylib.xm中 對(duì)某個(gè)view做一些我們想做的事情。

注入格式:

%hook? ? ? ?view的名字


%end

·如果方法有返回值,那么一定要返回,你可以直接返回nil,但不能不返回。

例:你要對(duì)下面函數(shù)的方法進(jìn)行注入

%hook ShelfViewController

- (int)numberOfSectionsInCollectionView:(id)arg1

{//注入代碼。。。。。。

? ? return %orig();// %orig這個(gè)是調(diào)用原代碼的方法,比如源代碼返回1,那么%orig也是等于1

}

%end

·如果沒有返回值,那么直接什么都不寫,這樣原先方法就會(huì)被hook掉,不會(huì)被執(zhí)行原代碼。

例:你要hook掉下面函數(shù)方法

%hook AppDelegate

- (void)applicationWillTerminate:(id)arg1{}

- (void)applicationDidBecomeActive:(id)arg1{}

- (void)applicationWillEnterForeground:(id)arg1{}

- (void)applicationDidEnterBackground:(id)arg1{}

- (void)applicationWillResignActive:(id)arg1{}

%end

·這樣一個(gè)簡(jiǎn)單的hook app就這樣完成了,這是最簡(jiǎn)單的hook程序,還有一些困難的,比如修改源碼,修改判斷if,這些就需要更多的軟件去輔助。

學(xué)逆向不是為了去破解別人的app,對(duì)我來說,最重要的是為了防止別人破解自己的app,我們從逆向的過程中學(xué)習(xí),想象自己的app如果被別人拿去,如何才能不被反編譯,不被hook。

正向和逆向不會(huì)沖突,只要一起學(xué)習(xí),才能更好的加深自己對(duì)于開發(fā)的理解,做出更好的程序。

參考鏈接:

逆向經(jīng)驗(yàn)實(shí)戰(zhàn)

iOS非越獄逆向分析實(shí)戰(zhàn)

Theos安裝及配置

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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