Quelles sont les particularités de l’environnement roothide ?
roothide est un troisième type d’environnement jailbreaké, différent de rootful et de rootless.
Différences avec rootful et rootless
Contrairement au jailbreak traditionnel, dans l’environnement roothide, la racine du jailbreak (jbroot) et la racine système (rootfs) sont isolées l’une de l’autre.
La racine du jailbreak est montée à un chemin aléatoire dans la racine système, tandis que la racine système est montée en sens inverse sous le chemin racine du jailbreak/rootfs/.
Racine système rootfs
Dans l’environnement roothide, la racine système est le répertoire racine d’origine du système iOS, sans aucune modification et sans chemin supplémentaire.
Racine du jailbreak jbroot
La racine du jailbreak est montée à un chemin aléatoire sous la racine système,
généralement /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/ (la longue suite de X est une valeur aléatoire).
La fonction jbroot permet de convertir un chemin ordinaire en chemin correspondant dans la racine du jailbreak.
Par exemple, pour accéder à /var/mobile/Media/1.txt dans la racine du jailbreak, utilisez jbroot("/var/mobile/Media/1.txt").
Lorsque le script exécute f = io.open(jbroot("/var/mobile/Media/1.txt"), "r"), le fichier effectivement ouvert est :
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/var/mobile/Media/1.txt
Environnement Shell
Comme indiqué précédemment, la racine du jailbreak est montée à un chemin aléatoire dans la racine système.
Cependant, dans l’environnement Shell (par exemple dans un script d’installation deb), il est impossible de connaître à l’avance son emplacement précis dans la racine système.
roothide définit donc la racine d’exécution des scripts Shell comme étant la racine du jailbreak.
Autrement dit, /Applications/XXTExplorer.app dans le deb sera effectivement installé à :
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/Applications/XXTExplorer.app
Cela garantit que les plugins jailbreakés installés par le deb ne polluent pas la racine système.
Mais cela pose un problème : lorsque XXTouch utilise os.execute ou io.popen,
comme ces fonctions exécutent les scripts Shell via bash/zsh,
l’appel os.execute("/usr/bin/hidutil list") exécute en réalité la commande suivante :
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/usr/bin/hidutil list
Il devient alors impossible d’accéder directement aux chemins de la racine système depuis Shell.
Pour y remédier, roothide monte la racine système en sens inverse sous racine du jailbreak/rootfs/.
Ainsi, lorsque le script exécute os.execute("/rootfs/usr/bin/hidutil list"), la commande réellement exécutée est :
/usr/bin/hidutil list
Miroir des fichiers et répertoires
Certains chemins de fichiers et de répertoires de la racine du jailbreak sont configurés comme des liens symboliques vers la racine système d’origine :
| Chemin dans la racine du jailbreak |
|---|
| /dev |
| /private/preboot |
| /var/containers |
| /var/mobile/Containers |
| /usr/share/misc/trace.codes |
| /usr/share/zoneinfo |
| /etc/hosts.equiv |
| /etc/hosts |
| /var/run/utmpx |
| /var/db/timezone |
| /System/Library/CoreServices/SystemVersion.plist |
En outre, le chemin des scripts XXTouch /var/mobile/Media/1ferver fera également l’objet d’un lien symbolique correspondant dans la racine système.
Les chemins ci-dessus sont directement accessibles depuis la racine du jailbreak et la racine système.
Source de référence
XXTouch dans l’environnement Bootstrap
Pas de démarrage automatique
Sur un appareil utilisant le semi-jailbreak Bootstrap-Roothide, après un redémarrage et une nouvelle activation de Bootstrap, le service en arrière-plan de XXTouch ne démarre pas automatiquement.
Vous devez ouvrir manuellement l’app XXTouch ; l’app se ferme automatiquement et affiche Starting XXTouch Daemon.... Le service en arrière-plan est prêt au bout d’environ 20 secondes.
Pas de service de bureau
Si Bootstrap est utilisé sans que le service d’injection du bureau ait été activé via Serotonin, les fonctions liées à l’interface dans les scripts XXTouch sont indisponibles :
- les fonctions qui créent une interface dans la fenêtre de premier plan, telles que
dialogetwebview, sont affectées ; - la fonction
alerthelperqui traite les alertes du bureau ne fonctionne pas.
Nettoyer avec XXTouch les fichiers susceptibles d’être détectés par les apps dans l’environnement Bootstrap-Roothide
local noexecute = require('no_os_execute')
function remove_sys_app_caches(name)
noexecute.rm_rf('/var/root/Library/WebKit/'..name)
noexecute.rm_rf('/var/root/Library/Caches/'..name)
noexecute.rm_rf('/var/root/Library/HTTPStorages/'..name)
noexecute.rm_rf('/var/root/Library/SplashBoard/Snapshots/'..name)
noexecute.rm_rf('/var/root/Library/Saved Application State/'..name..'.savedState')
noexecute.rm_rf('/var/root/Library/Preferences/'..name..'.plist')
noexecute.rm_rf('/var/root/Library/WebKit/'..name)
noexecute.rm_rf('/var/mobile/Library/Caches/'..name)
noexecute.rm_rf('/var/mobile/Library/HTTPStorages/'..name)
noexecute.rm_rf('/var/mobile/Library/SplashBoard/Snapshots/'..name)
noexecute.rm_rf('/var/mobile/Library/Saved Application State/'..name..'.savedState')
noexecute.rm_rf('/var/mobile/Library/Preferences/'..name..'.plist')
end
remove_sys_app_caches('com.opa334.Dopamine')
remove_sys_app_caches('org.coolstar.SileoStore')
remove_sys_app_caches('ws.hbang.Terminal')
remove_sys_app_caches('pisshill.usprebooter')
remove_sys_app_caches('com.samiiau.loader')
remove_sys_app_caches('kr.xsf1re.vnodebypass')
remove_sys_app_caches('com.serena.Antoine')
remove_sys_app_caches('wiki.qaq.TrollFools')
remove_sys_app_caches('com.tigisoftware.Filza')
remove_sys_app_caches('com.tigisoftware.Filza000')
remove_sys_app_caches('com.tigisoftware.ADManager')
remove_sys_app_caches('com.ichitaso.otadisablerts')
remove_sys_app_caches('chaoge.ChargeLimiter')
remove_sys_app_caches('com.xxtouch.XXTExplorer')
noexecute.rm_rf('/private/var/mobile/Library/Filza')
noexecute.rm_rf('/private/var/mobile/.ssh')
noexecute.rm_rf('/private/var/root/.ssh')
noexecute.rm_rf('/private/var/mobile/offsets.txt')
noexecute.rm_rf('/private/var/mobile/offsets.txt')
noexecute.rm_rf('/private/var/mobile/Serotonin.jp2')
noexecute.rm_rf('/private/var/mobile/Documents/kfund_offsets.plist')
noexecute.rm_rf('/private/var/iomfb_bics_daemon')
Pourquoi ces fichiers existent-ils ?
Bien que Roothide installe les apps jailbreakées dans des chemins aléatoires, il ne limite pas leur comportement à l’exécution.
Ainsi, après leur exécution, les apps jailbreakées écrivent toujours leurs caches et autres fichiers à l’emplacement correspondant de la racine système.
En outre, les apps peuvent détecter le port SSH. Si nécessaire, désactivez le service SSH dans l’interface de réglages de Bootstrap pour éviter cette détection.