天天看點

iOS逆向開發(2):擷取APP的類聲明 | class-dump | dumpdecrypted

iOS逆向開發(2):擷取APP的類聲明 | class-dump | dumpdecrypted

之前介紹了怎麼操作越獄的iOS裝置(以下簡稱為手機),但簡單操作手機并不是目标,小程的目标是手機上特定的APP,比如微信、淘寶、QQ音樂等等,因為小程可以從這些APP上拿到一些有用的資訊或資源--比如,“微信的那個頁面是用什麼控件來布局的?”、“QQ音樂的歌手頭像,能批量地拿到嗎?”,等等。

很明顯,如果你知道目标APP的所有類的聲明,你就可能直接觀察到,或者推導到一些有用的資訊。實際上,把目标APP的類資訊拿到,是至關重要的一步,因為這一步的成功讓你有了分析的資料,進而決定了後續的動作,比如借鑒目标APP的實作方案,或者進一步做注入的工作。

為了感性一點,小程先貼上一個APP的部分類的結構資訊,然後來簡單看看,可以分析到什麼。

這是“花椒直播”APP的視訊編碼類:

花椒直播的某個類

現在的直播主要是看美女,不過這不是重點。重點是,直播是要開播的,開播就要錄像,然後要把視訊編碼,再推到伺服器。而這個類,就是“視訊編碼”的關鍵類(通過注入就能證明)。可以直接看到,它是用AVAssetWriter來實作視訊編碼的,也就是我們經常說的“硬體編碼”,而不是用libx264之類的第三方庫來做視訊編碼。還可以看到,在編碼初始化時,指定了分辨率與碼率,如果有必要,我們能查出是什麼值。

這是“花椒直播”APP的崩潰彙報類(疑似):

花椒崩潰彙報類

可以看到,APP的ID跟版本可能是上報的資訊,那又怎麼樣呢?如果我們想惡作劇,是可以做到不斷的崩潰再啟動再崩潰的,然後修改這兩個資訊的内容,是可以不斷地跟分析資料的技術人員打招呼的。通過給某個産品制造異常,然後給分析異常的人發送某個明文資訊,是很可能做到的。

以上這個例子,是在得到類的結構資訊後,做出的一些“感性”的分析。

那麼,怎麼樣才能得到類的結構資訊呢?

本文介紹如何擷取目标APP的類的結構資訊。

其實,還是工具的使用。一個叫classdump,另一個叫dumpdecrypted。

一般情況下,使用classdump就可以解決問題。

小程用的是mac電腦。

(一)class-dump

class-dump或class-dump-z,都可以分析出類結構,使用上相似。

(1)擷取

class-dump-z:

wget

http://networkpx.googlecode.com/files/class-dump-z_0.2a.tar.gz

解壓後,拷貝到bin目錄:

sudo cp mac_x86/class-dump-z /usr/local/bin

class-dump:

http://stevenygard.com/projects/class-dump

查找并下載下傳,或者直接:

下載下傳

http://stevenygard.com/download/class-dump-3.5.tar.gz

把class-dump拷貝到/usr/local/bin目錄,并chmod +x class-dump。

(2)使用

class-dump-z Payload/QQ.app/QQ > ../../dumpinfo --所有資訊放到一個檔案

class-dump -H Spotify.app -o ../headers --這種方式可以分出不同的檔案

class-dump -A -a Spotify.app > ../../addressinfo --帶有位址資訊

根據函數的位址,可以用gdb或lldb來下斷點調試。

class-dump也可以指定指令集,比如--arch arm64。

對于小程來說,一般這樣使用class-dump: class-dump -A -a --arch arm64 target.app > ../dumpinfo

這樣可以把所有的類資訊放到dumpinfo檔案,而且每個方法跟變量都是有位址的(友善之後可能進行的動态調試)。

但需要注意一個問題,classdump隻能對沒有加密的APP進行分析,如果APP是加密了的,那classdump是無能為力的(直接提示加密了!)。

哪些APP是加密狀态的呢?有沒有辦法破解呢?

基本上,隻有從AppStore下載下傳的APP才是加密了的,其它通過PP助手、愛思等工具拿到的ipa安裝包(實際是壓縮包,裡面有target.app),都是經過了破解。

小程覺得,不用管那麼多,先用classdump來跑一下,如果提示加密,再來考慮破解。

破解的工具是clutch。

應該使用clutch的最新版本,特别是對于ios10.x的系統。

可以在

https://github.com/KJCracks/Clutch/releases

下載下傳(下載下傳-debug版本即可)。

把clutch拷貝到手機的/usr/bin目錄,給權限:chmod +x clutch

這樣使用clutch:

./Clutch -? --檢視選項

./clutch -i --檢視可以破解的軟體

./clutch -d x --根據序号來破解某個APP

破解完,clutch會提示破解後的ipa包所在的目錄。把ipa拷貝到電腦,就可以classdump了。

另一個分析類結構的工具是dumpdecrypted。

之是以引入dumpdecrypted,主要是因為小程發現:使用最新的clutch2.0.4-debug,未能破解微信6.5.12版本(也不能成功破解7.0版本)。甚至于,微信6.5.x版本,運作後,ps aux都找不到程序資訊。

那怎麼辦呢?

最簡單的辦法,其實是,使用手機上的pp助手、愛思之類的工具,安裝一個微信,這個微信就已經砸殼的了;或者,在電腦上通過上網或助手工具,下載下傳一個微信ipa,一般也是解密了的。

如果非要用dumpdecrypted來弄一下,也是可以。小程把辦法貼在下面,大家可以在需要時再閱讀。

生成dumpdecrypted.dylib:

git clone

https://github.com/stefanesser/dumpdecrypted

cd dumpdecrypted

make --生成dumpdecrypted.dylib

在手機cydia上搜尋Filza,并安裝。利用Filza找出微信的安裝路徑。(不能使用cycript,因為程序id都找不到。)

比如,微信安裝目錄:/var/mobile/Containers/Bundle/Application/4777DEE2-6805-45F7-B3D0-CB4277DD5389/WeChat.app

拷貝dumpdecrypted.dylib到手機:

scp dumpdecrypted.dylib [email protected]:/

啟動微信(重要!),ssh到手機,cd到dumpdecrypted.dylib所在的目錄,執行:

ldid -S dumpdecrypted.dylib

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/4777DEE2-6805-45F7-B3D0-CB4277DD5389/WeChat.app/WeChat

在目前目錄生成WeChat.decrypted檔案,即為破解後的檔案。

scp WeChat.decrypted到pc,先觀察一下這個檔案:

file WeChat.decrypted --可以看到包括兩個指令集:armv7跟arm64

otool -l WeChat.decrypted | grep crypt

WeChat.decrypted (architecture armv7):

cryptoff 16384
cryptsize 55377920
  cryptid 1           

WeChat.decrypted (architecture arm64):

cryptoff 16384
cryptsize 59883520
  cryptid 0           

可以看到,armv7是加密了的,而arm64是解密了的,是以在使用class-dump與hopper時,都應該選擇arm64。

提取頭檔案:

class-dump -A -a --arch arm64 WeChat.decrypted > dumpinfo

dumpinfo裡面為所有頭檔案資訊,比如:MicroMessengerAppDelegate為AppDelegate類。

(二)效果示範

為了再“感性”一下,小程再貼一下“微信”的類結構,作為後續更多分析的熱身。

微信在每次進入“附近的人”時,都會把手機的位置資訊傳遞給這個類的方法:

設定位置資訊的類與方法

從這裡可以看出,隻要注入到紅框内的那個函數,把傳遞進來的位置更換成目标位置(比如定到大平洋),就可以看到你想要的“附近的人”。比如,定位到紐約,可以看到這樣的人:

紐約某個縣的附近的人

要實作這個效果,拿到類結構資訊隻是第一步,接下來還要定位目标類(甚至要調試),再寫hook代碼。

所謂“萬達高樓平地起”,小程覺得,如果想往一個方向研究,那就應該有耐心,一步一步掌握好知識與技能。

總結一下,本文主要介紹了class-dump工具的使用,其它内容都是次要的。

這是有價值的嗎?

原文位址

https://www.cnblogs.com/freeself/p/10640998.html

繼續閱讀