一、Cycript簡(jiǎn)介
Cycript允許開(kāi)發(fā)者在iOS或Mac OS X上使用objective - c++和JavaScript語(yǔ)法的混合,通過(guò)具有語(yǔ)法高亮和tab補(bǔ)全功能的交互式控制臺(tái)來(lái)探索和修改正在運(yùn)行的應(yīng)用程序。(它也可以在Android和Linux上獨(dú)立運(yùn)行,并提供對(duì)Java的訪問(wèn),但不需要注入。) 更多官網(wǎng)介紹:http://www.cycript.org

圖1:Cycript簡(jiǎn)介.png
通過(guò)Cydia安裝Cycript,即可在iPhone上調(diào)試運(yùn)行中的APP。同時(shí)也需要安裝adv-cmds,ps命名有用到。

圖2:安裝Cycript.png
二、Cycript使用
以在“豆瓣”app上添加一個(gè)紅色view為例
圖5:添加紅色視圖.PNG
1、Mac連接手機(jī)
可參考文章:iOS逆向之SSH:Mac遠(yuǎn)程登錄iPhone
2、查看進(jìn)程
- 首先確保已在Cydia安裝了adv-cmds
- ps命令是process status的縮寫(xiě),使用ps命令可以列出系統(tǒng)當(dāng)前的進(jìn)程
- 列出所有的進(jìn)程
ps –A或ps aux - 搜索關(guān)鍵詞
ps –A | grep 關(guān)鍵詞或ps aux | grep 關(guān)鍵詞

圖3:查看進(jìn)程.png
其中“Frodo”是豆瓣app的進(jìn)程名
3、Cycript的開(kāi)啟和關(guān)閉
- 開(kāi)啟:
cycript -p 進(jìn)程ID或cycript -p 進(jìn)程名稱(chēng) - 取消輸入:
Ctrl + C - 退出:
Ctrl + D - 清屏:
Command + R

圖4:Cycript的開(kāi)啟和關(guān)閉.png
其中顯示cy# 說(shuō)明已經(jīng)進(jìn)入該運(yùn)行的程序了
4、常用語(yǔ)法
- 獲取根控制器
[UIApplication sharedApplication].keyWindow.rootViewController - 創(chuàng)建view,并賦值給變量redView
var redView = [[UIView alloc] init]; - 設(shè)置redViewd的背景色為紅色
#0x130c11920.backgroundColor = [UIColor redColor],其中0x130c11920為redview的內(nèi)存地址 - 設(shè)置redViewd的frame
#0x130c11920.frame = (100,100,150,200),其中0x130c11920為redview的內(nèi)存地址 - 根控制添加紅色視圖,
[#0x130a2cea0.view addSubview:#0x130c11920],其中0x130a2cea0是根控制器的地址

圖6:常用語(yǔ)法.png
執(zhí)行后的效果,如上圖圖5所示。
三、Cycript文件庫(kù)
我們可以將常用的Cycript代碼封裝在一個(gè).cy文件中,如封裝好的mjcript.cy文件,下載地址:https://github.com/CoderMJLee/mjcript
- 下載
mjcript.cy文件,或者自己編寫(xiě).cy文件 - 將
.cy文件存放到/usr/lib/cycript0.9目錄下 - 在
Cycript中引用.cy文件,并使用它提供的接口 - 引用命令
@import mjcript,如獲取當(dāng)前控制器接口MJFrontVc()

圖7:Cycript文件庫(kù).png
四、實(shí)戰(zhàn)小練習(xí)
- 進(jìn)入“豆瓣”app,導(dǎo)入
mjcript.cy文件,`@import mjcript - 查看當(dāng)前控制器,
MJFrontVc() - 遞歸打印view的層級(jí)結(jié)構(gòu),
MJSubviews() - 通過(guò)python中,print指令,翻譯UTF-8各式文本
- 找到對(duì)應(yīng)的按鈕,修改其文案

圖8:實(shí)戰(zhàn)小練習(xí).png

圖9:修改文案實(shí)例.png