class-dump 混淆加固、保護與最佳化原理

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

 class-dump 混淆加固、保護與最佳化原理

進行逆向時,經常需要dump可執行檔案的標頭檔案,用以確定類資訊和方法資訊,為hook相關方法提供更加詳細的資料.class-dump的主要用於檢查儲存在Mach O檔案的Objective-C中的執行時資訊,為類,類別和協議生成宣告資訊,與

tool -ov命令產生的資訊相同,不同的是class-dump會將這些資訊Objective-C宣告形式提供,更加緊湊易讀.

安裝class-dump是一個命令列工具,可以直接在class-dump官網進行下載解壓.然後將可執行檔案class-dump檔案複製到對應的目錄下即可在全域性使用.由於Mac OS在10.11之後的版本中,對於/usr/bin目錄的寫入許可權進行了限制,所以在Mac OS10.11之前,可以將class-dump檔案放在/usr/bin目錄下,在Mac OS10.11之後,可以將class-dump檔案放在/usr/local/bin目錄下.(也可以更改/usr/bin目錄的操作許可權但是不建議使用)使用基本使用格式

class-dump [options] <mach-o-file>
Usage: class-dump [options] <mach-o-file>
 
  where options are:
        -a             show instance variable offsets
        -A             show implementation addresses
        --arch <arch>  choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64, armv6, armv7, armv7s, arm64)
        -C <regex>     only display classes matching regular expression
        -f <str>       find string in method name
        -H             generate header files in current directory, or directory specified with -o
        -I             sort classes, categories, and protocols by inheritance (overrides -s)
        -o <dir>       output directory used for -H
        -r             recursively expand frameworks and fixed VM shared libraries
        -s             sort classes and categories by name
        -S             sort methods by name
        -t             suppress header in output, for testing
        --list-arches  list the arches in the file, then exit
        --sdk-ios      specify iOS SDK version (will look in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS<version>.sdk
        --sdk-mac      specify Mac OS X version (will look in /Developer/SDKs/MacOSX<version>.sdk
        --sdk-root     specify the full SDK root path (or use --sdk-ios/--sdk-mac for a shortcut)

-a:使用該選項顯示變數的偏移量(會在變數後邊以註釋方式標註變數的位置偏移);-A:使用該選項顯示方法實現的地址;--arch:可以從通用二進位制檔案中選擇指定的架構進行dump;-C:透過正規表示式匹配需要展示的類;-f:在方法名中查詢字串;-H:在當前路徑中生成標頭檔案檔案或者透過-o指定生成標頭檔案的路徑;-I:透過繼承對類 ,分類和協議進行排序(覆蓋-s實現);-o:與-H配對使用,指定標頭檔案的存放路徑;-r:遞迴擴充套件框架和固定的vm共享庫;-s:透過類名對類和分類進行排序;-S:透過方法名對方法進行排序-t:抑制輸出中的標頭,以進行測試;--list-arches:列出可執行檔案支援的架構,然後退出;--sdk-ios:指定iOS SDK的版本;--sdk-root:指定完整的SDK全路徑.常用命令以下命令中:{excutableFileName}指代.app檔案

class-dump最常用的命令就是輸出標頭檔案到指定目錄:

class-dump -H {excutableFileName} -o {destinationDirectory}

還可以指定透過類名進行排序引數等

class-dump -s -H {excutableFileName} -o {destinationDirectory}

檢視可執行檔案的架構:

class-dump --list-arches {executableFile}

檢視包含特定字串的方法:

class-dump -f {specifyString}  {ececutableFile}

 

二、使用

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。

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

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

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

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

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

 

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


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

相關文章