iOS逆向系列:
1、iOS 逆向開發(fā)(一)界面分析 - Cycript&Reveal
2、iOS 逆向開發(fā)(二)砸殼/脫殼-Clutch、dumpdecrypted
3、iOS 逆向開發(fā)(三)代碼分析-dump-class/Hopper Disassmbler
逆向前的準(zhǔn)備:
- 可越獄的手機(jī)
可通過愛思助手進(jìn)行越獄,暫時只支持iOS12以下設(shè)備。 - 通過Cydia(越獄成功后產(chǎn)生)安裝以下插件
- Apple File Conduit "2"(可以訪問整個iOS設(shè)備的文件系統(tǒng))
- iFile (類似安卓系統(tǒng)的文件夾管理器)
- OpenSSH(電腦遠(yuǎn)程登錄iPhone)
- Cycript (調(diào)試iPhone正在運(yùn)行的App)
Cydia安裝軟件方法可自行百度,這里就不多講了。
- 電腦安裝iFunBox
1、Cycript
Cycript是Objective-C、JavaScript和Java等語法的混合物,可以用來探索、修改、調(diào)試正在運(yùn)行的Mac/iOS App
使用OpenSSH遠(yuǎn)程登錄手機(jī)
- 需要手機(jī)和Mac處于同一局域網(wǎng)
- 在Mac終端輸入ssh 用戶名@服務(wù)器主機(jī)地址
2.1.用戶名: iPhone默認(rèn)有兩個用戶(root/mobile),root最高權(quán)限用戶,mobile普通權(quán)限用戶,這里用root賬戶登錄
2.2. 服務(wù)器主機(jī)地址:這里的服務(wù)器就是越獄的iPhone手機(jī),從連接的wifi網(wǎng)絡(luò)詳情里查看IP地址
2.3. 初始密碼alpine
2.4.exit退出登錄
登錄成功
通過USB進(jìn)行SSH登錄
- 下載usbmuxd工具包
- 將iPhone的22端口(默認(rèn)ssh通信端口)映射到任意非保留 端口:
cd 下載路徑/usbmuxd-1.0.8/python-client
python tcpreplay.py -t 22:10010

映射成功
-
保持當(dāng)前頁面,另開一個終端頁,
ssh root@localhost -p 10010
登錄成功
usb登錄比wifi遠(yuǎn)程登錄要快很多,所以推薦usb登錄
ssh密鑰認(rèn)證:
因?yàn)槊看蝧sh登錄都要輸入密碼比較麻煩,所以通過密鑰認(rèn)證,達(dá)到不需要輸入密碼的效果.
- 電腦在終端輸入:
ssh-keygen,一路回車即可。 -
ssh-copy-id root@服務(wù)器ip,輸入密碼即可。
Cycript相關(guān)操作
- 打開想要調(diào)試的app,
ps -A找到要調(diào)試的進(jìn)程,由于此命令輸出的內(nèi)容比較多,不容易查找可以 通過ps -A|grep /var/mobile/Containers/Bundle/Application查找
進(jìn)程 -
開啟cycript:
cycript -p 進(jìn)程ID或者cycript -p 進(jìn)程名稱進(jìn)程ID會變
連接喜馬拉雅 - cycript 語法:
- UIApp 相當(dāng)于[UIApplication shareApplication]
-
#內(nèi)存地址訪問對象:eg:獲取喜馬拉雅根控制器
喜馬拉雅根控制器 - 定義變量:
var 變量名 = 變量值 - 加載已加載類
ObjectiveC.class - 查看某對象的所有成員變量
*對象 - 遞歸打印view的所有子控件:
view.recursiveDescription().toString() - 篩選出某種類型的對象:
choose(UIViewController)
eg:將喜馬拉雅登錄頁面里的登錄按鈕隱藏

效果前后對比
實(shí)現(xiàn)步驟:查看已加載的所有UIViewController : choose(UIViewController)

發(fā)現(xiàn)
XMALoginViewController是登錄界面的控制器#0x140e0bf60.view.recursiveDescription().toString()查看當(dāng)前登錄界面所有View視圖,通過搜索\u767b\u5f55("登錄"的UTF-8編碼形式),定位到XMALoginButton,[#0x140e04600 removeFromSuperview]刪除按鈕
-
模塊封裝
通過以上步驟是不是發(fā)現(xiàn)每次操作比較麻煩,是不是可以通過封裝成各種方法直接調(diào)用會比較方便,答案是肯定的。我們可以將經(jīng)常用的方法放在一個.py文件中,將.py文件放在iPhone的/usr/lib/cycript0.9目錄下
.py文件格式:假設(shè)叫 test.cy
(function(exports) {
// bundle ID
AppId = NSBundle.mainBundle.bundleIdentifier;
//根控制器
RootVC = function() {
return [UIApplication sharedApplication].keyWindow.rootViewController;
};
})(exports);
使用:
cy# @import test
{}
cy# AppId
@"com.gemd.iting"
cy# RootVC()
#"<XMMainTabBarController: 0x13f968200>"
推薦一個比較好的腳本文件,包含獲取最上層控制器等非常好用的方法

2、Reveal
Reveal是能夠在運(yùn)行時查看app視圖層級

效果圖
- Mac安裝Reveal,Reveal4破解版下載 提取碼: 8n1r
- iPhone在
Cydia安裝搜索Reveal Loader,然后點(diǎn)擊安裝
- 在設(shè)置中找到
Reveal-->Enabled Applications-->開啟要查看的視圖層級結(jié)構(gòu)的app
- 打開Mac安裝的
Reveal,點(diǎn)擊Help找到RevealServer文件,通過iFunBox將文件拷貝到/Library/RHRevealLoader/RevealServer,然后重啟手機(jī)。
- 打開要查看的App,
Reveal檢測會檢測到正在打開的app,然后點(diǎn)擊查看。就可以看到上面的效果圖了。








