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吧。

相关推荐
pop_xiaoli1 小时前
【iOS】类与对象底层
macos·ios·objective-c·cocoa·xcode
sp42a1 小时前
NativeScript iOS 平台开发技巧
ios·nativescript·app 开发
2501_915921431 小时前
常用iOS性能测试工具大全及使用指南
android·测试工具·ios·小程序·uni-app·cocoa·iphone
for_ever_love__2 小时前
Objecgtive-C学习实例对象,类对象, 元类对象与 isa指针
c语言·学习·ios
一招定胜负2 小时前
视频转写+LLM分析:课堂录音自动化处理实现
macos·ios·xcode
2501_915918413 小时前
有没有Xcode 替代方案?在快蝎 IDE 中完成 iOS 开发的过程
ide·vscode·ios·个人开发·xcode·swift·敏捷流程
blackorbird3 小时前
通过攻陷合法网站传播的新型iOS漏洞利用工具包DarkSword
macos·ios·objective-c·cocoa
for_ever_love__5 小时前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
songgeb18 小时前
Compositional layout in iOS
ios·swift·设计
UTF_819 小时前
iOS动画浅谈
ios·客户端