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)容)
在蘋(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.dylib和dumpdecrypted.o兩個(gè)文件,dumpdecrypted.dylib就是我們要造的錘子??,錘子在下面會(huì)用到,拷貝到桌面?zhèn)浞?b>(提示:做好的錘子??是可以重復(fù)使用的,所以可以拷貝一份放好,不用每次都造錘子??)
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地址(新手教程略啰嗦)
接下來(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ě)的
如果文章有任何不足之處,歡迎補(bǔ)充糾正