iOS越狱(3)Cycript

Cycript简介

Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物, 可以用来探索、修改、调试正在运行的Mac\iOS APP。我们可以通过官网和文档来学习 。

Cycript使用步骤

  1. 在iPhone上通过Cydia安装Cycript,即可在iPhone上调试运行中的APP

  2. 在Mac终端使用SSH连上iPhone

  3. 开启cycript

  4. 在iPhone的root用户目录下,输入cycript

  5. 调试iOS App
    5.1 获取需要调试的app的进程id(当然首先需要启动这个app)
    在iPhone上安装adv-cmds插件, 然后就可以使用ps -A(或者ps aux) 命令来显示当前iPhone所有的进程信息,从里面找到对应的进程id。
    如果数据太多,可以通过(ps –A | grep 关键词)来根据关键词筛选。
    注 : ps命令是process status的缩写,使用ps命令可以列出系统当前的进程。

    5.2 通过以下命令关联App进程
    cycript -p 进程ID
    或者cycript -p 进程名称

    5.3 通过cycript代码操作App, 例如
    UIApp <-> 打印UIApplication单例对象
    [UIApplication sharedApplication] <-> 打印UIApplication单例对象
    var 变量名 = 变量值 <-> 定义变量
    #内存地址 <-> 用内存地址获取对象
    ObjectiveC.classes <-> 已加载的所有OC类
    *对象 <-> 查看对象的所有成员变量
    view.recursiveDescription().toString() <-> 递归打印view的所有子控件(跟LLDB一样的函数)
    choose(UIViewController) <-> 筛选出某种类型的对象
    choose(UITableViewCell) <-> 筛选出某种类型的对象

注:
取消输入 Ctrl + C
退出 Ctrl + D
清屏 Command + R

Cycript高级使用

我们可以将常用的Cycript代码封装在一个.cy文件中,例如我们可以将获取当前app的主窗口的根视图控制器的代码封装到一个文件中。

  • 新建一个文件mycycript.cy
  • 使用文本编辑工具(vim或者Sublime Text)编辑mycycript.cy文件
  • 输入下面代码
//exports参数名固定,用于向外提供接口
(function(exports){
        exports.rootVC = function() {
                  return UIApp.keyWindow.rootViewController;
        };
        keyWin = function() {
              return UIApp.keyWindow
      }
})(exports)

那么这个mycycript.cy文件怎么使用呢?

  1. 我们可以将这个文件放到iPhone的/usr/lib/cycript0.9目录下
  2. 按照上面的Cycript的使用步骤先SSH登录iPhone,然后开启Cycript,关联上app进程
  3. 在命令行导入文件@import mycycript, 其中mycycript是自己定义的文件名。
    如果这个文件有更多的子目录,例如放在了/usr/lib/cycript0.9/com/baidu下面,那么是@import com.baidu.mycycript
  4. 使用定义的函数或者变量
    在命令行输入mycycript.rootVC()打印根视图控制器
    在命令行输入keyWin()打印主窗口对象
    注意:rootVC函数定义时前面加了exports表示这个函数属于文件,所以调用时前面需要加上文件名.函数名(), keyWin函数定义时前面什么也没有写,表示是全局函数,调用时函数名前面就 不 需要加文件名.函数名()。

练习: 将今日头条App页面的"进入头条"按钮隐藏。

iOS越狱(3)Cycript_第1张图片
IMG_0008.png

你可能感兴趣的:(iOS越狱(3)Cycript)