Cycript的使用

2018-06-04  本文已影响41人  烟影很美

这里使用了越狱手机, 在手机上通过Cydia安装了Cycript.

还可以通过注入的方式注入到非越狱设备, MonkeyDev就是使用了这样的方法

一、启动Cycript

1. 通过SSH远程登录iPhone
参考 SSH远程登录iPhone

2. 查看进程

// 查看所有进程
ps -A
// 查看指定进程
ps -A | grep WeChat

查找结果

956 ??         6:51.88 /var/mobile/Containers/Bundle/Application/F3FC3536-BAE2-43FA-B360-05A9A42C68C8/Wechat.app/WeChat

3. 连接进程(比如微信)

// 通过进程名
cycript -p Wehcat

通过进程名连接进程时, 如果有两个同名的进程, 会连接前一个

// 通过进程ID连接
cycript -p 956

二、Cycript的简单使用

Cycript的命令可以去其官网查看使用方法

1. cy文件的运用

Cycript可以定义函数

cy# function sum(a,b){return a+b;}
cy# sum(1,2)
3

但是这种方式定义的函数再次连接Cycript的时候会失效
Cycript支持一种cy文件, 可以永久定义函数和命令

创建一个test.cy文件, 其内容如下:

rootvc = function(){
  6   return UIApp.keyWindow.rootViewController;
  7 }

将test.py文件保存到iPhone的/usr/lib/cycript0.9/目录下

注: /usr/lib/cycript0.9/这个目录会随着cycript的版本更改, 最好是去/usr/lib/目录中找一找

scp -P 12345 test.cy root@127.0.0.1:/usr/lib/cycript0.9/

函数使用

注意: 修改cy文件之后, 最好杀死应用重新启动链接, 不然不起作用

cy# @import test
{}
cy# rootvc()
#"<WCRootNavigationController: 0x15c5b7200>"

test.cy文件中也可以这样写

rootvc = UIApp.keyWindow.rootViewController;

注意, 这样写的好处是可以不写省略号, 但是这种命令在@import的时候就执行了, rootvc相当于一个变量 ,之后的使用都不会再更改rootvc的值, 如果你获取的值有改变的可能, 不要使用这种方式, 比如 visibleViewController

2. 常用的函数或命令

z_rootvc = function(){
  return UIApp.keyWindow.rootViewController;
};

z_appid = [NSBundle mainBundle].bundleIndentifier;

z_curentVCFromRootVC = function(rootVC){
  var currentVC;
  if([rootVC presentedViewController]){
      rootVC = [rootVC presentedViewController];
  }
  
  if([rootVC isKindOfClass:[UITabBarController class]]){
    currentVC = z_curentVCFromRootVC(rootVC.selectedViewController);
  }else if([rootVC isKindOfClass:[UINavigationController class]]){
    currentVC = z_curentVCFromRootVC(rootVC.visibleViewController)
  } else {
    current = rootVC;
  }
  return currentVC;
};

z_currentVC = function(){
  return z_curentVCFromRootVC(z_rootvc());
};
上一篇下一篇

猜你喜欢

热点阅读