九 iOS逆向 class-dump

  • class-dump簡單介紹
  • 如何使用class-dump
一 class-dump簡單介紹

class-dump是可以把Objective-C運行時的聲明的信息導(dǎo)出來的工具。實質(zhì)就是可以導(dǎo)出.h文件。用class-dump可以把未經(jīng)加密的app的頭文件導(dǎo)出來

官方網(wǎng)站:http://stevenygard.com/projects/class-dump/
class-dump是一個mac端的命令行工具,用來導(dǎo)出Mach-O頭文件的。

1 首先我們要下載
2 下載后雙擊打開我們可以看到它是一個命令行工具
3 將執(zhí)行文件class-dump復(fù)制到/usr/local/bin 目錄
4 打開終端驗證是否安裝好了
xmldeMacBook-Pro:~ xml$ class-dump
class-dump 3.5 (64 bit)
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)
xmldeMacBook-Pro:~ xml$

輸出上面的信息,就代表安裝好了,為啥要放到/usr/local/bin ,這個就不用說了吧,Mac默認環(huán)境變量配置有這個目錄,你在在終端敲擊任何命令,它都會去從這個目錄中去找。好了,安裝就是這么簡單,下面看看怎么用。

二 如何使用class-dump

class-dump 用來導(dǎo)出Mach-O頭文件的,Mach-O文件有哪些種類,class-dump什么能導(dǎo)出Mach-O里面的頭文件,我會專門介紹下Mach-O,文末我會簡單提一下,現(xiàn)在我們導(dǎo)出頭文件,主要是導(dǎo)出app里面二進制可執(zhí)行文件的頭文件。

1 拿到ipa里面的Mach-O文件

我們可以網(wǎng)上下載ipa文件,然后解壓,拿出里面的二進制可執(zhí)行文件,我們也可以從越獄手機里面導(dǎo)出已經(jīng)裝上的app的二進制可執(zhí)行文件,我這里是從手機里導(dǎo)出來的


我拖了一個計算器的二進制文件
2 進入到了執(zhí)行文件目錄

Mac終端進入到Calculator所在目錄

xmldeMacBook-Pro:~ xml$ cd /Users/xml/Documents/iOS學(xué)習(xí)/
3 開始導(dǎo)出頭文件
xmldeMacBook-Pro:iOS學(xué)習(xí) xml$ class-dump -H Calculator -o CalculatorHeader
2019-02-17 21:25:11.771 class-dump[6911:783784] Error: Cannot find offset for address 0x9000000001000626 in stringAtAddress:

我開始遇到了這個錯誤,最后通過換了這個class-dump文件,才解決這個問題。最后執(zhí)行如下

xmldeMacBook-Pro:iOS學(xué)習(xí) xml$ class-dump -H Calculator -o CalculatorHeader
2019-02-17 21:25:47.949 class-dump[6916:784064] Warning: Parsing instance variable type failed, window
2019-02-17 21:25:47.949 class-dump[6916:784064] Warning: Parsing instance variable type failed, controller
2019-02-17 21:25:47.951 class-dump[6916:784064] Warning: Parsing instance variable type failed, displayController
2019-02-17 21:25:47.952 class-dump[6916:784064] Warning: Parsing instance variable type failed, keypadController
2019-02-17 21:25:47.952 class-dump[6916:784064] Warning: Parsing instance variable type failed, model
2019-02-17 21:25:47.952 class-dump[6916:784064] Warning: Parsing instance variable type failed, soundsPreferencesDomain
2019-02-17 21:25:47.952 class-dump[6916:784064] Warning: Parsing instance variable type failed, soundsEnabled
2019-02-17 21:25:47.952 class-dump[6916:784064] Warning: Parsing instance variable type failed, isSizeTransitioning
2019-02-17 21:25:47.952 class-dump[6916:784064] Warning: Parsing instance variable type failed, keypadTapGestureRecognizer
2019-02-17 21:25:47.953 class-dump[6916:784064] Warning: Parsing instance variable type failed, darwinObserver
2019-02-17 21:25:47.953 class-dump[6916:784064] Warning: Parsing instance variable type failed, maxLandscapeDigits
2019-02-17 21:25:47.954 class-dump[6916:784064] Warning: Parsing instance variable type failed, value
2019-02-17 21:25:47.954 class-dump[6916:784064] Warning: Parsing instance variable type failed, userEntered
2019-02-17 21:25:47.955 class-dump[6916:784064] Warning: Parsing instance variable type failed, delegate
2019-02-17 21:25:47.956 class-dump[6916:784064] Warning: Parsing instance variable type failed, maximumDigitCount
2019-02-17 21:25:47.956 class-dump[6916:784064] Warning: Parsing instance variable type failed, isAllClearActive
2019-02-17 21:25:47.956 class-dump[6916:784064] Warning: Parsing instance variable type failed, displayValue
2019-02-17 21:25:47.956 class-dump[6916:784064] Warning: Parsing instance variable type failed, memoryValue
最后導(dǎo)出來的頭文件

最后說一下class-dump是如何導(dǎo)出頭文件的,其實Mach-O文件都有固定格式的,它里面含有符號表文件,class-dump就是通過讀取符號表文件,才導(dǎo)出了頭文件。

class-dump這個工具使用很簡單,逆向中也常用到,還有我找的這個Caculator這個文件是沒有加殼的,所以能導(dǎo)出頭文件來,如果加了殼的應(yīng)用是導(dǎo)不出來了,需要先砸殼。

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

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

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