iOS逆向系列:
1捞烟、iOS 逆向開發(fā)(一)界面分析 - Cycript&Reveal
2产阱、iOS 逆向開發(fā)(二)砸殼/脫殼-Clutch惕虑、dumpdecrypted
3庇忌、iOS 逆向開發(fā)(三)代碼分析-dump-class/Hopper Disassmbler
逆向前的準備:
- 可越獄的手機
可通過愛思助手進行越獄义屏,暫時只支持iOS12以下設備靠汁。 - 通過Cydia(越獄成功后產(chǎn)生)安裝以下插件
- Apple File Conduit "2"(可以訪問整個iOS設備的文件系統(tǒng))
- iFile (類似安卓系統(tǒng)的文件夾管理器)
- OpenSSH(電腦遠程登錄iPhone)
- Cycript (調(diào)試iPhone正在運行的App)
Cydia安裝軟件方法可自行百度,這里就不多講了闽铐。
- 電腦安裝iFunBox
1蝶怔、Cycript
Cycript是Objective-C、JavaScript和Java等語法的混合物兄墅,可以用來探索踢星、修改、調(diào)試正在運行的Mac/iOS App
使用OpenSSH遠程登錄手機
- 需要手機和Mac處于同一局域網(wǎng)
- 在Mac終端輸入ssh 用戶名@服務器主機地址
2.1.用戶名: iPhone默認有兩個用戶(root/mobile)隙咸,root最高權限用戶沐悦,mobile普通權限用戶,這里用root賬戶登錄
2.2. 服務器主機地址:這里的服務器就是越獄的iPhone手機五督,從連接的wifi網(wǎng)絡詳情里查看IP地址
2.3. 初始密碼alpine
2.4.exit
退出登錄
通過USB進行SSH登錄
- 下載usbmuxd工具包
- 將iPhone的22端口(默認ssh通信端口)映射到任意非保留 端口:
cd 下載路徑/usbmuxd-1.0.8/python-client
python tcpreplay.py -t 22:10010
-
保持當前頁面,另開一個終端頁藏否,
ssh root@localhost -p 10010
usb登錄比wifi遠程登錄要快很多,所以推薦usb登錄
ssh密鑰認證:
因為每次ssh登錄都要輸入密碼比較麻煩概荷,所以通過密鑰認證秕岛,達到不需要輸入密碼的效果.
- 電腦在終端輸入:
ssh-keygen
,一路回車即可误证。 -
ssh-copy-id root@服務器ip
继薛,輸入密碼即可。
Cycript相關操作
- 打開想要調(diào)試的app,
ps -A
找到要調(diào)試的進程,由于此命令輸出的內(nèi)容比較多愈捅,不容易查找可以 通過ps -A|grep /var/mobile/Containers/Bundle/Application
查找
-
開啟cycript:
cycript -p 進程ID
或者cycript -p 進程名稱
進程ID會變
- cycript 語法:
- UIApp 相當于[UIApplication shareApplication]
-
#內(nèi)存地址
訪問對象:eg:獲取喜馬拉雅根控制器
- 定義變量:
var 變量名 = 變量值
- 加載已加載類
ObjectiveC.class
- 查看某對象的所有成員變量
*對象
- 遞歸打印view的所有子控件:
view.recursiveDescription().toString()
- 篩選出某種類型的對象:
choose(UIViewController)
eg:將喜馬拉雅登錄頁面里的登錄按鈕隱藏
實現(xiàn)步驟:查看已加載的所有UIViewController
: choose(UIViewController)
發(fā)現(xiàn)
XMALoginViewController
是登錄界面的控制器#0x140e0bf60.view.recursiveDescription().toString()
查看當前登錄界面所有View視圖遏考,通過搜索\u767b\u5f55
("登錄"的UTF-8編碼形式),定位到XMALoginButton
,[#0x140e04600 removeFromSuperview]
刪除按鈕-
模塊封裝
通過以上步驟是不是發(fā)現(xiàn)每次操作比較麻煩,是不是可以通過封裝成各種方法直接調(diào)用會比較方便蓝谨,答案是肯定的灌具。我們可以將經(jīng)常用的方法放在一個.py
文件中,將.py文件放在iPhone的/usr/lib/cycript0.9
目錄下
.py
文件格式:假設叫 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是能夠在運行時查看app視圖層級
- Mac安裝Reveal咖楣,Reveal4破解版下載 提取碼: 8n1r
- iPhone在
Cydia
安裝搜索Reveal Loader
,然后點擊安裝
- 在設置中找到
Reveal
-->Enabled Applications
-->開啟要查看的視圖層級結構的app
- 打開Mac安裝的
Reveal
,點擊Help找到RevealServer
文件,通過iFunBox將文件拷貝到/Library/RHRevealLoader/RevealServer
芦昔,然后重啟手機诱贿。
- 打開要查看的App,
Reveal
檢測會檢測到正在打開的app,然后點擊查看珠十。就可以看到上面的效果圖了料扰。