[TOC]
环境配置
-
.inputrc
:允许在iPhone的终端环境中输入中文字符。配置方式,将.inputrc文件拷贝到
root/:~
目录下,重新连接即可。拷贝指令:scp -P 12345 .inputrc root@localhost:~/
。
注意:1..inputrc
文件中开头不要出现中文字符,否则不能生效;2.存放目录在root用户下的家目录。
-
Vi IMproved
:允许在iPhone上输入终端指定vim等; -
adv-cmds
:允许输入终端指令,cycript依赖于他; -
cycript
:允许调起进程,对进程进行操作。同OpenSSH相比,OpenSSH是对整手机,而Cycript是对某个进程; -
bfinject
:在iOS11上不能是cycript,进而使用bfinject
做替代。
Cycript使用
基础操作
- 进程操作:查看当前所进程(遍历):
$ps -A (| grep WeChat)
- cycript连接进程,两种方式:
-
$cycript -p WeChat
,连接的是进程ID小的那个 -
$cycript -p 20342
,
-
.cy文件的应用
.cy文件可以将常用的cycript指令封装在一个文件中,在将其@import依附在进程后,可以直接在cycript环境下调用已经封装了的指令,方便使用。其存放目录在:
/usr/lib.cycript0.9/
目录下。
在iPhone终端连接到进程时,使用ObjectiveC.classes
可以遍历出当前进程所有的class类型。
cycript环境中可以定义变量也可以定义方法,这些都遵守JS语法。
使用步骤
- 将常用指令写在.cy文件中,并保存。
- 将写好的.cy文件拷贝到iPhone:
$scp -P 12345 cmds.cy root@localhost:/usr/lib/cycript0.9
,其中root是权限标识,localhost为ip的地址,:/usr/lib/cycript0.9
为指定的路径。 - 在Mac终端上登录手机,登录成功后,启动微信应用,使用
$cycript -p WeChat
连接微信进程。 - 使用
@import cmds
导入cmds.cy
到内存,依附WeChat进程,导入成功时终端提示{}
标示,即可使用在cmds.cy
中封装的指令,终端还可以使用Tab
进行提示。
注意点
导入引用文件时不需要使用文件后缀,仅需要使用文件名就可以。
在
cycript0.9
中有多个文件夹,在使用时可以将.cy
文件放在com
文件夹下,进行分类管理。在放入分级目录中后使用@import com.csii.cmds
。指令和文件命名时可以使用前缀来区别。
在文件中定义方法和变量的含义不一致,当所需对象可能存在运行时变化时就使用方法来定义,反之,对象不存在运行时变化时,使用变量定义。
另外的导入方式:
$cycript -p WeChat /usr/lib/cycript0.9/cmds.cy; cycript -p WeChat;
,在将cy文件拷贝到iPhone后,使用指令连接时直接将cy文件依附到进程,优势在于不需要重启应用,而是在cy文件变化后直接连接导入,对于需要输入密码等一序列操作的应用很适用。
获得当前VC
在.cy文件中定义该方法
JYGetCurrentVCFromRootVC = function (rootVC) {
var currentVC;
// 注意不是presentationController,
if ([rootVC presentedViewController]) {
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
currentVC = JYGetCurrentVCFromRootVC(rootVC.selectedViewController);
} else if ([rootVC isKindOfClass:[UINavigationController class]]) {
currentVC = JYGetCurrentVCFromRootVC(rootVC.visibleViewController);
} else {
currentVC = rootVC;
}
return currentVC;
}
JYCurrentVC = function () {
return JYGetCurrentVCFromRootVC(JYRootVC());
}