iOS11 启动一个ROOT权限的 Daemon


#1

阅读之前建议先看下 Run a daemon (as root) on iOS,因为很多配置都和iOS10里面是一样的;

1.环境:iOS 11.0.1
Xcode9.4
安装最新版MonkeyDev(ps:已经安装的就更新,庆总有更新:fix invalid provision
2.Xcode新建项目,选择:


3.建好的工程如下:
image.png
其中monkeydev.entitlements文件就是MD更新后新增的;我把main.c改为了main.mm;将里面代码改为:
image.png
用来验证守护进程是否正确运行;
4.进入工程Finder中,在package文件夹下面新建两个文件夹,名字及关系为:/Library/LaunchDaemons/,在LaunchDaemons文件夹中创建plist文件,名字为com.ztwl.demo.plist;保证和contol里面的package名字一致;
如图:image.png

plist里面代码为:

<?xml version="1.0" encoding="UTF-8"?>
KeepAlive Label com.ztwl.demo ProgramArguments /usr/bin/demo RunAtLoad SessionCreate StandardErrorPath /dev/null inetdCompatibility Wait

5.同样打开Finder,进入DEBIAN文件夹下,添加两个文件postinst、prerm;
prerm 代码为:

#!/bin/sh
chown -R root:wheel /usr/bin/demo
chown -R root:wheel /Library/LaunchDaemons/com.ztwl.demo.plist
/bin/launchctl unload /Library/LaunchDaemons/com.ztwl.demo.plist
/bin/launchctl load /Library/LaunchDaemons/com.ztwl.demo.plist

prerm 代码为:

#!/bin/sh
/bin/launchctl unload /Library/LaunchDaemons/com.ztwl.demo.plist

其中 postinst文件:是插件安装后执行的脚本;
prerm文件:软件卸载前需要执行的脚本。
6.工程配置好端口号等参数,编译插件;
7.验证:我用console查看,效果如下:
image

至此iOS11上面守护进程运行完毕。
记录了实现过程,感谢狗神及庆总的帮助。有不对的地方请指正。