iOS逆向工程的探索與學(xué)習(xí)

1.砸殼前的準(zhǔn)備

一臺(tái)越獄iphone??,根據(jù)以往經(jīng)驗(yàn),測(cè)試用的手機(jī)永遠(yuǎn)不要緊跟潮流升級(jí)系統(tǒng),在越獄手機(jī)中打開(kāi)Cydia,搜索并分別安裝OpenSSH,Cycript

下載dumpdecrypted,地址在這https://github.com/stefanesser/dumpdecrypted/archive/master.zip

下載class_dump,地址也在這

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

下載hopper,地址同樣在這

https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM

至此,基本的準(zhǔn)備已達(dá)成,可繼續(xù)以下操作步驟


2.砸殼工具dumpdecrypted的使用

設(shè)置Makefile中的SDK字段和越獄設(shè)備系統(tǒng)版本一致,打開(kāi)你下載dumpdecrypted的文件夾,接著打開(kāi)Makefile文件(之前誤以為雙擊打開(kāi)就行,結(jié)果一直默認(rèn)黑盒子打開(kāi),查看不了內(nèi)容,原因是工具使用錯(cuò)了,那么就搜索相關(guān)打開(kāi)工具吧,可以使用的工具有多種,這里提供一種打開(kāi)免費(fèi)工具,sublime,自行下載,打開(kāi)Makefile是如下內(nèi)容)

Makefile內(nèi)容

在蘋(píng)果終端輸入

xcrun --sdk iphoneos --show-sdk-path

會(huì)顯示出當(dāng)前xcode的sdk版本

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk

可見(jiàn)我當(dāng)前默認(rèn)的使用版本是iPhondeOS9.0版本,這個(gè)跟我的手機(jī)系統(tǒng)版本剛好符合,則Makefile中的SDK=‘xcrun --sdk iphoneos --show-sdk-path’不用作修改,但比方說(shuō)你的手機(jī)是8.4的版本,那么此處xcode的sdk版本就應(yīng)當(dāng)是xcode6.4(iPhoneOS8.4),老舊xcode版本可在下方鏈接下載。

注意,如果你電腦原本安裝xcode,保存兩者時(shí),第二個(gè)xcode會(huì)顯示為xcode 2,此時(shí)在mac終端輸入xcrun --sdk iphoneos --show-sdk-path,顯示的對(duì)應(yīng)iPhoneOS版本依舊會(huì)跟手機(jī)的版本不符,可將原有xcode名稱先修改為xcode3(3為任意數(shù)字,只是為了跟新下載的版本區(qū)分開(kāi)名字),再將新下載的xcode 2重命名為xcode(一旦造好錘子??,或者砸殼完畢之后可將文件名修改過(guò)來(lái),避免影響mac上相關(guān)程序的使用,切記切記)

老舊xcode版本的下載

https://developer.apple.com/downloads/index.action


3.造錘子??

完成上述操作之后,在mac終端cd進(jìn)你下載dumpdecrypted的路徑,緊接著輸入make指令,可看到在該文件目錄下會(huì)多處dumpdecrypted.dylibdumpdecrypted.o兩個(gè)文件,dumpdecrypted.dylib就是我們要造的錘子??,錘子在下面會(huì)用到,拷貝到桌面?zhèn)浞?b>(提示:做好的錘子??是可以重復(fù)使用的,所以可以拷貝一份放好,不用每次都造錘子??)

make之后生成的文件

4.通過(guò)mac終端控制手機(jī)??

先前已經(jīng)在越獄手機(jī)安裝了openSSH,現(xiàn)在可通過(guò)mac來(lái)控制手機(jī)??,需要確保的是mac跟手機(jī)處于同一個(gè)網(wǎng)段,并且需要知道手機(jī)的IP地址是多少,查看十分簡(jiǎn)單,在手機(jī)連接wifi處點(diǎn)擊藍(lán)色感嘆號(hào),進(jìn)入即可看見(jiàn)對(duì)應(yīng)IP地址(新手教程略啰嗦)

點(diǎn)擊藍(lán)色感嘆號(hào),即可在彈出界面看到當(dāng)前ip

接下來(lái)在終端輸入ssh root@你的手機(jī)IP地址,在彈出來(lái)需要輸入password時(shí)輸入alpine默認(rèn)密碼(T.T,新手踩過(guò)的一個(gè)坑,一直以為是我mac的密碼,折騰了許久,賤笑了各位),出現(xiàn)如下圖情況即為連接手機(jī)??成功。

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ ssh root@192.168.2.11

root@192.168.2.11's password:

zhaoxianshengde-iPhone:~


5.尋找反編譯app文件路徑

ok,接著在越獄的手機(jī)上找到你要反編譯的app的文件路徑,為了避免影響,最好只運(yùn)行你要砸殼的app,在mac終端輸入ps -e,終端會(huì)顯示運(yùn)行app的文件路徑(為方便找到你想找的目錄,也可將ps -e指令,替換成ps -e | grep var這樣終端顯示的路徑會(huì)更少,可自行測(cè)試相關(guān)指令的使用)

zhaoxianshengde-iPhone:~ root# ps -e | grep var

365 ?? ? ? ? ? 0:01.10 /usr/libexec/pkd -d/var/db/PlugInKit-Annotations

506 ?? ? ? ? ? 0:00.32 /private/var/db/stash/_.yogkf3/Applications/ServerDocuments.app/PlugIns/ServerFileProvider.appex/ServerFileProvider

783 ?? ? ? ? ? 0:00.38 /private/var/db/stash/_.yogkf3/Applications/MobileCal.app/PlugIns/CalendarWidget.appex/CalendarWidget

785 ?? ? ? ? ? 0:17.48 /private/var/db/stash/_.yogkf3/Applications/Stocks.app/PlugIns/StocksWidget.appex/StocksWidget

1342 ?? ? ? ? ? 1:38.49 /var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx

1918 ttys000 ? ?0:00.00 grep var

zhaoxianshengde-iPhone:~ root# cycript -p idx

我砸殼的app叫愛(ài)定客,所以終端中顯示的/var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx就是我要找的路徑


6.接著用Cycript找出你看不爽的app的Documents目錄路徑

zhaoxianshengde-iPhone:~ root# cycript -p 1163

cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]

#"file:///var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/"

cy#

'/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/'即為所得,沒(méi)有多余的“//”


7.將步驟3.造錘子??中的錘子放入到上述獲得的Documents目錄下

(執(zhí)行的指令為“scp 錘子路徑 root@你的ip地址:反編譯app路徑”,注意中間的空格,為防止各位嘗試出錯(cuò),可直接復(fù)制后做相應(yīng)替換即可,password依舊是alpine)

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp /Users/zhaozhenbo/Desktop/逆向?qū)W習(xí)/砸殼工具/dumpdecrypted-master/dumpdecrypted.dylib root@192.168.3.107:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/

root@192.168.3.107's password:

dumpdecrypted.dylib ? ? ? ? ? ? ? ? ? ? ? ? ? 100% ?193KB 192.9KB/s ? 00:00


8.砸~殼

來(lái)到最激動(dòng)人心的時(shí)候了,錘子已經(jīng)放好,那么就開(kāi)始砸吧(先cd到Documents目錄下)

zhaoxianshengde-iPhone:~ root# cd /var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/

zhaoxianshengde-iPhone:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx

mach-o decryption dumper

DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 32bit ARM binary in memory.

[+] offset to cryptid found: @0x5ea08(from 0x5e000) = a08

[+] Found encrypted data at address 00004000 of length 21364736 bytes - type 1.

[+] Opening /private/var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx for reading.

[+] Reading header

[+] Detecting header type

[+] Executable is a FAT image - searching for right architecture

[+] Correct arch is at offset 16384 in the file

[+] Opening idx.decrypted for writing.

[+] Copying the not encrypted start of the file

[+] Dumping the decrypted data into the file

[+] Copying the not encrypted remainder of the file

[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset 4a08

[+] Closing original file

[+] Closing dump file

找到二進(jìn)制文件

zhaoxianshengde-iPhone:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents root# ls

TCSdkConfig.plist ?dumpdecrypted.dylib guide.zip ? ? ?loading.html

cache ? error.html idx.decrypted ?lsqTempDir

com.bugrpt.data ? ?guide info ? ? ? web

以.decrypted結(jié)尾的文件即為我們需要找的二進(jìn)制文件,上圖中idx.decrypted就是我砸殼完需要反編譯的二進(jìn)制文件。執(zhí)行到這一步,感動(dòng)哭,一開(kāi)始沒(méi)什么經(jīng)驗(yàn),做砸殼到這的時(shí)候確實(shí)踩了不少的坑。


9.復(fù)制二進(jìn)制文件

將二進(jìn)制文件拷貝至mac桌面,利用class_dump和hopper對(duì)二進(jìn)制文件進(jìn)行反編譯,

(注意:自ios8.3版本開(kāi)始,蘋(píng)果公司對(duì)應(yīng)用文件共享進(jìn)行了限制,簡(jiǎn)而言之就是舊版本的iTools等查看文件工具都看不了document文件下的內(nèi)容,這很悲催,二進(jìn)制文件拉不過(guò)來(lái),就沒(méi)有辦法進(jìn)行反編譯工作了)

這里還是挺折騰人的,沒(méi)有查看工具,該怎么復(fù)制呢?針對(duì)這個(gè)問(wèn)題,我在簡(jiǎn)書(shū)等進(jìn)行過(guò)相關(guān)的搜索,但一無(wú)所獲,大家都是用工具復(fù)制的,應(yīng)該是他們使用的測(cè)試機(jī)系統(tǒng)沒(méi)有超過(guò)8.3,所以才沒(méi)有我這種煩惱吧。我使用的查看工具有iTools、pp助手、iExplorer、iFunBox等,但都沒(méi)法查看到Docunments文件夾。后來(lái)終于找到了解決方法,思考通過(guò)mac終端直接將二進(jìn)制文件從手機(jī)復(fù)制至mac,但應(yīng)該是需要相關(guān)的ssh指令才行,我對(duì)這一塊并不是很熟悉,所以百度了一下“如何在linux系統(tǒng)下使用ssh進(jìn)行拷貝文件?”

good,黃天不負(fù)有心人,在終端敲一下試下,看到正在復(fù)制。。。淚流滿面,折騰了我挺久T.T

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp root@192.168.2.11:/var/mobile/Containers/Data/Application/1D0B6021-1DE0-4FF5-9515-38B769287E36/Documents/idx.decrypted /Users/zhaozhenbo/Desktop/idx/idd.decrypted

root@192.168.2.11's password:

idx.decrypted ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% ? 50MB ? 2.5MB/s ? 00:20

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$


10.反編譯

二進(jìn)制文件成功拿到,那么反編譯就不是問(wèn)題了,借助下面的兩個(gè)強(qiáng)大工具,可以輕松獲取整個(gè)app的h頭文件

i.探索class_dump工具的使用,簡(jiǎn)單點(diǎn)說(shuō)可以反編譯出項(xiàng)目中h文件聲明方法,用法十分簡(jiǎn)便,下面我舉個(gè)栗子??:

http://www.bubuko.com/infodetail-258073.html

ii.探索hopper工具的使用,反編譯二進(jìn)制文件,呈現(xiàn)的是一坨匯編代碼,點(diǎn)擊工具右上角按鈕,可以大致查看文件的內(nèi)容,用法簡(jiǎn)單,請(qǐng)自行嘗試,下載地址:

https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM



最后,在砸殼的過(guò)程中,借鑒了優(yōu)秀文章的經(jīng)驗(yàn),如(簡(jiǎn)書(shū)上作者藍(lán)月空谷寫(xiě)的

iOS逆向工程

如果文章有任何不足之處,歡迎補(bǔ)充糾正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • dumpdecrypted使用: dumpdecrypted 是個(gè)出色的app脫殼開(kāi)源工具,它的原理是:將應(yīng)用程序...
    Shuangquan閱讀 7,667評(píng)論 4 12
  • 1 MAC工具 1.1 class dump 利用OC runtime 特性 把Mach-O文件中的@inter...
    spades_K閱讀 959評(píng)論 0 2
  • 1、準(zhǔn)備工作:手機(jī)越獄 使用PP助手在windows環(huán)境下進(jìn)行越獄 給越獄的手機(jī)安裝openSSH,在cydia商...
    NI_Leo閱讀 500評(píng)論 0 2
  • 逆向工具集的安裝和使用 iOS 逆向工程的工具分類 檢查工具如:Reveal(界面分析工具)、tcpdump(抓包...
    Yochi閱讀 5,849評(píng)論 1 5
  • 砸殼 class-dump 搭建越獄開(kāi)發(fā)環(huán)境 Theos 配置越獄開(kāi)發(fā)調(diào)試的 iOS 設(shè)備 Theos 環(huán)境 動(dòng)態(tài)...
    ampire_dan閱讀 5,588評(píng)論 0 7