class-dump的安裝
系統(tǒng):macOS High Sierra 版本 10.13.1
首先下載class-dump。下載地址
下載完成后得到一個(gè).dmg包文件并雙擊打開(根據(jù)下載文件的不同得到的包也不同)。

class-dump.png
打開此文件后,按照《iOS應(yīng)用逆向工程》這本書上的要求,需要將此class-dump文件移到
/usr/bin文件夾下。但是由于新的macOS系統(tǒng)不允許訪問(wèn)該文件夾,因此,采用下面的方法:
- 首先在根目錄下新建文件夾專門用于存放自己下載的工具:
mkdir ~/bin
- 然后將class-dump移動(dòng)到該文件夾下并賦予它可執(zhí)行權(quán)限:
mv class-dump ~/binchmod 777 ~/bin/class-dump
- 配置全局環(huán)境變量,使用編輯器打開profile文件:
vim ~/.bash_profile
- 在文件最上方添加如下一行:
export PATH=$HOME/bin/:$PATH
- 在終端執(zhí)行
source ~/.bash_profile
至此,安裝class_dump已經(jīng)全部完成。
可以在終端直接輸入class-dump命令測(cè)試一下:

測(cè)試
class-dump的使用
使用class-dump可以得到目標(biāo)對(duì)象的class信息。它是利用OC的Runtime特性,將存儲(chǔ)在Mach-O文件中的頭文件信息提取出來(lái),并生成對(duì)應(yīng)的.h文件。通過(guò)生成的.h文件,我們可以分析該App實(shí)現(xiàn)的大致思路以及關(guān)鍵的類對(duì)應(yīng)的功能,從而進(jìn)一步進(jìn)行逆向工作。
下面就以一個(gè)IPA包為例,演示如何使用class-dump工具分析出對(duì)應(yīng)的頭文件。假定得到的包已經(jīng)脫殼。
對(duì)于一個(gè)IPA包,首先需要使用解壓工具或者歸檔工具將它變成.app文件。要注意的是,對(duì)于.app文件,可以通過(guò)右鍵-顯示包內(nèi)容查看它,也可以通過(guò)終端直接cd進(jìn)去,在class-dump時(shí),就是要通過(guò)終端cd進(jìn)入.app包內(nèi)。
- 將IPA包放到任意文件夾下。本例中以一個(gè)2048應(yīng)用包為例。
- 進(jìn)入IPA對(duì)應(yīng)的.app包內(nèi),使用plutil工具查看該IPA包對(duì)應(yīng)的可執(zhí)行文件名稱:
plutil -p Info.plist | grep CFBundleExecutable
- 得到可執(zhí)行文件名稱“m2048”后,使用class-dump導(dǎo)出該應(yīng)用程序的頭文件到指定文件夾下:
class-dump -S -s -H m2048 -o ~/Documents/working/IPA/2048/headers/
-
查看導(dǎo)出的頭文件,根據(jù)頭文件進(jìn)行進(jìn)一步逆向。
導(dǎo)出的頭文件
下面是一些常用的class-dump選項(xiàng):
- -a :顯示實(shí)例的方法以及變量。
- -A :顯示運(yùn)行時(shí)類所在的地址。
- -f <str>:顯示包含或者匹配str的方法名。
- -H :在當(dāng)前文件夾生成所有的頭文件。后接-o參數(shù)表示在其它文件夾生成。
- -I :根據(jù)繼承關(guān)系對(duì)類、類別和接口進(jìn)行排序。會(huì)覆蓋 -s。
- -s :根據(jù)名稱對(duì)類、類別進(jìn)行排序。
- -S :根據(jù)名稱對(duì)方法名進(jìn)行排序。
