一、Cycript 安装
-
放到
\opt这个路径下
-
配置
.bash_profile
退出终端,再次打开。可以table 出 cycript,但是报错,如下

- open
/System/Library/Frameworks/Ruby.framework/Versions,打开Versions文件

把2.3复制一份,改名为2.0,然后把
/2.0/usr/lib/libruby.2.3.0.dylib改成2.0.0.dylib没法复制时,参考关闭系统完整性保护 SIP(System Integrity Protection)的方法。Mac系统一升级(10.15.1),这个方法就没用了,大爷的。
-
新的解决方案 参考
sudo install_name_tool -change /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib /opt/cycript_0.9.594/Cycript.lib/libcycript.dylib

-
control + d退出cycript
二、Cycript 使用
Cycript不用断住程序,就可以直接调试应用Cycript主要是界面调试,没法下断点1、创建一个MonkeyApp的应用

- 2、把准备好砸壳的ipa,拖入
TargetApp文件夹中。然后就可以运行了。自己创建的Demo的.app包也可以。

- 3、开启的端口,这里是多少,就用多少。这里是
6666

- 4、保证电脑和手机在同一个局域网内
- 5、找到手机上对应WiFi的IP地址。这里是
192.168.255.224

- 6、保证该应用在前台运行,然后在终端输入
cycript -r 192.168.255.224:6666(-r之间一定不能有空格),进行附加。如果应用在后台,附加的时候很可能附加不上。 -
*** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=60], 如果遇到这个错误,换一个wifi试试、换个手机(换ip)。还是不行的话就用手机给电脑开热点。就是ip或端口或Wi-Fi的问题。
-
*** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=61],如果遇到这个错误就重启一下应用就好,如果重启应用不行就重启手机
-
UIWindow.keyWindow()获取keyWindow -
[UIApplication sharedApplication]简写UIApp获取APPlication单例对象
-
var keyWd = UIWindow.keyWindow()定义一个变量 -
UIWindow.keyWindow().rootViewController
-
recursiveDescription()循环打印子视图 -
toString()格式化打印(遇到\n换行)
-
# 对象地址。拿到该对象,相当于po这个对象,和调用这个对象是一样的,可用于调用方法 -
* 对象名。可以取出对象的成员变量
-
choose(类名)查询当前进程中该类型的对象。
- 以下都是Monkey工具自带。而在越狱手机Cydia安装Cycript插件是没有的
- Monkey拉取了网络的cy文件
https://raw.githubusercontent.com/AloneMonkey/MDCycript/master/MS.cy-
https://raw.githubusercontent.com/AloneMonkey/MDCycript/master/MS.cy
APPIDpviews ()pvcs ()-
pvc()
-
pactions(#0x100e16320)查看action 和 target -
rp(#0x100e16320)查看响应者链条
- 注意
- 注意这里没有
self哦 -
cycript不能拿到函数地址 -
cycript主要调试界面的 - 只要应用装到手机上了,就可以拔掉数据线了
- 页面一旦换了,内存地址 就不要再用了!!
- 没有search
- 这里有APPID,是因为Monkey集成的,而在越狱手机Cydia安装Cycript插件是没有的
三、脚本自动链接



四、封装cy文件
Cy文件
Cycript是一门脚本语言,它可以加载封装好的.cy文件。
我们会将常见的Cycript常用功能封装到.cy文件中,便于调试。
非越狱中导入.cy文件
利用MonkeyDev工具导入.cy文件
MonkeyDev本身集成了Cycript。我们只需要将.cy文件通过xcode导入Framworks目录即可。
1、在CycriptDemo文件夹下创建一个dyz.cy空文件(后缀名一定要为.cy)

2、dyz.cy文件中添加如下代码,然后保存一下

3、拷贝到CycriptDemo这个targets中


4、重新运行项目即可
5、需要导入才可以使用哦 @import dyz

DYZCurrentVC
DYZCurrentVC () 才会执行

APPIDDYZ = [NSBundle mainBundle].bundleIdentifier,
APPPATHDYZ = [NSBundle mainBundle].bundlePath,
//如果有变化,就用function去定义!!
DYZRootvc = function(){
return UIApp.keyWindow.rootViewController;
};
DYZKeyWindow = function(){
return UIApp.keyWindow;
};
DYZGetCurrentVCFromRootVc = function(rootVC){
var currentVC;
if([rootVC presentedViewController]){
rootVC = [rootVC presentedViewController];
}
if([rootVC isKindOfClass:[UITabBarController class]]){
currentVC = DYZGetCurrentVCFromRootVc(rootVC.selectedViewController);
}else if([rootVC isKindOfClass:[UINavigationController class]]){
currentVC = DYZGetCurrentVCFromRootVc(rootVC.visibleViewController);
}else{
currentVC = rootVC;
}
return currentVC;
};
DYZCurrentVC = function(){
return DYZGetCurrentVCFromRootVc(DYZRootvc());
};















