class-dump是一個(gè)Mac端的工具,用它可以查看編譯好的app的頭文件,我們先自己創(chuàng)建一個(gè)工程編譯好測(cè)試用的app,想看別人App里的頭文件?那就需要從AppStore下載別人的App,然后使用砸殼工具,破開(kāi)蘋(píng)果賦予它的保護(hù)機(jī)制,這樣就可以用class-dump一探別人App的????????????端倪了,吸收有用信息。當(dāng)然還有種方式直接去三方助手上下載好已砸殼的App,不用自己砸殼了。關(guān)于class-dump的原理,是用到了Objective-C????語(yǔ)言的Runtime API,例如:
- 獲取類(lèi)名:
const char * class_getName(Class cls) - 獲取變量列表
Ivar * class_copyIvarList(Class cls, unsigned int * outCount) - 獲取屬性列表
objc_property_t * class_copyPropertyList(Class cls, unsigned int * outCount) - 獲取方法列表
Method * class_copyMethodList(Class cls, unsigned int * outCount) - 獲取協(xié)議列表
Protocol ** class_copyProtocolList(Class cls, unsigned int * outCount)
更多原理,自尋探究...
下載class-dump
前往地址http://stevenygard.com/projects/class-dump/下載class-dump-3.5.dmg:

class-dump處理
安裝下載好的class-dump文件,選擇里面的二進(jìn)制可執(zhí)行文件class-dump,拷貝到usr/bin下:


在終端上給其賦予執(zhí)行權(quán)限
chmod 777/usr/bin/class-dump:
創(chuàng)建一個(gè)項(xiàng)目
創(chuàng)建項(xiàng)目:

里面主要包含兩個(gè)類(lèi)一個(gè)是Student類(lèi),還有一個(gè)是它的分類(lèi):

先看Student類(lèi)的頭文件:

Student的擴(kuò)展:

再看分類(lèi)的頭文件:

command+b編譯好項(xiàng)目之后會(huì)生成一個(gè)對(duì)應(yīng)的可執(zhí)行二進(jìn)制文件,查看其位置:
最后把它拷貝到桌面,方便后續(xù)操作。
class-dump提取頭文件
先cd到桌面路徑下,并在桌面上創(chuàng)建一個(gè)result文件用于存儲(chǔ)提取的頭文件,之后執(zhí)行class-dump -S -s -H Class-dump\ Test -o result:

命令中的各個(gè)選項(xiàng)意思,請(qǐng)執(zhí)行
class-dump查看:
查看提取結(jié)果
除了多了一個(gè)CDStructures.h文件外,其它文件都能與項(xiàng)目中的文件對(duì)應(yīng)上:

-
BorrowRule-Protocol文件:
-
CFStudent文件:
-
ExaminationRul-Protocol文件:
-
LendRule-Protocol文件:
總結(jié):
1)這里已經(jīng)把分類(lèi)中方法、屬性都已經(jīng)添加到對(duì)應(yīng)的類(lèi)中去了,假若大家對(duì)分類(lèi)原理比較了解的話,應(yīng)該很好理解。
2)這里協(xié)議也單獨(dú)提取出來(lái)了,分別對(duì)應(yīng)原來(lái)類(lèi)中定義的協(xié)議。
3)屬性自動(dòng)生成的對(duì)應(yīng)變量也獲取到了,不難理解class-dump肯定調(diào)用了Runtime獲取變量列表和屬性列表。
前往三方助手下載目標(biāo)App
這里以Mac上的PP助手為例,先選擇下載越獄版的“虛擬毛筆”App,下載完成后查看其ipa包:

我們首先解壓下載好的ipa包,然后點(diǎn)擊Payload下包,顯示包內(nèi)容:

把對(duì)應(yīng)的App可執(zhí)行二進(jìn)制文件復(fù)制到桌面上:

最后執(zhí)行上面class-dump提取頭文件的操作,得到提取結(jié)果如下:

可以看到這個(gè)App里總共有226個(gè)頭文件,非常之少,大點(diǎn)的App都有好幾千個(gè)頭文件,我們不可能一個(gè)個(gè)頭文件去查看,所以需要借助其它工具定位到特定的頭文件中去,歡迎關(guān)注后續(xù)工具介紹。




