本篇博客以微信為例,給微信脫殼右锨。"砸殼"在iOS逆向工程中是經(jīng)常做的一件事情,碌秸,因為從AppStore直接下載安裝的App是加殼的绍移,其實就是經(jīng)過加密的,這個“砸殼”的過程就是一個解密的過程讥电。未砸殼的App是無法在Class-dump蹂窖、Hopper等工具中使用的。所以我們要將App進行砸殼處理恩敌。在Android開發(fā)中也存在App加殼的處理瞬测,比如什么360加固了,其實就是給App加一層殼纠炮。
本篇博客我們就以WeChat(微信)為例月趟,從AppStore上下載微信并安裝,然后使用dumpdecrypted工具(當然你也可以使用其他砸殼工具)進行砸殼處理恢口。砸殼后會生成解密后的App文件狮斗,然后我們就可以使用Class-dump和Hopper處理解密后的文件了。廢話少說弧蝇,就開始今天的主題碳褒。
一折砸、生成dumpdecrypted.dylib動態(tài)庫
首先我們要生成“砸殼”用的動態(tài)庫dumpdecrypted.dylib,我們“砸殼”時主要用到這個動態(tài)庫沙峻。該動態(tài)庫的源碼在github上是開源的(Github地址)睦授,要想得到dumpdecrypted.dylib這個動態(tài)庫,只需要從github上下載代碼摔寨,然后進行編譯去枷,生成dumpdecrypted.dylib即可。下方就是使用make命令對dumpdecrypted的源碼進行編譯是复。
進入到dumpdecrypted文件夾下删顶,運行make命令即可。
編譯完成后淑廊,dumpdecrypted文件夾中就會多一個dumpdecrypted.dylib動態(tài)庫逗余,該動態(tài)庫就是稍后我們砸殼使用的工具。
二季惩、“砸殼”前的準備工作
接下來就是要在越獄手機上尋找要“砸殼”的app路徑了录粱,首先使用ssh連接到你的越獄設備,然后在越獄設備中打開你要砸殼的App, 此處我們以微信為例画拾。從AippStore中下載安裝的應用都會位于/var/mobile/Applications中啥繁,下方的截圖就是我手機上從AppStore中下載的應用的安裝路徑。當然青抛,下方是使用iExplore工具進行查看的旗闽,下方內(nèi)容中,文件的拷貝我們都會用到iExplorer蜜另,當然你也可以使用之前提到過的iFunBox适室。
從上方的截圖中要找出微信所在的目錄是非常困難的,應用少的話你可以點開一個個的看蚕钦。向上面這種應用比較多的情況的話,一個個文件夾點開是不太現(xiàn)實的鹅很,所以我們得通過另一種方式來定位“微信”App所在的目錄嘶居。
這種快捷定位“微信”所在目錄的方式就是“查看應用進程”的方式,首先你需要打開微信促煮,然后運行下方的命令邮屁,來查看文件目錄/var/mobile/目錄下的所有正在運行的App進行毯焕,具體要用到的命令如下所示:
** ps -e | grep /var/mobile**
上方截圖就是上述命令運行后所輸出的內(nèi)容韩玩,從上述內(nèi)容中我們輕而易舉的就可以找到“WeChat”所在目錄。我們可以通過iExplore打開該目錄鳖擒,更直觀的來看一下微信App所在的目錄绳匀,具體內(nèi)容如下所示. 上面這個進程的絕對路徑我們要記下來芋忿,因為后邊砸殼的時候會使用到該路徑炸客。
接下來我們就要使用Cycript工具來尋找WeChat的Document路徑了,如果你的越獄設備上沒有安裝Cycript工具的話戈钢,那么請前往Cydia下載安裝Cycript工具痹仙。下方步驟就是使用Cycript工具來查看附加進程的Document目錄的步驟。
1.使用Cycript注入目標進程中
cycript -p WeChat
上述命令執(zhí)行完畢后殉了,會進入到cycript模式中开仰,如下所示。當然薪铜,在iOS9.2.1上的越獄設備執(zhí)行上述命令會報錯众弓,可能是目前Cycript這個強大的工具還不支持iOS9.2吧。所以我是在iOS7.2上做的該實驗隔箍。
2.獲取該進程的Document目錄
[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectoryinDomains:NSUserDomainMask][0]
輸入上述內(nèi)容谓娃,然后點擊回車,就會輸出WeChat進程的Document目錄鞍恢,輸出結果如下所示傻粘。下方的紅色部分就是WeChat的Document目錄的絕對路徑。
找到上述目錄后帮掉,使用iExplore進入到該目錄下弦悉,將上面我們生成的dumpdecripted.dylib動態(tài)庫拷貝到該目錄下即可,如下所示:
三蟆炊、開始砸殼
上述“砸殼”的準備工作就緒后稽莉,接下來我們就要開始砸殼了。進入到WeChat的Document目錄中涩搓,執(zhí)行下方的命令進行砸殼污秆。
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/3DC16044-E5BB-4038-9E31-CFE3C7134A7B/WeChat.app/WeChat
砸殼過程完成后,會在我們的Document目錄下生成一個WeChat.decrypted文件浇冰,如下截圖所示贬媒。該文件就是脫殼后的文件,我們可以將該文件拷貝到我們的Mac上肘习,以備使用际乘。
四、導出脫殼App的頭文件
將上面生成的WeChat.decrypted脫殼文件拷貝的我們的Mac上漂佩,接下來就是我們class-dump出廠的時刻了脖含。接下來我們要使用class-dump導出該脫殼文件的所有頭文件罪塔。具體步驟如下所示。
1.前奏
WeChat.decrypted文件后器赞,我執(zhí)行了下方的命令來導出其頭文件垢袱,下方的命令在沒有加殼的app中是好使的,直接就可以導出相應App的頭文件港柜,如下所示:
class-dump -S -s -H WeChat.decrypted -o ./Headers
執(zhí)行上述命令結束后是下方這個結果, 并沒有導出想要的頭文件请契,Google了一下,是ARM的架構不對夏醉,所以就沒導出成功爽锥。
2.開始導出頭文件
從上述截圖中我們可看到,Headers文件夾中并沒有生成相應的頭文件畔柔。是我們解密的文件有問題嗎氯夷?于是乎,我使用了Hopper打開了解密后的文件靶擦,是可以正常打開的腮考,于是乎又Google一下,原來是我們在導出頭文件時指定的ARM架構不正確玄捕,于是乎使用class-dump的--arch配置項來指定了armv7的架構踩蔚,這樣的話,頭文件就導出成功了枚粘。
class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers
操作步驟和結果如下圖所示, 導出成功馅闽,你可以慢慢的分析了。
五馍迄、Hopper
上面使用了class-dump來操作我們脫殼的文件福也,木有問題。那么接下來來看一下在Hopper上的效果如何攀圈,下方就是使用Hopper打開“脫殼”文件的效果暴凑。當然,你也可以使用IDA Pro來查看赘来,當然此處我們使用的是Hopper现喳。從下方的截圖來看,結果是Perfect的撕捍。
至此呢拿穴,我們脫殼的過程就這么愉快的結束了泣洞,你可以去分析你想分析的東西了忧风。