上周末开始想玩玩在 macOS 下注入一个应用,自己写了一个简单的动态库想通过
DYLD_INSERT_LIBRARIES=./yourlibraryname.dylib path/to/your/apps/binary
这样的方式启动应用,但是弄了一了发现动态库怎么也加载不起来。Console 有相关的提示(具体没有记下来,但是确实有)查了一下发现是 Hardened Runtime 阻止了注入,当时有如下选项可以让我继续下去:
- Mach-O 把我的动态库注入进去;
- 关闭 SIP;
这两个选择都不是我想要的(不想破坏应用二进制以及不想关闭 SIP),今天突然想到既然 Hardened Runtime 是通过 codesign 加入的,那我直接把二进制重签一份没有 Hardened Runtime 的不就行了,立马测试了一下,发现动态库可以加载了。
重签的代码如下(来源):
codesign -fs - anyname.app --deep
接下来只需要想一想怎么样让应用每次启动的时候都会带上 DYLD_INSERT_LIBRARIES 的信息就行了,马上能想到的办法是套个壳,不知道还有没有更好(修改最少)的办法。