一、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
APPID
pviews ()
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());
};