5

iOS 设备越狱后,我们可以构建越狱应用程序(使用 theos),并将其安装在/Applications以 root 权限运行预加载应用程序的目录中。如果应用程序是用 Xcode 构建的,一旦安装,它就会进入/private/var/mobile/Applications/文件夹,该文件夹应该强制执行 Apple 沙箱(越狱前)。

所以,我的问题是:

  1. 对于越狱设备,应用程序会/private/var/mobile/Applications/以root权限还是mobile用户权限执行?

  2. 在 Android 的情况下,一旦获得 root 权限,应用程序必须通过执行su命令来获得 root 权限。iOS也是这样吗?

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

4

2 回答 2

8

长话短说:没有。

越狱是获得root的必要条件,但不是充分条件。默认情况下,应用程序仍将被沙盒化。

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

于 2013-04-12T10:28:05.640 回答
8

不反对任何H2CO3 所说的,但要添加一些进一步的澄清......

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

  • 即使在越狱的手机上,安装到/private/var/mobile/Applications/(†) 的应用程序也将被沙盒化,几乎(‡) 就像已入狱手机上的应用程序一样。因此,即使这些文件归用户所有,也不要读取其他(正常)应用程序的数据mobile

  • 有关 Cydia 等应用程序以 root 身份运行的过程的详细描述,请参阅此答案。或者,只需 ssh 进入你的手机,然后看看/Applications/Cydia.app/你自己。

  • 如果您只是将应用程序(不执行H2CO3 建议的操作)复制/安装到/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 提供,关于不同的越狱如何影响沙盒。长话短说:这取决于。


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

于 2013-04-12T11:23:15.503 回答