Cycript安装报错 Library not loaded终极解决方案

一、下载安装

Cycript 官方完整

资源下载完成后,解压。目录如下:

二、执行

打开命令终端,cd到对应目录,然后执行./cycript

bash 复制代码
#第一步:cd到解压的目录
cd /xx/cycrpt_0

#执行:
./cycript
2.1、报错Library not Loaded

果然不出所料报错如下:

可以看到,Library not loaded 错误, ./cycript执行时,dyld加载libruby.2.0.0.dylib, 但找不到相应路径。查看自己电脑的ruby环境是,/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.dylib。怪不得。

那就想办法弄一个,网上找了很多方案,发现都是复制粘贴,由于苹果不同系统SIP的原因,并不能在系统文件夹里新建文件,因为只有只读权限。

在 OS X El Capitan 系统以后有一个跟安全相关的模式叫 SIP(System Integrity Protection ),它禁止让软件以 root 身份来在 Mac 上运行,在升级到 OS X 10.11 中或许你就会看到部分应用程序被禁用了,这些或许是你通过终端或者第三方软件源安装。对于大多数用户来说,这种安全设置很方便,但是也有些开发者或者高级 Mac 用户不需要这样的设置

网上说了很多关闭SIP,建立软链接,但都不起作用。既然都不靠谱,还是得自己再研究下。

2.2、分析原因

若不关注具体原因,可以直接跳过出,查看第三部分解决办法。

既然是dyld加载动态库时报错,谁用到了libruby.2.0.0.dylib,仔细看报错,可以看出:

可以看到是由于Cycript.lib下的cycript-apl,引用了。 那用otool 分析下,执行otool -l cycript-apl,

bash 复制代码
otool -l cycript-apl

从上图的输出可以看出,果然cycript-apl 加载了 libruby.2.0.0.dylib。说明cycript-apl是用到了libruby2.0.0.dylib提供的方法。

ruby是向后兼容的,2.6的版本提供的能力是大于2.0的。既然是加载动态库,那岂不是可以更改链接的动态库。

对,就是将动态库2.0的版本改动自己2.6的版本。

2.3、install_name_tool 改变dyld加载ruby的路径

1、通过install_name_tool 更改 cycript-apl 加载动态库的路径

install_name_tool -change xxx旧ruby.dylib路径 xxx新ruby.dylib路径 cycript-apl

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 ~/Downloads/cycript_0/Cycript.lib/cycript-apl

bash 复制代码
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 ~/Downloads/cycript_0/Cycript.lib/cycript-apl

2、执行上述命令后,再次查看cycript-apl加载的动态库

bash 复制代码
#再次查看cycript-apl加载的动态库
otool -l cycript-apl

看到使用ruby.dylib已经更改为自己的了。

3、再次执行./cycript

还是报错Library not loaded,但仔细观察报错,会发现虽然还是libruby.2.0.0.dylib,但引用ruby.dylib的已经变成libcycript.dylib不是前面的cycript-apl。说明上面的更改加载动态路径是生效的。我想这个报错你应该会自己解决了。

对,同理通过install_name_tool,更改libcycrippt.dylib加载 ruby.dylib的路径。

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 ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib

bash 复制代码
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 ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib
2.4、再次执行./cycript

执行./cycript成功了。

三、解决办法

3.1、 更改 cycript-apl加载ruby的路径

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 ~/Downloads/cycript_0/Cycript.lib/cycript-apl

bash 复制代码
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 ~/Downloads/cycript_0/Cycript.lib/cycript-apl
3.2、更改libcycript.dylib的加载ruby路径

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 ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib

bash 复制代码
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 ~/Downloads/cycript_0/Cycript.lib/libcycript.dylib 

install_name_tool -change xxx旧ruby.dylib路径 xxx新ruby.dylib路径 需要更改的文件

注:上述的路径,请根据自己的路径进行修改。

3.3、再次执行./cycript

执行./cycript成功了。

​​​​​​​至此问题便解决了,请开心的使用cycript吧。

相关推荐
AI云海1 天前
iOS 多 Target 打包、UAT/生产测试与上架 App Store 全流程指南
ios
阿里超级工程师1 天前
最新快速申请ios打包证书和profile文件步骤
ios·打包证书
2501_915909061 天前
iOS 应用反调试技详解术 检测调试器的原理与防护实践
android·ios·小程序·https·uni-app·iphone·webview
游戏开发爱好者81 天前
TraceEagle 代理抓包详解,无感代理、去证书绑定与 HTTP/3 解密能力解析
网络协议·计算机网络·网络安全·ios·adb·https·udp
aiopencode1 天前
SwiftUI Introspect生产环境完全指南:为什么它是安全可靠的选择
后端·ios
for_ever_love__1 天前
iOS: 网络管理单例
学习·ios·objective-c
00后程序员张1 天前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
ii_best2 天前
更新!移动端开发软件按键安卓版&手机助手v5.1.0上线!本地AI识别全面解锁,脚本开发再升级
android·人工智能·ios·按键精灵
weixin_403810132 天前
03-iOS免越狱无线投屏-上传图片和视频到相册
ios·新媒体运营·跨境电商·ios自动化·ios投屏·ios智能体·ios脚本
2501_916007472 天前
SwiftUI 声明式语法与 Xcode 预览功能详解
ide·vscode·ios·swiftui·个人开发·xcode·敏捷流程