iOS11 启动一个ROOT权限的 Daemon

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

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

iOS11 启动一个ROOT权限的 Daemon_第1张图片
image.png

3.建好的工程如下:
iOS11 启动一个ROOT权限的 Daemon_第2张图片
image.png

其中monkeydev.entitlements文件就是MD更新后新增的;我把main.c改为了main.mm;将里面代码改为:
iOS11 启动一个ROOT权限的 Daemon_第3张图片
image.png

用来验证守护进程是否正确运行;
4.进入工程Finder中,在package文件夹下面新建两个文件夹,名字及关系为:/Library/LaunchDaemons/,在LaunchDaemons文件夹中创建plist文件,名字为com.ztwl.demo.plist;保证和contol里面的package名字一致;
如图:
image.png

plist里面代码为:





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查看,效果如下


iOS11 启动一个ROOT权限的 Daemon_第4张图片
image.png

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

你可能感兴趣的:(iOS11 启动一个ROOT权限的 Daemon)