Une fois jailbreaké, les applications iOS fonctionneront-elles avec les privilèges root?

Une fois qu'un appareil iOS est jailbreaké, nous pouvons créer des applications de jailbreak (avec theos) et il est installé dans le directory /Applications où les applications préchargées s'exécutent avec les privilèges root. Si une application est compilée avec Xcode, une fois celle-ci installée, elle entre dans le dossier /private/var/mobile/Applications/ , qui est censé avoir un sandbox Apple (avant jailbreak).

Donc, les questions que j'ai sont:

  1. Pour un appareil jailbreaké, les applications dans /private/var/mobile/Applications/ seront-elles exécutées avec des privilèges root ou avec mobile privilèges d'user mobile ?

  2. Dans le cas d'Android, une fois enracinées, les applications devront get des privilèges root en exécutant la command su . Est-ce le cas quand il s'agit d'iOS aussi bien?

Je voudrais comprendre la différence entre ces deux options de développement (Theos / Xcode) et comment cela affecte les opérations que mon application peut effectuer.

Je ne suis pas en désaccord avec quoi que ce soit d'autre que H2CO3 , mais pour append quelques précisions …

  • Les applications installées dans /private/var/mobile/Applications/ (†) avec Xcode fonctionneront avec mobile privilèges de l'user mobile , même sur les téléphones jailbreakés.

  • Même sur un téléphone jailbreaké, les applications installées dans /private/var/mobile/Applications/ (†) seront presque tout le monde (ou presque ) comme des applications sur un téléphone en prison. Donc, ne pas lire datatables des autres applications (normales), même si ces files sont la propriété de l'user mobile .

  • Pour une bonne description du process que les applications comme Cydia utilisent pour s'exécuter en tant que root, voir cette réponse . Ou, juste ssh dans votre téléphone, et jetez un oeil à l'intérieur /Applications/Cydia.app/ vous-même.

  • Si vous copyz / installez simplement une application (sans faire ce que H2CO3 a suggéré ) à /Applications/ , elle ne sera pas en sandbox, mais elle fonctionnera quand même avec mobile privilèges 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 

(& ddagger;) Voici une bonne discussion, avec l'aide de Saurik, sur la façon dont différents jailbreaks peuvent affecter le bac à sable . Longue histoire courte: cela dépend.


(†) Mise à jour : dans les versions récentes d'iOS, l'location des applications tierces a été déplacé dans /var/mobile/Containers , et plus tard dans /var/containers/ , mais les mêmes problèmes de sandbox de base subsistent.

Longue histoire courte: non.

Le jailbreaking est une condition nécessaire mais pas suffisante pour acquérir une racine. Les applications seront toujours en sandbox par défaut.

Ce que vous pouvez faire pour que votre application s'exécute avec les privilèges root crée un script shell de démarrage qui possède root:wheel ownership et 755 permissions, puis crée votre véritable exécutable avec la même propriété, 7555 comme permissions (ie définissez son bit "setuid") , puis appelez setuid(0); depuis main() , avant d'appeler UIApplicationMain() .