簡介
Class-dump 是一款用來檢測存儲在 Mach-O 文件裏的 Objective-C runtime 信息的命令行工具。他可以檢測出 class,category,protocol 的聲明。和 'otool -ov' 產生的信息類似,但是 Class-dump 產生的是 Objective-C 語法格式的聲明,所以它的可讀性更高。
爲什麼使用 Class-dump
它一個強大的工具。有了它,你可以查看一些閉源的應用,framework 及 bundle。查看不同版本之間接口的變化。體驗私有庫,或者查看 AppKit 有哪些私有的 API。學習 Mail.app 使用了哪些擴展的私有API。
下載
安裝
下載完成後把 class-dump-3.5.dmg
內的 class-dump
拷貝到 /usr/bin/
路徑下,並且賦予執行權限。
sudo cp class-dump /usr/bin
sudo chmod 777 /usr/bin/class-dump
使用
class-dump [options]
where options are: -a 顯示實例變量的偏移量。 -A 顯示實現的地址。 --arch 從一個通用架構類型的二進制文件(ppc,ppc64,i386,x86_64)中選擇一個指定的架構類型。 -C 僅顯示匹配正則表達式的類。 -f 在方法命中查找字符串。 -H 在當前目錄生成頭文件,或者使用 -o
參數指定生成頭文件的目錄。
-I 對 類,categories,procotols 按照繼承關係排序(會覆蓋 -s
參數) -o
-H
使用。 -r 遞歸擴展 frameworks,並且修復 VM
共享庫。
-s 把類和 categories 按名稱排序。 -S 把方法按名稱排序 -t 限制輸出頭,用於測試 --list-arches 列出文件的架構類型, 然後退出 --sdk-ios 指定 iOS SDK 版本 (將會查找 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk --sdk-mac 指定 Mac OS X 版本 (將會查找 /Developer/SDKs/MacOSX.sdk --sdk-root 指定 SDK 完整根路徑(或者簡單使用 --sdk-ios
/--sdk-mac
)
實踐
我們知道從 App Store 下載的 App 都是經過加密的,有一層殼,我們得先砸殼,本文不講砸殼,本只講 class-dump 的使用。
我隨機選取了我手機裏的一款 App,名字叫《早朝》,是一款簡單的 RSS 閱讀工具,(說實話,簡單到完全沒什麼逆向的價值)。砸完殼之後的文件可以在 這裏下載,然後我們直接對其 dump 一把。
class-dump -H iOSRSS.decrypted -o iOSRSS.h
然後我們可以看到在當前目錄下生成了 iOSRSS.h
的文件夾,所有 dump 出來的頭文件都在裏面了。
然後我們就可以查看每個類,category,protocol 的聲明瞭。