一、EasySIMBL简介
用户想给应用增加功能的话,最快捷的方法就是给应用写插件打补丁。
EasySIMBL(Easy SIMple Bundle Loader)是macOS系统的一个工具,能够很方便地把插件注入到目标应用里,从而使应用能按我们想要的方式运行。
二、安装EasySIMBL
EasySIMBL需要安装到/System/Library/ScriptingAdditions/路径,安装过程如下:
1、关闭SIP
由于macOS X 10.11启用了SIP,用户没有权限修改系统目录下的文件,因此安装EasySIMBL之前要先关闭SIP。
首先重启系统,开机时按住 command + R 不放,直到进入系统恢复模式。
然后点击 实用工具 菜单,打开终端,执行csrutil disable命令关闭SIP,再重启系统。
2、安装EasySIMBL
点击SIMBL-0.9.9.zip下载文件并解压。
然后打开终端,cd到SIMBL-0.9.9目录,执行以下命令进行安装:
1 | sudo installer -verbose -pkg SIMBL-0.9.9.pkg -target / |
3、启用SIP
安装完可以启用SIP,对系统进行保护。
进入系统恢复模式,执行csrutil enable --without debug,并重启系统。
加上--without debug参数,才可以让lldb附加进程进行调试。
三、安装插件
将插件放在/Library/Application Support/SIMBL/Plugins目录里,应用启动时会自动加载插件。
四、插件开发
以系统自带的计算器应用/Applications/Calculator.app为例编写一个插件。
1、安装插件模板,地址为 https://github.com/poboke/EasySIMBL-Bundle-Template。
2、使用Xcode创建一个Project,选择SIMBL Bundle模板。
3、设置工程名字为CalculatorPlugin。
打开/Applications/Calculator.app/Contents/Info.plist,可以看到计算器的bundle identifier为com.apple.calculator:
下图里的Target App Bundle Id就是我们要注入的app的包标识符,当app启动时,SIMBL就会把填有该app包标识符的插件注入到该app中。
填写后的工程信息为:
4、工程默认的初始化代码为:
1 |
|
加载插件时会先执行类方法load的代码,因此可以在该方法里编写初始化的代码。
5、编辑插件的Info.plist文件,可以看到里面有一个SIMBLTargetApplications数组:
字段的含义为:
BundleIdentifier: 要注入的app的包标识符。MaxBundleVersion: 要注入的app的版本号最大值,默认为99999。MinBundleVersion: 要注入的app的版本号最小值,默认为0。
版本号是指CFBundleVersion的值:
由计算器的信息可知,目前计算器的版本号是123,而非10.8。
处于MinBundleVersion和MaxBundleVersion版本号之间的app才能够加载插件。
因为app升级后可能导致插件失效,严重的话可能会导致app闪退。所以为了保证插件能够正常工作,可以使用app当前版本号的值,也就是最大值和最小值都填上123。
不过这种情况是很少出现的,一般来说使用模板默认的0 ~ 99999就可以了。
6、工程编译成功后会在/Library/Application Support/SIMBL/Plugins目录下生成一个CalculatorPlugin.bundle插件。
7、先运行控制台Console.app,再运行计算器Calculator.app。
如果在控制台里能看到++++++++ <CalculatorPlugin: 0x7f980488e970> plugin loaded ++++++++等字样,就说明我们的插件已经成功注入到计算器里了。
8、接下来就可以使用逆向工程的方法来修改app的逻辑了。
五、示例工程
插件模板 https://github.com/poboke/EasySIMBL-Bundle-Template 的Samples目录里有一个CalculatorPlugin示例工程。
编译该工程后,点击计算器菜单栏的 计算器 –> 关于计算器 时,会出现一个Hello world的弹出框:
感兴趣的话可以去看工程里的代码,由于代码比较简单,这里就不多费笔墨了。
六、图形界面的mySIMBL
使用图形化软件可以更方便地管理插件,mySIMBL是一个开源的macOS插件管理器,它不但可以很方便地安装SIMBL,而且还自带了插件列表,能够下载其他用户分享的插件。
1、安装说明
点击这里下载最新的安装包,下载后解压,将mySIMBL.app移动到应用程序里。
第一次运行时,会提示用户安装SIMBL,按照上面的方法关闭SIP,并安装EasySIMBL。
运行mySIMBL.app后便可看到本地的插件列表:
2、功能介绍
Manage菜单里可以管理本地的插件,把插件拖到插件列表里可以安装插件。点击状态图标可以开启/禁用插件,绿色图标为开启,红色为禁用。Discover菜单里可以下载其他用户分享的插件。Updates菜单里可以更新其他用户分享的插件。SIMBL菜单里可以把某些应用加入黑名单,这些应用启动时就不会加载任何插件。
3、分享插件
如果你想把自己写的插件分享给别人使用,可以把插件提交到mySIMBL的插件仓库里,仓库地址为:https://github.com/w0lfschild/macplugins。
首先Fork该插件仓库,将你编译好的插件压缩为zip格式,放到仓库的bundles目录里。
编辑packages_v2.plist文件填写插件信息,再提交Pull Request就可以啦。