1.砸殼前的準備
一臺越獄iphone??,根據以往經驗,測試用的手機永遠不要緊跟潮流升級系統,在越獄手機中打開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
至此,基本的準備已達成,可繼續以下操作步驟
2.砸殼工具dumpdecrypted的使用
設置Makefile中的SDK字段和越獄設備系統版本一致,打開你下載dumpdecrypted的文件夾,接著打開Makefile文件(之前誤以為雙擊打開就行,結果一直默認黑盒子打開,查看不了內容,原因是工具使用錯了,那么就搜索相關打開工具吧,可以使用的工具有多種,這里提供一種打開免費工具,sublime,自行下載,打開Makefile是如下內容)
在蘋果終端輸入
xcrun --sdk iphoneos --show-sdk-path
會顯示出當前xcode的sdk版本
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk
可見我當前默認的使用版本是iPhondeOS9.0版本,這個跟我的手機系統版本剛好符合,則Makefile中的SDK=‘xcrun --sdk iphoneos --show-sdk-path’不用作修改,但比方說你的手機是8.4的版本,那么此處xcode的sdk版本就應當是xcode6.4(iPhoneOS8.4),老舊xcode版本可在下方鏈接下載。
注意,如果你電腦原本安裝xcode,保存兩者時,第二個xcode會顯示為xcode 2,此時在mac終端輸入xcrun --sdk iphoneos --show-sdk-path,顯示的對應iPhoneOS版本依舊會跟手機的版本不符,可將原有xcode名稱先修改為xcode3(3為任意數字,只是為了跟新下載的版本區分開名字),再將新下載的xcode 2重命名為xcode(一旦造好錘子??,或者砸殼完畢之后可將文件名修改過來,避免影響mac上相關程序的使用,切記切記)
老舊xcode版本的下載
https://developer.apple.com/downloads/index.action
3.造錘子??
完成上述操作之后,在mac終端cd進你下載dumpdecrypted的路徑,緊接著輸入make指令,可看到在該文件目錄下會多處dumpdecrypted.dylib和dumpdecrypted.o兩個文件,dumpdecrypted.dylib就是我們要造的錘子??,錘子在下面會用到,拷貝到桌面備份(提示:做好的錘子??是可以重復使用的,所以可以拷貝一份放好,不用每次都造錘子??)
4.通過mac終端控制手機??
先前已經在越獄手機安裝了openSSH,現在可通過mac來控制手機??,需要確保的是mac跟手機處于同一個網段,并且需要知道手機的IP地址是多少,查看十分簡單,在手機連接wifi處點擊藍色感嘆號,進入即可看見對應IP地址(新手教程略啰嗦)
接下來在終端輸入ssh root@你的手機IP地址,在彈出來需要輸入password時輸入alpine默認密碼(T.T,新手踩過的一個坑,一直以為是我mac的密碼,折騰了許久,賤笑了各位),出現如下圖情況即為連接手機??成功。
zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ ssh root@192.168.2.11
root@192.168.2.11's password:
zhaoxianshengde-iPhone:~
5.尋找反編譯app文件路徑
ok,接著在越獄的手機上找到你要反編譯的app的文件路徑,為了避免影響,最好只運行你要砸殼的app,在mac終端輸入ps -e,終端會顯示運行app的文件路徑(為方便找到你想找的目錄,也可將ps -e指令,替換成ps -e | grep var這樣終端顯示的路徑會更少,可自行測試相關指令的使用)
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叫愛定客,所以終端中顯示的/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/'即為所得,沒有多余的“//”
7.將步驟3.造錘子??中的錘子放入到上述獲得的Documents目錄下
(執行的指令為“scp 錘子路徑 root@你的ip地址:反編譯app路徑”,注意中間的空格,為防止各位嘗試出錯,可直接復制后做相應替換即可,password依舊是alpine)
zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp /Users/zhaozhenbo/Desktop/逆向學習/砸殼工具/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.砸~殼
來到最激動人心的時候了,錘子已經放好,那么就開始砸吧(先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
找到二進制文件
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結尾的文件即為我們需要找的二進制文件,上圖中idx.decrypted就是我砸殼完需要反編譯的二進制文件。執行到這一步,感動哭,一開始沒什么經驗,做砸殼到這的時候確實踩了不少的坑。
9.復制二進制文件
將二進制文件拷貝至mac桌面,利用class_dump和hopper對二進制文件進行反編譯,
(注意:自ios8.3版本開始,蘋果公司對應用文件共享進行了限制,簡而言之就是舊版本的iTools等查看文件工具都看不了document文件下的內容,這很悲催,二進制文件拉不過來,就沒有辦法進行反編譯工作了)
這里還是挺折騰人的,沒有查看工具,該怎么復制呢?針對這個問題,我在簡書等進行過相關的搜索,但一無所獲,大家都是用工具復制的,應該是他們使用的測試機系統沒有超過8.3,所以才沒有我這種煩惱吧。我使用的查看工具有iTools、pp助手、iExplorer、iFunBox等,但都沒法查看到Docunments文件夾。后來終于找到了解決方法,思考通過mac終端直接將二進制文件從手機復制至mac,但應該是需要相關的ssh指令才行,我對這一塊并不是很熟悉,所以百度了一下“如何在linux系統下使用ssh進行拷貝文件?”
good,黃天不負有心人,在終端敲一下試下,看到正在復制。。。淚流滿面,折騰了我挺久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.反編譯
二進制文件成功拿到,那么反編譯就不是問題了,借助下面的兩個強大工具,可以輕松獲取整個app的h頭文件
i.探索class_dump工具的使用,簡單點說可以反編譯出項目中h文件聲明方法,用法十分簡便,下面我舉個栗子??:
http://www.bubuko.com/infodetail-258073.html
ii.探索hopper工具的使用,反編譯二進制文件,呈現的是一坨匯編代碼,點擊工具右上角按鈕,可以大致查看文件的內容,用法簡單,請自行嘗試,下載地址:
https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM
最后,在砸殼的過程中,借鑒了優秀文章的經驗,如(簡書上作者藍月空谷寫的
如果文章有任何不足之處,歡迎補充糾正