Cycript 使用简记

简介

Cycript是一款混合Objective-C++和JavaScript的脚本语言,能够动态调试、修改正在运行的iOS和MacOS App。

iOS越狱设备安装Cycript很很方便,Cydia自带源中包含Cycript,直接搜索就能找到,安装即可。

简单使用方法

测试安装

在ssh登录iOS系统后,命令行直接输入cycript如果出现cy#就说明成功启动了Cycript。

然后就可以执行Objective-C++或者JavaScript命令了,例如

1
2
3
4
cy# var a = 3 + 5
8
cy# [@"String" stringByAppendingString: @"123"]
@"String123"

注入进程

如果要调试或修改某个App,就需要把Cycript注入到想要调试的App中去。首先需要找出当前运行的App的pid或者 进程名,然后执行 cycript -p 进程名 或者 cycript -p PID。可以通过如下命令找出你需要的pid或者进程名。

1
2
3
4
5
6
iPhone:~ root# ps ax | grep SpringBoard
13018 ?? Ss 67:26.90 /System/Library/CoreServices/SpringBoard.app/SpringBoard
14318 s000 R+ 0:00.03 grep SpringBoard

iPhone:~ root# cycript -p SpringBoard
cy#

查找类的对象

choose()

1
2
choose(UIButton)
[#"<UIButton: 0x160226a70; frame = (0 0; 123 28); opaque = NO; layer = <CALayer: 0x1600fbe90>>",#"<UIButton: 0x1607ea530; frame = (275 0; 30 63); alpha = 0.3725; opaque = NO; layer = <CALayer: 0x1607960d0>>"]

通过地址获取对象

通过#+地址获取对象实例

1
2
var btn = #0x160226a70
#"<UIButton: 0x160226a70; frame = (0 0; 123 28); opaque = NO; layer = <CALayer: 0x1600fbe90>>"

输出对象属性

在对象前添加*号

1
2
cy# *btn
{isa:UIButton,_hasAlternateNextResponder:false,_hasInputAssistantItem:false,_constraintsExceptingSubviewAutoresizingConstraints:null,_cachedTraitCollection:#"<UITraitCollection: 0x15c504d50; >",_layer:#"<CALayer: 0x1600fbe90>"...}

使用Block

定义block

1
2
3
4
cy# var block = ^ int (int value) {return value * value}
^int(int){}
cy# block(5)
25

总结

上述内容列出了一些Cycript的简单使用方法,单单熟练使用这些就足以发挥其强大的作用,再加上良好的自动补全,实乃居家旅行,必备工具。当然Cycript还有更高级的功能,比如可以动态加载JavaScript文件,不用重复输入内容增加开发效率;支持C语言指针,甚至已经开始支持在Android中运行Java。如果想了解更多的内容可以查看官方文档。

官网:http://www.cycript.org

文档:http://www.cycript.org/manual/