iOS逆向class-dump獲取app頭文件

class-dump

  • 簡(jiǎn)介: class-dump是用來(lái)dump目標(biāo)文件的類信息的工具。它利用Objective-C語(yǔ)言的runtime的特性,將存儲(chǔ)在mach-O文件中的@interface和@protocol信息提取出來(lái),并生成對(duì)應(yīng)的.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
    進(jìn)入class-dump官網(wǎng)選擇class-dump-3.5.dmg即可下載,下載完成后打開(kāi)dmg文件,將里面的class-dump拷貝到/usr/bin目錄中(放在這個(gè)目錄的好處: 每次執(zhí)行class-dump時(shí)都不需要輸入全路徑,否則執(zhí)行時(shí)還要帶上class-dump的完整路徑), 但是我在拷貝時(shí)發(fā)現(xiàn)這個(gè)文件不可寫(xiě)入,

/usr/bin不可拷貝原因: OSX 10.11以上/usr/bin為只讀狀態(tài),只有系統(tǒng)級(jí)別(super user)的權(quán)限才可寫(xiě)入,這里為了安全考慮,我們?cè)诋?dāng)前用戶根目錄下創(chuàng)建一個(gè)bin目錄,并將class-dump拷貝到這里,然后再配置class-dump的環(huán)境變量即可解決,步驟如下:

  1. 打開(kāi)終端執(zhí)行: mkdir ~/bin,或者通過(guò)Finder進(jìn)入你所在的用戶目錄下手動(dòng)創(chuàng)建一個(gè)文件夾bin
  2. 將下載的dmg中的class-dump拷貝到創(chuàng)建的bin目錄下
  3. 在終端執(zhí)行如下執(zhí)行進(jìn)行賦權(quán):sudo chmod 777 ~/bin/class-dump
  4. 把~/bin路徑加入環(huán)境變量: 打開(kāi)~/.bash_profile文件,在文件最上方加一行:export PATH=$HOME/bin/:$PATH, 保存
  5. 在終端執(zhí)行: source ~/.bash_profile
    完成上述步驟后,可在終端通過(guò)class-dump測(cè)試
  • 通過(guò)class-dump導(dǎo)出微信的頭文件
    打開(kāi)終端,執(zhí)行:
class-dump -H /Users/mofeini/Desktop/weChat/WeChat.app/WeChat -o /Users/mofeini/Desktop/weChat/wechathheaders

但西瓜視頻不生效了, 使用下面的命令就生效了:

class-dump --arch armv7 -S -s -H /Users/swae/Desktop/work/Tweak/xiguavideo/Video.app/Video -o /Users/swae/Desktop/headers
原因: 這個(gè)是armv7編譯出來(lái)的架構(gòu)的二進(jìn)制文件,所以需要帶參數(shù)–arch armv7

注意: /Users/mofeini/Desktop/weChat/WeChat.app/WeChat是微信app中的可執(zhí)行文件,/Users/mofeini/Desktop/weChat/wechathheaders是獲取的頭文件保存的路徑;
若要成功執(zhí)行class-dump命令,app的可執(zhí)行文件必須是解密的,
因?yàn)閏lass-dump的作用對(duì)象必須是未經(jīng)加密的可執(zhí)行文件,而App Store中下載的App都是經(jīng)過(guò)簽名加密的,所以我們需要先進(jìn)行砸殼,或者從pp助手下載越獄版本的app。

問(wèn)題:

class-dump[4053:282734] Error: Cannot find offset for address 0x8000000001029ea9 in stringAtAddress:

網(wǎng)上查詢都是是項(xiàng)目采用swift或oc和swift混編的,暫時(shí)沒(méi)有找到解決方案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容