iOS逆向工程之App脫殼

"砸殼"在iOS逆向工程中是經(jīng)常做的一件事情,,因為從AppStore直接下載安裝的App是加殼的,其實就是經(jīng)過加密的,這個“砸殼”的過程就是一個解密的過程。
本文以微信為例。

一、生成dumpdecrypted.dylib動態(tài)庫

首先我們要生成“砸殼”用的動態(tài)庫dumpdecrypted.dylib,我們“砸殼”時主要用到這個動態(tài)庫。該動態(tài)庫的源碼在github上是開源的,要想得到dumpdecrypted.dylib這個動態(tài)庫,只需要從github上下載代碼,然后進(jìn)行編譯,生成dumpdecrypted.dylib即可。
使用make命令對dumpdecrypted的源碼進(jìn)行編譯。
編譯完成后,dumpdecrypted文件夾中就會多一個dumpdecrypted.dylib動態(tài)庫,該動態(tài)庫就是稍后我們砸殼使用的工具。

二、“砸殼”前的準(zhǔn)備工作

  1. 用iExplorer打開手機(jī)文件,將dumpdecrypted.dylib拖到微信Document中。


    docment.png

    2.獲取到微信Document路徑。
    很多文章都說用cycript獲取,但是我發(fā)現(xiàn)用find也能方便取到。

find /var/mobile/Containers/Data/Application/ -name dumpdecrypted.dylib

將這個路徑存好(砸殼時用)
前提是只有這個應(yīng)用有dumpdecrypted.dylib,否則分辨不出哪個是微信的。。。

  1. 獲取到應(yīng)用名稱
    手機(jī)打開微信,ssh連到手機(jī)中,用以下命令獲取微信應(yīng)用名稱
ps -e | grep /var/mobile

如果找不到ps命令,在手機(jī)Cydia中搜索adv-cmds 安裝。

adv-cmds #finger,fingerd,last,lsvfs,md,ps 
basic-cmds #msg,uudecode,uuencode,write 
bc #計算器工具 
cURL #就是curl了 
Diff Utilities #diff 
diskdev-cmds #mount,quota,fsck等,忘記是否默認(rèn)安裝的 
file #常用的file命令 
file-cmds #chflags,compress 
Find Utilites #find 
Gawk #awk 
grep #grep 
inetutils #ftp,inetd,ping,telnet… 
less #less 

結(jié)果如圖,名稱WeChat(砸殼時用)

WeChat.png

三、開始砸殼

上述“砸殼”的準(zhǔn)備工作就緒后,接下來我們就要開始砸殼了。進(jìn)入到WeChat的Document目錄中,執(zhí)行下方的命令進(jìn)行砸殼。

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/5897759F-D179-4194-AAF1-E0726F7DD147/WeChat.app/WeChat

在上述命令中,DYLD_INSERT_LIBRARIES后邊這個動態(tài)庫就是我們上面生成的動態(tài)庫,后邊這個路徑就是WeChat執(zhí)行文件的絕對路徑,運(yùn)行上述命令后,就開始砸殼了,下方截圖就是我們砸殼的過程。


zake.png

砸殼過程完成后,會在我們的Document目錄下生成一個WeChat.decrypted文件,如下截圖所示。該文件就是脫殼后的文件,我們可以將該文件拷貝到我們的Mac上,以備使用。
拷貝可參考

http://www.itdecent.cn/p/6a5c8c685d2c

四、導(dǎo)出脫殼App的頭文件

將上面生成的WeChat.decrypted脫殼文件拷貝的我們的Mac上,接下來就是我們class-dump出場的時刻了。接下來我們要使用class-dump導(dǎo)出該脫殼文件的所有頭文件。具體步驟如下所示。

  1. 導(dǎo)出頭文件
class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers

就不貼圖了。。。
ps : 后來砸了一個自己的項目,swift和oc混編的,發(fā)現(xiàn)這步不成功:

Error: Cannot find offset for address 0xc8002a76 in stringAtAddress:

度娘說是class-dump解不出swift

五、Hopper

上面使用了class-dump來操作我們脫殼的文件,木有問題。那么接下來來看一下在Hopper上的效果如何,下方就是使用Hopper打開“脫殼”文件的效果,匯編語言的,慢慢研究吧。。。


hopper.png

最后,非常感謝??青玉伏案,這篇文章也拷貝了不少他的文章,鏈接附在了推薦閱讀中。

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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