目錄
運(yùn)行環(huán)境
2022年9月
MBP M1 macOS Monterey 12.4
iPhone 8 iOS 14.2
Human Proficient in iOS & Cycript development
控臺(tái)環(huán)境
環(huán)境 | 提示符 |
---|---|
#iPhone | Toki-iPhone: root# command |
#cycript | cy# command |
安裝目標(biāo)App
本文以學(xué)習(xí)為目的钧汹,目標(biāo)App不宜用他人商業(yè)作品,也不宜邏輯復(fù)雜录择,所以我自己準(zhǔn)備了一個(gè)簡(jiǎn)單的受害者 TKVictim拔莱。
下載后在已越獄的iPhone上運(yùn)行該App。
該App模擬了一個(gè)怪怪的密碼鎖隘竭,可以通過(guò)查看遠(yuǎn)碼的CodedLock
類來(lái)了解它的解鎖邏輯塘秦。
該App存在如下兩種狀態(tài),本文的目的就是通過(guò)Cycript實(shí)現(xiàn)解鎖功能动看。
上鎖
|
解鎖
|
---|
安裝 Cycript
Cycript官網(wǎng) http://www.cycript.org/
- 打開(kāi) Sileo尊剔,在搜索Tab中搜索 Cycript (by Jay Freeman (saurik))。
- 點(diǎn)擊 Cycript 條目進(jìn)入詳情頁(yè)菱皆,點(diǎn)擊獲取须误,將其加入隊(duì)列。
- 點(diǎn)擊底部隊(duì)列進(jìn)入隊(duì)列界面仇轻,隊(duì)列中會(huì)同時(shí)添加Cycript的依賴項(xiàng)霹期,點(diǎn)擊確認(rèn)開(kāi)始執(zhí)行隊(duì)列,等待安裝完成拯田。
查詢目標(biāo)App的進(jìn)程
關(guān)閉iPhone內(nèi)目標(biāo)App以外的所有App历造,確保iPhone的多任務(wù)處理界面只有目標(biāo)App進(jìn)程。(* " /var/……" 前面有一個(gè)空格船庇,用以區(qū)分 "/private/var/……" 相關(guān)的進(jìn)程*)
Toki-iPhone: root# ps -e | grep " /var/containers/Bundle/Application"
5434 ?? 0:00.15 /var/containers/Bundle/Application/15BD55A8-E850-46B0-82A9-1AC4B210C6FF/TKVictim.app/TKVictim
5480 ttys000 0:00.01 grep /var/containers/Bundle/Application
通過(guò)cycript注入進(jìn)程
Toki-iPhone: root# cycript -p 5434
cy# |
對(duì)App執(zhí)行動(dòng)態(tài)操作
本文不討論代碼解析相關(guān)內(nèi)容吭产,假設(shè)我們已經(jīng)破譯了項(xiàng)目的全部代碼。
1. 直接調(diào)用現(xiàn)有函數(shù)
- 現(xiàn)在查看項(xiàng)目源碼鸭轮,我們可以了解到根控制器已存在
unlocked
函數(shù)臣淤,現(xiàn)在直接調(diào)用這個(gè)函數(shù)即可直接解鎖。
cy# [[UIApp keyWindow].rootViewController unlocked];
2. 用Swilling技巧修改現(xiàn)有函數(shù)
這里不必通過(guò)runtime去實(shí)現(xiàn)修改窃爷,可以使用Cycript提供的函數(shù)賦值方式修改邑蒋。
- 所有實(shí)例都有prototype屬性姓蜂,可以通過(guò)
instance.prototype['_selector_name_'] = function () {}
的方式修改其函數(shù)實(shí)現(xiàn)邏輯。
cy# ViewController.prototype['unlock:'] = function(id) { this.unlocked(); }
- class也是一個(gè)實(shí)例医吊,可以通過(guò)
_class_name_->isa
的方式獲取钱慢。
cy# CodedLock->isa.prototype['unlock:'] = function(long) { return 1; }
補(bǔ)充說(shuō)明
- 本文只是拋磚引玉,需要實(shí)現(xiàn)更多功能還需要自身對(duì)iOS研發(fā)和Cycript有更多理解卿堂。
- Cycript不止可以通過(guò)命令行方式執(zhí)行束莫,也可以編寫(xiě) x.cy 腳本,下篇文章中會(huì)說(shuō)到草描。