iOS逆向系列-Cycript


概述

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賦值給本文件對象,調用時通過文名調用。可以定義全局函數直接通過類名調用。

注意對於可變的一定使用函數獲取,對於固定的值可以使用變量獲取。因為腳本從上到下執行變量執行過后就是固定值。函數是當被調用的時候內部代碼才回去執行,並且每次調用都是實時獲取的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM