一旦越狱,iOS应用程序将以root权限运行吗?

一旦iOS设备越狱,我们可以构build越狱应用程序(使用theos),并将其安装在/Applications目录中,预装的应用程序以root权限运行。 如果一个应用程序是用Xcode构build的,那么一旦安装了应用程序,它将进入/private/var/mobile/Applications/文件夹,该文件夹应该具有苹果沙盒(在越狱之前)。

所以,我有的问题是:

  1. 对于越狱设备, /private/var/mobile/Applications/将以root权限或mobile用户权限执行?

  2. 在Android的情况下,一旦植入,应用程序将不得不通过执行su命令获得root权限。 是否也是这样的情况,当涉及到iOS?

我想了解这两个开发选项(Theos / Xcode)之间的区别以及它如何影响我的应用程序可以执行的操作。

并不意见H2CO3所说的任何东西,但要补充一些说明…

  • 在Xcode中安装在/private/var/mobile/Applications/ (†)中的/private/var/mobile/Applications/将以用户mobile特权运行,即使是在越狱手机上。

  • 即使在越狱的手机上,安装到/private/var/mobile/Applications/ (†)的/private/var/mobile/Applications/ 几乎都会像监狱电话上的应用程序一样被沙盒化(‡)。 所以,即使这些文件是由用户mobile拥有的,也不会读取其他(普通)应用程序的数据。

  • 为了更好的描述像Cydia这样的应用程序使用root身份运行的过程, 请参阅此答案 。 或者,只需ssh进入你的手机,并自己看看/Applications/Cydia.app/

  • 如果您只需将应用程序复制/安装到/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 

(‡)这里有一个很好的讨论,来自Saurik的input,介绍不同的越狱可能会如何影响沙箱 。 长话短说:这取决于。


(†)更新 :在最近的iOS版本中,第三方应用程序的位置已经被移动到/var/mobile/Containers ,后来被移动到/var/containers/ ,但仍然存在相同的基本沙盒问题。

长话短说:不。

越狱是获取根源的必要条件,但不是充分条件。 应用程序默认情况下仍然是沙盒。

你可以做什么使你的应用程序以root权限运行,就是创build一个具有root:wheel权限和755权限的启动shell脚本,然后使用相同的所有权创build实际的可执行文件, 7555作为权限(即设置其“setuid”位) ,然后调用setuid(0);main()调用UIApplicationMain()之前。