學習目標
這次學習須達到的目標有
SSH 訪問越獄機匯出二進位制檔案的標頭檔案搞一臺越獄機可以完美越獄的 iOS 版本只能 9.0.2 以下。最簡單的搞一臺越獄機就是在淘寶買一臺,越獄的 5C 大概 500~700 元,然後就可以開始玩逆向啦~當然也可以自己越獄,Checkra1n(A7-11)
SSH 訪問越獄機越獄好了之後,要用 Cydia 安裝更新軟體,如,OpenSSH, Terminal。
Cydia是一個讓使用者在越獄的iOS裝置上查詢和安裝各類軟體包,包括軟體、系統修改、主題和鈴聲等的軟體管理器。Cydia是高階包裝工具和dpkg的圖形介面前端,Cydia也是一個去中心化的軟體倉庫。大多數Cydia中的軟體包都是免費的,但也有很多收費程式通過類似App Store的Cydia Store銷售。Cydia上除了獨立的應用程式之外更多的包是iOS本身和應用程式的擴充套件、修改和主題。由於這些軟體包執行在越獄的裝置上,它們可以提供比普通執行在App Store中的應用程式更多的功能,包括在系統範圍上修改使用者介面,改變按鈕作用,提供更多的網路接入方式,以及其他對系統的改進。使用者安裝Cydia軟體一般是為了更加個性化,新增普通程式所無法提供的功能以及獲得root、直接訪問裝置的檔案系統和使用命令列工具,以便於開發。大多數Cydia中的軟體包都是由獨立開發者開發的。
用 Cydia 安裝 OpenSSHOpenSSH(OpenBSD Secure Shell)是使用SSH通過計算機網路加密通訊的實現。它是替換由SSH Communications Security所提供的商用版本的開放原始碼方案。目前OpenSSH是OpenBSD的子專案。Mac OS X 上已經安裝好 SSH 客戶端,僅需要利用 Cydia 在越獄裝置上安裝 OpenSSH,裝置安裝好 OpenSSH 之後,就可以在 Mac 上開啟 Terminal 訪問 iPhone 了。
SSH 連線越獄裝置確保 iPhone 和 Mac 在同一網域。比如,連線的相同 Wi-Fi。然後開啟網路設定,檢視 iPhone 的 IP 地址。如,10.12.67.32。在終端中輸入ssh root@10.12.67.32
這樣就可以遠端訪問 iPhone 了。連線裝置時需要輸入密碼,預設密碼都是 alpine如何檢視手機的 IP ? 開啟設定 -> Wi-Fi -> 點選當前連線的網路檢視詳情。
為了保證安全,最好修改越獄裝置的密碼
iPhone:~ root# passwdChanging password for root.New password:Retype new password:
但是!!!最重要的是!!!一定要記住自己修改的密碼!一定要記住自己修改的密碼!一定要記住自己修改的密碼!否則,就要修改 /private/etc/master.passwd 中的 root 密碼但是,沒有許可權還是改不了最終無奈還是乖乖 DFU 刷機再越獄。。。慘痛的教訓啊!!!
退出遠端連線在終端輸入下面的命令
exit
利用 class-dump 匯出標頭檔案
為什麼要匯出標頭檔案?我個人認為出於以下目的:
通過匯出標頭檔案,直觀地得到應用的類、方法等資料結構。通過匯出的類、方法等可以想象出軟體原有的結構。得到應用的方法後,可以在執行時進行呼叫。Mac 安裝 class-dumpclass-dump is a command-line utility for examining the Objective-C segment of Mach-O files.class-dump 是檢測 Mach-O 檔案 Objective-C 類的一個命令列工具。Google code 上的 class-dump-z 的版本已經失效了,但是,可以在 GayHub 上找到 class-dump 專案,下載地址 class-dump 。
下載 tar 包之後,在終端中輸入以下命令列,解壓 tar 包,並複製到 /usr/bin/ 目錄下。
$ tar -zxvf class-dump-3.5.tar.gz$ sudo cp class-dump-3.5/class-dump /usr/bin/
但是升級 OS X 10.11.6 版本及以上之後會報以下錯誤:
csrutil disablecsrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
這是由於 Apple 為了防止安裝惡意軟體,將這個許可權關閉了。開啟該許可權,需要重啟 Mac ,並在聽到開機提示聲後按住 Command + R 鍵,在 Utilities 下拉選單中找到 Terminal 選項,開啟並輸入以下命令。
csrutil disablereboot
(原連結)[http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac-os-x/]
系統重啟成功後,再將 class-dump 重新複製到 /usr/bin/ 目錄下,就能直接使用了。其實,也可以直接在 iPhone 上安裝 class-dump (iOS 也是 Darwin 核心的類 UNIX 機子嘛~),但是用 iPhone 匯出標頭檔案實在麻煩,所以直接在 Mac 上安裝好 class-dump ,然後得到應用的二進位制檔案之後,利用 scp 推送到 Mac 上,就可以在 Mac 上直接匯出標頭檔案了。以上便是在 Mac 上安裝 class-dump 的過程,接下來看看如何獲得越獄裝置上的應用二進位制檔案。
獲得二進位制可執行檔案越獄機安裝 ClutchClutch is a high-speed iOS decryption tool. Clutch supports the iPhone, iPod Touch, and iPad as well as all iOS version, architecture types, and most binaries. Clutch is meant only for educational purposes and security research.Clutch 是 iOS 的一款高速解密工具。這個工具在 GitHub 上是開源的,Release 下載地址。
加密和解密為什麼要使用 Clutch?使用者在 AppStore 上下載安裝的應用軟體,都是經過加密的。在正向開發的時候,需要進行 code sign,即程式碼簽名,那麼我們就需要申請一個蘋果的授權證書。而該證書是被蘋果 Certificate Authority 簽過名的合法的證書。申請這個證書就需要在開發的 Mac 上生成 CertificateSigningRequest.certSigningRequest 檔案,該檔案申請者資訊(此資訊是用申請者的私鑰加密的)、申請者公鑰(此資訊是申請者使用的私鑰對應的公鑰)、摘要演算法和公鑰加密演算法。那麼,當代碼在開發者的 Mac 上編譯打包之後就會利用 Mac 上的私鑰進行加密,然後利用上傳的 CSR 檔案中的公鑰進行解密。RSA 的應用場景還有很多,比如,支付寶的支付簽名也是利用 RSA 進行加密的。(以上內容,如有錯誤,敬請指正,共同進步)因此,如果要得到應用可執行檔案的標頭檔案,必須先對應用進行解密,這是就需要用 Clutch 工具來對應用的可執行檔案進行解密,即所謂的砸殼。但是,越獄機上並不是所有的軟體都來源於 App Store ,比如“91助手”之類的軟體下載的應用,可以直接利用 class-dump 匯出標頭檔案,因為在這種應用市場上下載的應用已經進行過解密了。
連線裝置並解密軟體重複上一節的內容,先利用 SHH 連線裝置。下載 Clutch 最新的釋出版,並利用 scp 傳送到越獄機上。如,IP 地址是 10.12.67.32。(/usr/bin/ 目錄是符合 UNIX 標準目錄的二進位制檔案儲存目錄,命令工具一般儲存在該目錄。詳細可看《今天開始學核心》系列文章)scp Clutch root@10.12.67.32:/usr/bin/
測試是否安裝成功,檢視 Clutch 的版本號。
Clutch --version
安裝成功,檢視有哪些需要解密的檔案。
NY:~ root# Clutch -iInstalled apps:1: WeChat <com.tencent.xin>2: QQ <com.tencent.mqq>3: 愛思助手 <com.i4.picture>4: 支付寶 - 讓生活更簡單 <com.alipay.iphoneclient>5: QQ音樂-聽歌K歌FM電臺,免費下載海量音樂播放器 <com.tencent.QQMusic>6: 愛思助手 <com.diary.mood>7: 天氣 <com.moji.MojiWeather>8: 中華萬年曆-日曆,黃曆,天氣預報,節日,星座,生日提醒 <cn.etouch.ecalendar>
對支付寶解密
Clutch Usage: Clutch [OPTIONS]-b --binary-dump <value> Only dump binary files from specified bundleID -d --dump <value> Dump specified bundleID into .ipa file -i --print-installed Print installed applications --clean Clean /var/tmp/clutch directory --version Display version and exit -? --help Display this help and exit -n --no-color Print with colors disabled
可以看到 Clutch 的使用說明,如果要活得解密的二進位制檔案,則用 -b 或 –binary-dump 。
那麼根據之前得到的支付寶的序號開始進行解密:
NY:~ root# Clutch -b 4com.alipay.iphoneclient contains watchOS 2 compatible application. It's not possible to dump watchOS 2 apps with Clutch 2.0.4 at this moment.ASLR slide: 0x91000Dumping <APTodayWidget> (armv7)Patched cryptid (32bit segment)Writing new checksumDumping <APIJKPlayer> armv7Successfully dumped framework APIJKPlayer!Dumping <AlipayWallet> (armv7)Patched cryptid (32bit segment)Writing new checksumFinished dumping com.alipay.iphoneclient to /var/tmp/clutch/D432F744-A53A-46FB-BE3C-D3891BCB827AFinished dumping com.alipay.iphoneclient in 151.0 seconds
得到解密之後的包儲存位置:/var/tmp/clutch/D432F744-A53A-46FB-BE3C-D3891BCB827A進入目錄 /var/tmp/clutch/D432F744-A53A-46FB-BE3C-D3891BCB827A/com.alipay.iphoneclient/ 找到 AlipayWallet 的二進位制檔案,並利用 scp 傳送到 Mac 上。
scp AlipayWallet niyao@10.12.67.12:/Users/niyao/N.Yhttps://niyaoyao.github.io/Reverse
至此,對二進位制檔案的解密過程就結束了,接下來在看一下標頭檔案的匯出過程。
匯出標頭檔案在 Mac 上進入 AlipayWallet 儲存的位置,並輸入以下命令列。
class-dump AlipayWallet > AlipayWallet_class_dump.h
最後,就可在目錄中開啟 txt 檔案,並看到道出的標頭檔案的類、屬性、方法等內容了。那匯出的標頭檔案有什麼具體的作用將在下一篇文章《今天開始學逆向:用 Cycript 進行執行時分析及應用操作》中介紹。
小結本篇文章主要學習了以下內容:
如何得到一臺越獄機。這是學習 OS X 和 iOS 核心以及 iOS 逆向的前提。利用 SSH 連線越獄裝置。在越獄裝置上安裝 Cluth,並對加密後的應用進行解密。在 Mac OS X 上安裝 class-dump,並利用 class-dump 匯出可執行檔案的標頭檔案。