概述
Cycript 是Objective-C++、ES(JavaScript)、Java等語法的混合物。
可以用來探索、修改、調試正在運行的Mac\iOS App。
通過Cydia安裝Cycript,即可在iPhone上調試運行中的APP。
Cycript基本使用
開啟
cycript
退出
ctrl + D
清屏
commond + R
調試App
cycript -p 進程ID
cycript -p 進程名稱
要獲取iPhone安裝app進程ID,首先需要安裝adv-cmds插件。執行ps -A
指令。 可以通過ps -A | grep 關鍵詞
快查找。
如果想通過ps -A命令找到某個App的進程ID,一定先保證該App運行。
cycript常見語法
獲取應用的程序的IUApplication
UIApp
定義變量
var 變量名 = 變量值
用內存地址訪問對象
#內存地址
獲取App所有的類
ObjectiveC.classes
查看對象的所有成員變量
*對象
遞歸打印View的所有子空間(跟LLDB一樣的函數)
view.recursiveDescription().toString()
獲取當前頁面的所有控制器
choose(UIViewController)
mjcript框架
第三方框架mjcript對於常用的一些語法的封裝更好的幫助我們調試
常用的方法
MJClassMethodNames(對象) // 獲取一個對象所有的類方法
MJInstanceMethodNames(對象) // 獲取一個對象的所有對象方法
MJFrontVc() // 當前控制器
MJAppId // BoundID
MJAppPath // App安裝路徑
MJCachesPath // 沙盒路徑
MJSubviews(view) // 遞歸View的子view
MJRectMake(0, 0, 100, 200) // 創建CGRect
查找某個控件:可以通過MJSubviews控制器的view,然后根據屬性進行定位比如UIButton的lable的text。但是中文文本在終端顯示的Unicode編碼。這個時候我們可以使用終端利用Python獲取中文的Unicode編碼再去搜索。
Cycript庫的封裝
封裝Cycript文件
對於一些經常使用的代碼我們可以將其封裝在一個.cy文件中。
編寫一個簡單的test.cy文件。
exports參數是固定寫法,用於向外提供接口。JS語法。
將編譯寫test.cy存放到手機目錄/usr/lib/cycript0.9
。可以直接鼠標拖拽方式也可以使用下面的命令拷貝方式
// 先開啟端口映射
python tcprelay.py -t 22:10086
// 將Mac目錄的test.cy 拷貝到IPhone的對應目錄
scp -P 10086 test.cy root@localhost:/usr/lib/cycript0.9
通過Cycript進入調試某個App中。首先導入該cycript庫。
調用調用庫中的方法,庫文件名.方法名() 庫文件名.變量名
全局函數
對於上面通過exports方式的定義的函數都是私有函數,exports賦值給本文件對象,調用時通過文名調用。可以定義全局函數直接通過類名調用。
注意對於可變的一定使用函數獲取,對於固定的值可以使用變量獲取。因為腳本從上到下執行變量執行過后就是固定值。函數是當被調用的時候內部代碼才回去執行,並且每次調用都是實時獲取的。