iOS11 在SpringBoard中通过system函数运行root进程,进程setuid(0)失败,getuid()为501

问题背景:有个root权限的后台服务想让它死掉后能重启,于是想到让SpringBoard检查服务的心跳,心跳超时就让SB通过system()执行shell来重启服务,iOS10上是可以的。

遇到的问题:如题,iOS11 上重启后服务就丢失root权限了,

环境:iPhone 6 s ,iOS11.1.1 ,最新的electra进行越狱.
shell脚本daemonX_launch的内容
#!/bin/bash
exec /usr/bin/daemonX “$@”

daemonX和shell脚本文件权限都是:-rwsrwsrwx 1 root wheel

测试结果:ssh root@localhost 到手机然后 /bin/bash /usr/bin/daemonX_launch 是root权限。
SB中system("/bin/bash /usr/bin/daemonX_launch")就为mobile了。

不知道有没有大佬遇类似的问题,愿意分享下经验,多谢!!:grinning::grinning::grinning:

1.ssh到手机的是root用户,所以拉起的目标进程是root权限;SB是mobile权限,所以拉起的目标进程mobile权限。
2.解决你这个问题有两个办法:一个是用root进程去启动你的目标进程;另一个是让目标进程变成root权限的守护进程

多谢大佬的回复!! 是条思路,但实现起来应该有些难吧。

1.root进程启动目标进程。//系统root进程不能像SB那样注入吧?

2.守护进程。//这种也尝试过,但iOS9后对守护进程的内存用量做了限制(最大5MB),导致服务经常被杀… 见参考 http://iphonedevwiki.net/index.php/Updating_extensions_for_iOS_9 “Daemons that use more than 5MB are killed via Jetsam with no crash report saved:”

1.我不知道你去尝试做了没有
2.如果做了还不会,看来你需要交学费了

多谢大佬指点,tweak 确实可以注入到root进程,并且目标进程的root权限也生效了。:+1::+1::+1:

最后,选择的注入是那个root进程啊?:rofl:

locationd :rofl: