"砸殼"在iOS逆向工程中是經(jīng)常做的一件事情,,因?yàn)閺腁ppStore直接下載安裝的App是加殼的,其實(shí)就是經(jīng)過(guò)加密的,這個(gè)“砸殼”的過(guò)程就是一個(gè)解密的過(guò)程。
本文以微信為例。
一、生成dumpdecrypted.dylib動(dòng)態(tài)庫(kù)
首先我們要生成“砸殼”用的動(dòng)態(tài)庫(kù)dumpdecrypted.dylib,我們“砸殼”時(shí)主要用到這個(gè)動(dòng)態(tài)庫(kù)。該動(dòng)態(tài)庫(kù)的源碼在github上是開(kāi)源的,要想得到dumpdecrypted.dylib這個(gè)動(dòng)態(tài)庫(kù),只需要從github上下載代碼,然后進(jìn)行編譯,生成dumpdecrypted.dylib即可。
使用make命令對(duì)dumpdecrypted的源碼進(jìn)行編譯。
編譯完成后,dumpdecrypted文件夾中就會(huì)多一個(gè)dumpdecrypted.dylib動(dòng)態(tài)庫(kù),該動(dòng)態(tài)庫(kù)就是稍后我們?cè)覛な褂玫墓ぞ摺?/p>
二、“砸殼”前的準(zhǔn)備工作
-
用iExplorer打開(kāi)手機(jī)文件,將dumpdecrypted.dylib拖到微信Document中。
docment.png
2.獲取到微信Document路徑。
很多文章都說(shuō)用cycript獲取,但是我發(fā)現(xiàn)用find也能方便取到。
find /var/mobile/Containers/Data/Application/ -name dumpdecrypted.dylib
將這個(gè)路徑存好(砸殼時(shí)用)
前提是只有這個(gè)應(yīng)用有dumpdecrypted.dylib,否則分辨不出哪個(gè)是微信的。。。
- 獲取到應(yīng)用名稱
手機(jī)打開(kāi)微信,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 #計(jì)算器工具
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(砸殼時(shí)用)
三、開(kāi)始砸殼
上述“砸殼”的準(zhǔn)備工作就緒后,接下來(lái)我們就要開(kāi)始砸殼了。進(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后邊這個(gè)動(dòng)態(tài)庫(kù)就是我們上面生成的動(dòng)態(tài)庫(kù),后邊這個(gè)路徑就是WeChat執(zhí)行文件的絕對(duì)路徑,運(yùn)行上述命令后,就開(kāi)始砸殼了,下方截圖就是我們?cè)覛さ倪^(guò)程。
砸殼過(guò)程完成后,會(huì)在我們的Document目錄下生成一個(gè)WeChat.decrypted文件,如下截圖所示。該文件就是脫殼后的文件,我們可以將該文件拷貝到我們的Mac上,以備使用。
拷貝可參考
四、導(dǎo)出脫殼App的頭文件
將上面生成的WeChat.decrypted脫殼文件拷貝的我們的Mac上,接下來(lái)就是我們class-dump出場(chǎng)的時(shí)刻了。接下來(lái)我們要使用class-dump導(dǎo)出該脫殼文件的所有頭文件。具體步驟如下所示。
- 導(dǎo)出頭文件
class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers
就不貼圖了。。。
ps : 后來(lái)砸了一個(gè)自己的項(xiàng)目,swift和oc混編的,發(fā)現(xiàn)這步不成功:
Error: Cannot find offset for address 0xc8002a76 in stringAtAddress:
度娘說(shuō)是class-dump解不出swift
五、Hopper
上面使用了class-dump來(lái)操作我們脫殼的文件,木有問(wèn)題。那么接下來(lái)來(lái)看一下在Hopper上的效果如何,下方就是使用Hopper打開(kāi)“脫殼”文件的效果,匯編語(yǔ)言的,慢慢研究吧。。。
最后,非常感謝??青玉伏案,這篇文章也拷貝了不少他的文章,鏈接附在了推薦閱讀中。