class dump使用方式和原理

雪奈椰子發表於2023-12-01

 class dump使用方式和原理

一、安裝

官網下載安裝包完成後,將class-dump複製到usr/bin資料夾下

如果這個時候沒有發現usr資料夾 說明其隱藏起來了 去查詢mac系統下怎麼顯示隱藏檔案

發現mac os 10.11不讓複製 沒有這個許可權

解決辦法如下:

重啟電腦,按住 command + R,出現 OS X Utilities 介面後,在 Utilities 選單中選擇 Terminal ,執行 “csrutil disable; reboot” ,電腦自動重啟。(開啟 sip “csrutil enanbel;reboot”)

重新啟動後,usr/bin下可以複製進class-dump檔案了

接下來 給class-dump賦許可權

sudo chmod 777 /usr/bin/class-dump

然後要求輸入密碼

輸入class-dump 出現如下圖

 

則表示安裝成功了 在任何一個目錄裡都可以正常使用class-dump了

二、使用

class-dump在dump從appstore上下載下來的app的時候,首先是需要對app進行砸殼處理的,具體的砸殼工具是ipaguard、clutch等等。

以ipaguar為例,

 使用ipaguard來對程式進行加固

程式碼加固是進一步保護應用的一種方式,通常透過特定平臺來對應用進行加固處理。

這邊以ipaguard為例,目前還在免費階段,想薅羊毛的快快試試。

Ipa Guard是一款功能強大的ipa混淆工具,不需要ios app原始碼,直接對ipa檔案進行混淆加密。可對IOS ipa 檔案的程式碼,程式碼庫,資原始檔等進行混淆保護。 可以根據設定對函式名、變數名、類名等關鍵程式碼進行重新命名和混淆處理,降低程式碼的可讀性,增加ipa破解反編譯難度。可以對圖片,資源,配置等進行修改名稱,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5類app。

所以就要使用到混淆器,混淆器是把裡面的程式碼變數等資訊進行重新命名,這樣可讀性會變得非常差,接著,

到這裡,我們完成了對程式碼的混淆,但是還沒有進行加固,防止反編譯,所以,請往下看

然後匯入自己的包就可以了,這裡是流水式的走下來,所以只需要匯入和匯出就可以了,

新增單個檔案,選擇好剛剛混淆後的包,然後你做的事情就是等,等待上傳完--加固完--下載完--已完成,當到已完成的時候,說明這裡已經可以匯出了,匯出需要前面提到的自己建立的簽名,這裡可是會用到的,如果不用,則包安裝包可能會出現問題

選擇匯出簽名包,選擇簽名檔案,輸入密碼,然後點選開始匯出

 

匯出的包是經過混淆,經過加固比較安全的包了

但可以對自己編寫的app進行dump,同時也可以dump私有框架的標頭檔案

1:對自己寫的app進行dump

進入終端 到桌面

class-dump -H test1.app -o testgod

將test1.app的可執行檔案 進行dump到桌面testgod資料夾裡(不需要事先建立)

結果在testgod裡發現

這個是dump之前的工程檔案

這個是dump出來的工程檔案

dump的很準確

對比前後ViewController.h裡的檔案

這是原檔案

這是dump後的檔案

發現dump後的還多了幾個方法

對比一下:

cxx_destruct是析構方法 在原ViewController裡沒有顯示呼叫 自從使用了ARC模式之後

didReceiveMemoryWarning 在原ViewController裡有實現,但是在原ViewController的標頭檔案中沒有進行過宣告

buttonClick,viewDidLoad也分別在原ViewController裡有實現,但是在原ViewController的標頭檔案中沒有進行過宣告

這一點就充分說明class-dump的準確性,這裡我提出一個疑問,既然class-dump能如此精準的提取標頭檔案,甚至能提出.m檔案裡有的.h檔案裡沒有宣告過的,為什麼就不能連函式體一起提取出來呢?

在研究完 中就可以回答這個問題

Mach的檔案結構裡的data部分,就只有類的名稱和類的方法,class-dump自然是根據Mach的檔案結構來分析的。設想一下,如果有類的方法的實際,那麼這個Mach可執行檔案得有多大。

所以class-dump只能提取函式的方法名。

2:對私有框架進行提出

查詢資料 無果

仍然顯示:

This file does not contain any Objective-C runtime information.

採用swift編寫或是關鍵部分採用C語言編寫的模組是無法dump出標頭檔案的

據說xcode7之後ios9之後,dylib變成tdb,所有的私有函式的dump就無法使用class-dump而只能使用runtime dump了。

而關於class-dump的解析原理,以及本文中提及到的兩個問題 都和Mach-o檔案解析格式有關。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026554/viewspace-2998478/,如需轉載,請註明出處,否則將追究法律責任。

相關文章