Cycript学习

Cycript是OC、JS、Java等语法的混合物,利用Cycript可以用来研究、修改、调试正在运行的iOS或者Mac程序
Cycript的官方网址
使用方法:
在Cydia里面安装Cycript
Cycript学习_第1张图片
常用命令:

cycript 进入cycript
cycript -p 进程名称 或 进程ID 调试指定进程
Ctrl + C 取消输入
Ctrl + D 退出
Command + R 清空屏幕

问:进程名称如何得到呢?

需要借助另外一个工具:adv-cmds,安装方法也是在Cydia安装即可

Cycript学习_第2张图片
然后利用指令 ps –A即可列出手机现在所有运行的进程。
Cycript学习_第3张图片PID下方的就是进程ID。在使用的时候,建议使用进程名称,也就是CMD最后的一个“/”后面的内容。因为PID每次可能都不一样,但是名字是不变的。
在使用ps -A 命令的时候,会列出很多进程,假如我们就是要找微信的进程,可能不太好找,因此,我们可以借助ps -A | grep WeChat即可找到(WeChat区分大小写)
Cycript学习_第4张图片
找到进程名字之后,就可以根据进程名字,进入到该进程:cycript -p WeChat
让我们继续回归Cycript
Cycript常用功能语法:

[UIApplication sharedApplication]
UIApp
获取app的application
Cycript学习_第5张图片
ObjectiveC.classes : 进程已加载的所有OC类
*对象名字 :查看对象的所有成员变量
对象名字 可以用 #对象ID 等价替换


以上是Cycript的常见简单用法,下面介绍一个超级利器,由MJ写的一个.cy文件,可以轻松完成很多复杂指令操作。
首先,我们需要下载mjcript,下载完成后需要安装,安装方法在下载链接里面都有,就不再叙述了。
在使用的时候,需要导入@import mjcript
里面有几个常用功能记录一下:

  • MJFrontVc()获取显示在当前的控制器;
  • MJInstanceMethodNames(控制器名字或#控制器地址)找到该控制器所有对象方法名。例如:
    MJInstanceMethodNames(WCAccountMainLoginViewController)MJInstanceMethodNames(#0x10e1c6a00)
  • MJSubviews(控制器名字.view)MJSubviews(#控制器地址.view)可以把该控制器下面所有的子控件找出来

让我们玩一下微信登录
执行
@import mjcript
MJFrontVc()获得""
通过MJSubviews(#0x10e1c6a00.view)方法,找到所有子控件
找到对应的控件

[#0x10cfc0960 setTitle:“study” forState:UIControlStateNormal]
[#0x10cfc0400 setTitle:“Cycript” forState:UIControlStateNormal]
#0x10cd815b0.text = “SYZ”
#0x10cd7c6a0.text = “学习Cycript”

效果如下:
Cycript学习_第6张图片
但是,现在的只能在该控制下做,等这个登录控制器销毁再重新创建的时候,修改效果并不能够保存,因为,学习道路还很远,继续学习吧!

你可能感兴趣的:(iOS底层学习)