在11.3.1的手机上,没能找到Cycript的插件,只能用bfinject来注入cycript。
先在电脑上把cycript安装好。官网http://www.cycript.org/,下载完后解压即可。
然后按照bfinject的教程,我们还是选LINE,把LINE启动,ssh到手机后,输入下面命令。
bash bfinject -P LINE -L cycript
等一会儿就注入成功了,然后又个弹窗,上面写着用来连接的IP和端口,
然后回到电脑,用下面的命令连接手机
~/xxx/cycript -r 192.168.1.33:1337
很大可能就报错了。
dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
Referenced from: /opt/cycript_0.9.594/./Cycript.lib/cycript-apl
Reason: image not found
网上查了一下,是因为新的Mac系统ruby是2.0版本之后的,所以找不到这个库。用ruby -v
可以看当前ruby版本。
有两种办法,一种是安装ruby2.0,然后把它的这个libruby.2.0.0.dylib拷贝到cycript的lib目录,安装命令如下。安装完之后,留意最后面打印出来的安装位置去找lib。
brew install ruby@2.0
另外一种办法是修改新的ruby的framework。这个相当于把2.3的库拷贝到一个新的文件夹,冒充2.0的用。这里需要关闭SIP(系统完整性保护机制)。苹果从 OS 10.11 开始引入了一项保护机制 System Integrity Protection,目的是帮助普通用户避免恶意 app 通过用户授权的方式获得所有系统权限。
1、重启电脑的时候按住command+R,然后会进入到恢复模式
2、选择菜单“实用工具” --> "终端" --> 输入 csrutil disable
3、重启电脑
如果想恢复,则是输入csrutil enable
。查询当前SIP状态,可以在终端输入csrutil status
$ sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/
$ sudo ln -s /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/libruby.2.3.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
完成这个之后,应该就可以去连接手机了,重复上面的命令。但是很可能还会报错
>*** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=61]
>*** _assert(infos != NULL):../Console.cpp(303):CYSocketRemote
这个猜测是刚刚我们启动的注入过了太久,端口自动关了。请重新注入cycript启动端口,然后再连接。应该就可以进去了
~/xxx/cycript -r 192.168.1.33:1337
cy#
然后就可以随便敲了,退出是command+D。
UIApp
UIApp.delegate
UIApp.keyWindow
...
注入cy脚本的方法,在进入cycript之前,用下面第一条命令后再连接。
cycript -r 192.168.1.33:1337 /path/for/utils.cy
cycript -r 192.168.1.33:1337