Cycript簡(jiǎn)介
Cycript是Objective-C++、ES6(JavaScript)禀崖、Java等語(yǔ)法的混合物
可以用來(lái)探索、修改、調(diào)試正在運(yùn)行的Mac\iOS APP
通過(guò)Cydia安裝Cycript汰规,即可在iPhone上調(diào)試運(yùn)行中的APP
官網(wǎng): http://www.cycript.org/
文檔: http://www.cycript.org/manual/
Tricks:http://iphonedevwiki.net/index.php/Cycript_Tricks
Github工具
https://github.com/CoderMJLee/mjcript
https://github.com/Tyilo/cycript-utils
https://github.com/limneos/weak_classdump
輔助工具
1、ps命令
安裝adv-cmds
ps命令是process status的縮寫(xiě)物邑,使用ps命令可以列出系統(tǒng)當(dāng)前的進(jìn)程
通過(guò)ps命令獲取正在運(yùn)行的進(jìn)程ID和進(jìn)程名稱(chēng)
-
列出所有的進(jìn)程
ps –A
或ps aux
-
搜索關(guān)鍵詞
ps –A | grep 關(guān)鍵詞
2溜哮、利用python打印字符
cy# python
Python 2.7.16 (default, May 8 2019, 10:58:04)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> unicode('中文','UTF-8')
u'\u4e2d\u6587'
>>> print u'\u4e2d\u6587'
中文
Cycript語(yǔ)法
-
進(jìn)入Cycript環(huán)境
cycript -p 進(jìn)程ID
或cycript -p 進(jìn)程名稱(chēng)
常用語(yǔ)法
cy# UIApp
cy# [UIApplication sharedApplication]
定義變量 var 變量名 = 變量值
cy# var shareApp = [UIApplication sharedApplication]
用內(nèi)存地址獲取對(duì)象 #內(nèi)存地址
cy# 0x123456789
查看已加載的所有OC類(lèi)
cy# ObjectiveC.classes
查看對(duì)象的所有成員變量 *對(duì)象
cy# *UIApp
遞歸打印view的所有子控件(跟LLDB一樣的函數(shù))
cy# view.recursiveDescription().toString()
篩選出某種類(lèi)型的對(duì)象
cy# choose(UIViewController)
cy# choose(UITableViewCell)
封裝Cycript腳本
我們可以將常用的Cycript代碼封裝在一個(gè).cy
文件中
exports
參數(shù)名固定,用于向外提供接口
1色解、新建一個(gè)myCript.cy
文件茂嗓,命名隨意
用編輯器比如Sublime Text進(jìn)行編輯,然后保存
(function(exports) {
AppPath = [NSBundle mainBundle].bundlePath;
keyWin = function() {
return UIApp.keyWindow;
};
})(exports);
2科阎、將myCript.cy文件拖到iphone/Device/usr/lib/cycript9.0/
述吸,可使用iFunBox
3、SSH連接iOS設(shè)備
4锣笨、使用Cycript監(jiān)聽(tīng)APP蝌矛,通過(guò)@import導(dǎo)入mjcript
cy# @import cycripttest
{}
cy# AppPath
cy# keyWin()