写在前面

本文主要是介绍一下逆向中Cycript的基本用法。

简单介绍

Cycript是OC、C++、JS、Java等多种语法的一个混合物,它是用来探索、修改、调试当前正在运行的APP,这个在我们以后逆向的过程中会经常使用到,关于Cycript的更多介绍大家可以参考Cycript官网

1

安装Cycript

在Cydia里面搜索Cycript进行下载,如下:

2

Cycript的基本使用

Cycript的开启和关闭

1、开启

  • 保持Mac和iPhone的安全连接
  • 使用命令cycript -p 进程IDcycript -p 进程名称

如果不太了解Mac和iPhone怎么保持连接的,可以参考博主的另一篇文章:【iOS逆向】如何让Mac和iPhone建立安全连接

如下:

3

这样我们就处于一个Cycript的语法环境。

2、关闭

快捷键:control + D

3、清屏

快捷键:command + R

查看进程的ID和名称

在以后逆向中,我们需要使用cycript -p 进程IDcycript -p 进程名称来探究某个APP,那么这个进程ID和进程名称我们应该从哪里获取呢。

1、在Cydia中搜索adv_cmds并安装

2、使用ps相关命令查看

列出所有进程:ps -A

根据关键词显示某些进程:ps -A|grep 关键词

4

我们这里以【喜马拉雅】APP为例:7091就是进程ID,ting就是进程名称,由于进程ID可能随时会发生变化,建议以后使用进程名称。

注意:要想或者某个APP的进程名称、ID,必须要打开这个APP。

5

这样我们就可以监听这个进程了。

Cycript中常用的语法

  • 获取当前进程的Application
[UIApplication sharedApplication] 或 UIApp

6

  • 定义变量
var 变量名 = 变量值

7

这样在当前内存环境下,只要我们输入app就可以获取window。

  • 获取当前APP的RootViewController
UIApp.keyWindow.rootViewController

8

  • 根据内存地址获取对象
#内存地址

9

  • 查看对象的所有成员变量
*对象

*#对象的内存地址

10

  • 递归打印view的所有子控件
UIApp.keyWindow.recursiveDescription().toString()

11

  • 筛选中某种类型的对象
choose(UIViewController)

12

这里打印的是当前在内存里面的VC,没有被创建的VC是不会被打印出来的。

封装Cycript文件

一般我们会把一些常用的cycript语法封装在.cy文件中,使用起来会方便很多,具体步骤如下:

  • 封装好.cy文件
  • 复制.cy文件到iFunBox的目录usr/lib/cycript0.9里面
  • 关掉当前进程 重新进入:cycript -p 进程名称
  • 导入该文件:@import cy文件

MJCycript文件

大佬已经把一些常用的、实用的相关函数给封装好了,大家可以去下载Github

按照我们上面讲的方式导入就可以使用:

13

现在我们来看一下例子:如何创建一个View并把它添加到APP上。

14

写在最后

关于Cycript的简单介绍我们就分享到这里了,如有错误请多多指教。