我們知道AppStore的APP都是經過Store加密的,我們想要對其進行一些逆向破解,必須先砸掉這層殼,主要介紹一下怎樣用dumpdecrypted砸殼。
- 下載并編譯
從這里下載壓縮包,然后解壓,會得到 dumpdecrypted-master 文件夾,用終端命令行進入該文件夾執(zhí)行make命令進行編譯:
然后會得到我們需要的 dumpdecrypted.dylib 庫文件。編譯
這里有些坑,但是我沒踩到,如果遇到編譯過程中有問題的童鞋,可以看看這個他踩的坑。 - 準備
接下來我們要找到要砸的App,然后把動態(tài)庫加進去,為我們最后砸殼做好充分準備。這里我以微信示例。
首先我們要知道兩個路徑:
一個是微信App可執(zhí)行文件的存放路徑,否則我們砸什么呢。
一個是微信App的沙盒路徑,我們需要把動態(tài)庫放置到沙盒路徑下才能保證動態(tài)庫能正常運行。
-
尋找可執(zhí)行文件路徑
首先把你的微信先跑起來,切到前臺
然后用ssh登陸到你的手機上
ssh root@yourPhoneIP
執(zhí)行ps命令,查看當前跑著的進程(如果你的iphone執(zhí)行不了ps命令,去cydia安裝adv-cmds軟件包就好了)
ps -e
然后在眾多進程中找到我們要找的微信,顯示的就是他的可執(zhí)行文件路徑,記下來
微信 用Cycript尋找沙盒
Cycript不多介紹,第一次用的話可以從這里看一下基本用法。
執(zhí)行命令行
cycript -p WeChat
cy#[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/CAD8A685-F1F3-42D8-AB7E-FF18767D7A30/Documents/"
就找到了微信的沙盒目錄。記錄下來。把動態(tài)庫放到沙盒Document目錄下
現在dumpdecrypted.dylib還在我們的電腦上,我們需要把他移到微信沙盒Document下。
新打開一個終端并且cd到dumpdecrypted.dylib所在的目錄下,執(zhí)行命令行:
scp dumpdecrypted.dylib root@yourPhoneIP:/var/mobile/Containers/Data/Application/CAD8A685-F1F3-42D8-AB7E-FF18767D7A30/Documents/dumpdecrypted.dylib
后面的路徑就是你之前查到的沙盒路徑,別無腦把我這里的復制上去了。
當然你也可以用PP助手這些工具軟件直接把dumpdecrypted.dylib拖到微信的沙盒里。
-
砸砸砸
回到之前ssh在你iphone上的終端,先"ctrl + D"退出cycript, cd到微信的沙盒Document下:
cd /var/mobile/Containers/Data/Application/CAD8A685-F1F3-42D8-AB7E-FF18767D7A30/Documents/
執(zhí)行砸殼,目標路徑就是之前查到的微信可執(zhí)行文件路徑:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/5F7F9D80-7EF9-4DEE-82B1-51D028E2752B/WeChat.app/WeChat
當看到 WeChat.decrypted ,大功告成!
砸殼
之后隨便用PP助手之類的工具,直接從微信沙盒把WeChat.decrypted拿出來,就可以用于之后的class-dump之類的了。
class-dump -H 需要導出的框架路徑 -o 導出的頭文件存放路徑
Tip:關于 dumpdecrypted.dylib 要放在沙盒Document目錄下。 如果不放在沙盒下執(zhí)行,會直接報錯如下:
dyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found. Did find:
dumpdecrypted.dylib: stat() failed with errno=1
Trace/BPT trap: 5
來自http://bbs.iosre.com/的一段話:我們都知道,StoreApp對沙盒以外的絕大多數目錄沒有寫權限。dumpdecrypted.dylib要寫一個decrypted文件,但它是運行在StoreApp中的,與StoreApp的權限相同,那么它的寫操作就必須發(fā)生在StoreApp擁有寫權限的路徑下才能成功。StoreApp一定是能寫入其Documents目錄的,因此我們在Documents目錄下使用dumpdecrypted.dylib時,保證它能在當前目錄下寫一個decrypted文件,這就是把dumpdecrypted.dylib拷貝到Documents目錄下操作的原因。


