otool工具簡介
otool(object file displaying tool) :目標(biāo)文件的展示工具【剑可以用來發(fā)現(xiàn)應(yīng)用中使用到了哪些系統(tǒng)庫乌妒,調(diào)用了其中哪些方法,使用了庫中哪些對象及屬性追葡,它是Xcode自帶的常用工具腺律。
在mac終端輸入otool,就可以看到常用的命令以及參數(shù)
- 例子: 查看支付寶依賴庫
//查找支付寶可執(zhí)行文件的位置
iPhone:/tmp root# ps -e | grep AlipayWallet
2162 ?? 0:22.33 /var/mobile/Containers/Bundle/Application/50C881E4-8116-40C8-9922-3963DBD155EE/AlipayWallet.app/AlipayWallet
2581 ttys000 0:00.01 grep AlipayWallet
//將可執(zhí)行文件拷貝到mac桌面上的test文件夾下
iPhone:/tmp root# scp /var/mobile/Containers/Bundle/Application/50C881E4-8116-40C8-9922-3963DBD155EE/AlipayWallet.app/AlipayWallet zl@192.168.0.102:/Users/zl/Desktop/test
//回到mac終端查看用到的依賴庫
otool -L AlipayWallet
class_dump
簡介
可以將Mach-O文件中的Objective-C運(yùn)行時的聲明的信息導(dǎo)出,即編寫OC代碼時的 .h文件宜肉。classdump是對”otool -ov” 信息的翻譯匀钧,以一種我們熟悉的易讀的方式呈現(xiàn)。
下載地址 http://stevenygard.com/projects/class-dump/安裝方式
下載class-dump后谬返,將class-dump復(fù)制到/usr/local/bin目錄下之斯,
(需要把文件拷貝到/usr/bin目錄下,但是mac這個文件夾權(quán)限不開放,不管用什么命令都無法將文件拷到這個目錄下遣铝,可以/usr/local/bin用這個路徑代替/usr/bin路徑 因?yàn)闀葟?usr/local/bin目錄加載 然后再加載/usr/bin目錄)
sudo cp /Volumes/class-dump-3.5/class-dump /usr/local/bin
在終端中輸入class-dump佑刷,顯示class-dump的版本后,就可以正常使用class-dump的命令了,如果沒顯示,賦予一下權(quán)限
sudo chmod 777 /usr/bin/class-dump
class_dump使用(class-dump只能導(dǎo)出未經(jīng)加密的App的頭文件)
得到class-dump的可執(zhí)行文件以后,就可以導(dǎo)出應(yīng)用的類的頭文件了
命令如下:
class-dump -H 砸殼后文件 -o headers存放目錄
例子:看下SpringBoard的頭文件
iPhone:/tmp root# ps -e | grep SpringBoard
1739 ?? 10:14.78 /System/Library/CoreServices/SpringBoard.app/SpringBoard
2586 ttys000 0:00.01 grep SpringBoard
iPhone:/tmp root# scp /System/Library/CoreServices/SpringBoard.app/SpringBoard zl@192.168.0.102:/Users/zl/Desktop/test
//mac終端 將頭文件保存在test文件夾下面
class-dump -s -S -H SpringBoard -o ./test
以下是 class-dump參數(shù)含義,終端里輸入class-dump就可以看到
-a 顯示實(shí)例變量偏移
-A 顯示實(shí)現(xiàn)地址
–arch選擇一個指定的架構(gòu)酿炸,如ppc, ppc7400, ppc64, i386, x86_64
-C只顯示同正則表達(dá)式匹配的類
-f在方法名中查找字符串
-H 在當(dāng)前目錄生成頭文件项乒,或者在用-o選項(xiàng)指定的目錄生成
-I 對類,目錄梁沧,協(xié)議 按照繼承關(guān)系(inheritance)進(jìn)行排序(覆蓋-s選項(xiàng))
-o為-H選項(xiàng)指定輸出目錄
-r 遞歸擴(kuò)展framework檀何,并修復(fù)VM共享庫
-s 按名稱對classes和categories進(jìn)行排序
-S 按名稱對方法(method)進(jìn)行排序
dumpdecrypted砸殼
- 安裝
mkdir Code
cd Code/
git clone https://github.com/stefanesser/dumpdecrypted.git
cd dumpdecrypted/
make
上面的make命令執(zhí)行完畢后,會在當(dāng)前目錄下生成一個dumpdecrypted.dylib文件,這就是砸殼所要用到的频鉴。該文件生成一次可重復(fù)使用栓辜。
- 砸殼過程
//定位要砸殼的App的Document目錄
iPhone:/ root# cycript -p WeChat
cy# [[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents/"
//退出cycript 去到Documents目錄
cy#
iPhone:/ root# cd /var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents/
//將dumpdecrypted.dylib拷貝到當(dāng)前目錄
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# scp zl@192.168.0.102:/Users/zl/Desktop/dumpdecrypted/dumpdecrypted.dylib .
//獲取可執(zhí)行文件路徑
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# ps -e | grep WeChat
//開始砸殼
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/008FD01E-9421-40B7-A511-FCC23D175C3A/WeChat.app/WeChat
//結(jié)束后在documents里面看到WeChat.decrypted,將該文件拷貝到桌面
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# scp WeChat.decrypted zl@192.168.0.102:/Users/zl/Desktop/test
// 來到mac終端用class-dump獲取.h文件
cd /Users/zl/Desktop/test
class-dump -s -S -H WeChat.decrypted -o ./decrypetfile
補(bǔ)充
StoreApp對沙盒以外的絕大多數(shù)目錄沒有寫權(quán)限垛孔。dumpdecrypted.dylib要寫一個decrypted文件藕甩,但它是運(yùn)行在StoreApp中的,與StoreApp的權(quán)限相同周荐,那么它的寫操作就必須發(fā)生在StoreApp擁有寫權(quán)限的路徑下才能成功狭莱。StoreApp一定是能寫入其Documents目錄的,因此我們在Documents目錄下使用dumpdecrypted.dylib時概作,保證它能在當(dāng)前目錄下寫一個decrypted文件腋妙,這就是把dumpdecrypted.dylib拷貝到Documents目錄下操作的原因。