iOS逆向工程的探索與學習

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是如下內容)

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.dylibdumpdecrypted.o兩個文件,dumpdecrypted.dylib就是我們要造的錘子??,錘子在下面會用到,拷貝到桌面備份(提示:做好的錘子??是可以重復使用的,所以可以拷貝一份放好,不用每次都造錘子??)

make之后生成的文件

4.通過mac終端控制手機??

先前已經在越獄手機安裝了openSSH,現在可通過mac來控制手機??,需要確保的是mac跟手機處于同一個網段,并且需要知道手機的IP地址是多少,查看十分簡單,在手機連接wifi處點擊藍色感嘆號,進入即可看見對應IP地址(新手教程略啰嗦)

點擊藍色感嘆號,即可在彈出界面看到當前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



最后,在砸殼的過程中,借鑒了優秀文章的經驗,如(簡書上作者藍月空谷寫的

iOS逆向工程

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容