美文网首页
Cycript的使用

Cycript的使用

作者: 烟影很美 | 来源:发表于2018-06-04 01:02 被阅读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());
    };
    

    相关文章

      网友评论

          本文标题:Cycript的使用

          本文链接:https://www.haomeiwen.com/subject/zhissftx.html