一旦iOS设备被越狱,我们就可以构建越狱应用程序(使用theos),并将其安装在/Applications
目录中,其中预加载的应用程序以root权限运行。如果一个应用程序是使用Xcode构建的,一旦安装它,它就会进入/private/var/mobile/Applications/
文件夹,该文件夹应该强制执行Apple沙箱(在越狱之前)。
所以,我的问题是:
对于越狱设备,/private/var/mobile/Applications/
中的应用是否会以root权限或mobile
用户权限执行?
对于Android,一旦生根,应用程序必须通过执行su
命令获得root权限。是否也适用于iOS?
我想了解这两个开发选项(Theos / Xcode)之间的区别以及它如何影响我的应用程序可以执行的操作。
答案 0 :(得分:8)
长话短说:不。
越狱是获得root权限的一个必要但不充分的条件。默认情况下,应用程序仍然会被沙箱化。
使您的应用以root权限运行可以做的是创建一个具有root:wheel
所有权和755
权限的启动shell脚本,然后创建具有相同所有权的实际可执行文件{{1作为权限(即设置其“setuid”位),然后在调用7555
之前从setuid(0);
内调用main()
。
答案 1 :(得分:7)
不同意任何事情H2CO3 said,但要进一步澄清......
使用Xcode在/private/var/mobile/Applications/
(†)中安装的应用程序将以用户mobile
权限运行,即使在越狱手机上也是如此。
即使在越狱手机上,安装到/private/var/mobile/Applications/
(†)的应用程序也会被沙盒几乎(‡),就像手机上的应用程序一样。因此,不读取其他(普通)应用程序的数据,即使这些文件归用户mobile
所有。
有关Cydia等应用程序以root用户身份运行的流程的详细说明see this answer。或者,只需将ssh插入手机,然后自己查看/Applications/Cydia.app/
内部。
如果你只是复制/安装一个应用程序(不对H2CO3 suggested执行/Applications/
),它将不会被沙箱化,但它仍将与mobile
一起运行( UID = 501)特权:
iPhone5:~ root# cd /Applications
iPhone5:/Applications root# ls -altr ./HelloJB.app/
total 220
-rw-r--r-- 1 root wheel 711 Apr 3 20:36 entitlements.xml
-rw-r--r-- 1 root wheel 297 Apr 3 20:36 entitlements-daemon.xml
-rw-r--r-- 1 root wheel 7972 Apr 3 20:36 embedded.mobileprovision
-rw-r--r-- 1 root wheel 58755 Apr 3 20:36 date.zip
-rw-r--r-- 1 root wheel 485 Apr 3 20:36 ResourceRules.plist
-rw-r--r-- 1 root wheel 8 Apr 3 20:36 PkgInfo
-rw-r--r-- 1 root wheel 1226 Apr 3 20:36 Info.plist
-rw-r--r-- 1 root wheel 10960 Apr 3 20:36 Icon\@2x.png
-rw-r--r-- 1 root wheel 8328 Apr 3 20:36 Icon.png
-rw-r--r-- 1 root wheel 451 Apr 3 20:36 HelloJB.plist
-rwxr-xr-x 1 root wheel 61088 Apr 3 20:36 HelloJB*
-rwxr-xr-x 1 root wheel 42688 Apr 3 20:36 HelloDaemon*
drwxr-xr-x 2 root wheel 136 Apr 3 20:36 en.lproj/
drwxr-xr-x 2 root wheel 102 Apr 3 20:36 _CodeSignature/
drwxr-xr-x 4 root wheel 544 Apr 3 20:36 ./
drwxrwxr-x 54 root admin 1904 Apr 5 02:14 ../
iPhone5:/Applications root# ps -Aef | grep HelloJB
501 9412 1 0 0:00.00 ?? 0:00.33 /Applications/HelloJB.app/HelloJB
iPhone5:/Applications root# grep mobile /etc/passwd
mobile:*:501:501:Mobile User:/var/mobile:/bin/sh
(‡)这是一个good discussion, with input from Saurik, about how different jailbreaks may affect the sandbox。长话短说:这取决于。
(†)更新:在最新版本的iOS中,第三方应用的位置已移至/var/mobile/Containers
,稍后移至/var/containers/
,但相同基本的沙箱问题仍然存在。