class-dump 是用來 dump 目標文件的類信息的工具滩褥。它利用 Objective-C 語言的 runtime 的特性,將存儲在 mach-O 文件中的 @interface 和 @protocol 信息提取出來箱叁,并生成對應的 .h 文件解取。官方介紹如下:
This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.
一溢谤、安裝 class-dump
下載地址:http://stevenygard.com/projects/class-dump/甘磨。
打開鏈接后,選擇 class-dump-3.5.dmg患整,進行下載拜效。下載完成之后喷众,將 dmg 文件中的 class-dump 復制到 /usr/local/sbin
目錄,并在終端執(zhí)行如下命令進行賦權:
sudo chmod 777 /usr/local/sbin/class-dump
運行 /usr/local/sbin/class-dump
指令紧憾,即可看到如下結果:
其他文章說的 /bin/
或 /usr/bin/
目錄到千,都是不能拷貝文件進去的。
對于 Mac OS X 10.11 El Capitan 及以上版本赴穗,由于系統(tǒng)啟用了 SIP(System Integrity Protection)憔四,導致 root 用戶也沒有權限修改 /usr/bin/ 或者 /bin/ 目錄。
解決辦法:重啟 Mac般眉,出現(xiàn)黑屏時按住 command+R
進入恢復模式了赵。選擇打開 Utilities下的終端,輸入:csrutil disable
并回車甸赃,然后正常重啟 Mac 即可柿汛。
記得使用完后按同樣的步驟啟用 SIP,命令為 csrutil enable
埠对。
二络断、使用 class-dump
執(zhí)行命令:
/usr/local/sbin/class-dump -H /Users/cykj/Desktop/WeChat.decrypted -o /Users/cykj/Desktop/head
說明:
- /Users/cykj/Desktop/WeChat.decrypted:砸殼后的文件目錄
- /Users/cykj/Desktop/head:存放 dump 結果的 .h 文件的路徑。
執(zhí)行上面的指令之后项玛,我們可以在 /Users/cykj/Desktop/head 目錄下看到生成的 .h 列表:
有了這些 .h 文件之后貌笨,可以初步了解目標 App 的程序結構。后面可以結合Reveal 和 cycript 工具襟沮,更精準的分析目標 App 某個頁面的功能實現(xiàn)锥惋。
同樣的,我們也可以導出 AppKit开伏、UIKit 的頭文件:
/usr/local/sbin/class-dump -H /System/Library/Frameworks/AppKit.framework -o /Users/cykj/Desktop/head/AppKitHeaders
【注意】:有時 class-dump 指令會執(zhí)行失敗膀跌,無法得到想要的頭文件,或頭文件的內容是加密的密文硅则。出現(xiàn)這種情況是因為 class-dump 的作用對象必須是未經加密的可執(zhí)行文件淹父,一般 App Store 中下載的 App 都是經過簽名加密的株婴,這個時候需要先進行砸殼怎虫。
【報錯】:class-dump -H 時報 Error: Cannot find offset for address 0x580000000100bcd8 in stringAtAddress:
原因:項目是用 OC 和 Swift 混編的,需要使用新的 class-dump困介,下載地址:https://github.com/AloneMonkey/MonkeyDev class-dump 文件在 bin 目錄下大审。
三、class-dump-z
class-dump-z 是對 class-dump 和 class-dump-x 的改進版座哩,完全用 C++ 重寫徒扶,避免動態(tài)調用,這使得 class-dump-z 比 class-dump 和 class-dump-x 快 10 倍左右根穷,并且可以在 Linux姜骡、Mac导坟、 iPhone 上運行。
下載地址:https://code.google.com/archive/p/networkpx/wikis/class_dump_z.wiki
其他的和 class-dump 一樣圈澈。