一、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
就可以啦。