¿Qué tiene de especial un entorno roothide?
roothide es un tercer entorno de jailbreak, distinto de rootful y rootless.
Diferencias frente a rootful y rootless
A diferencia del jailbreak tradicional, en un entorno roothide la raíz del jailbreak (jbroot) y la raíz del sistema (rootfs) están aisladas entre sí.
La raíz del jailbreak se monta en una ruta aleatoria dentro de la raíz del sistema, y la raíz del sistema también se monta de forma inversa en la ruta raíz del jailbreak/rootfs/.
La raíz del sistema rootfs
En un entorno roothide, la raíz del sistema es el directorio raíz original del sistema iOS, sin modificaciones y sin rutas adicionales.
La raíz del jailbreak jbroot
La raíz del jailbreak se monta en una ruta aleatoria bajo la raíz del sistema.
Normalmente se encuentra en /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/ (la larga secuencia de X es un valor aleatorio).
La función jbroot convierte una ruta normal en la ruta correspondiente dentro de la raíz del jailbreak.
Por ejemplo, para acceder a /var/mobile/Media/1.txt dentro de la raíz del jailbreak, utilice jbroot("/var/mobile/Media/1.txt").
Cuando el script ejecuta f = io.open(jbroot("/var/mobile/Media/1.txt"), "r"), el archivo que se abre realmente es:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/var/mobile/Media/1.txt
Entorno de shell
Como se ha explicado, la raíz del jailbreak se monta en una ruta aleatoria dentro de la raíz del sistema.
Sin embargo, en un entorno de shell (por ejemplo, en un script de instalación deb) no se puede saber de antemano su ubicación concreta dentro de la raíz del sistema.
Por ello, roothide establece la raíz de ejecución de los scripts de shell como la raíz del jailbreak.
Es decir, /Applications/XXTExplorer.app dentro del paquete deb se instala realmente en:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/Applications/XXTExplorer.app
Esto garantiza que los plugins de jailbreak instalados por deb no contaminen la raíz del sistema.
Sin embargo, introduce un problema: cuando XXTouch utiliza os.execute o io.popen, estas funciones ejecutan scripts de shell mediante bash/zsh.
Por tanto, la llamada os.execute("/usr/bin/hidutil list") ejecuta en realidad el comando:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/usr/bin/hidutil list
Esto impide acceder directamente a las rutas de la raíz del sistema desde el shell.
Para solucionarlo, roothide monta de forma inversa la raíz del sistema en raíz del jailbreak/rootfs/.
Así, cuando el script ejecuta os.execute("/rootfs/usr/bin/hidutil list"), el comando que se ejecuta realmente es:
/usr/bin/hidutil list
Espejos de archivos y directorios
Algunas rutas de archivos y directorios de la raíz del jailbreak se han configurado como enlaces simbólicos a la raíz del sistema original:
| Ruta en la raíz del 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 |
Además, la ruta de scripts de XXTouch /var/mobile/Media/1ferver también crea un enlace simbólico correspondiente en la raíz del sistema.
Las rutas anteriores se pueden utilizar directamente tanto en la raíz del jailbreak como en la raíz del sistema.
Fuente de referencia
Información de XXTouch en un entorno Bootstrap
Sin inicio automático
En un dispositivo con el jailbreak semicompleto Bootstrap-Roothide, el servicio en segundo plano de XXTouch no se inicia automáticamente después de reiniciar y volver a activar Bootstrap.
Debe abrir manualmente la app XXTouch. La aplicación se cerrará automáticamente y mostrará Starting XXTouch Daemon...; el servicio en segundo plano estará listo unos 20 segundos después.
Sin servicio de escritorio
Si utiliza Bootstrap pero no ha activado mediante Serotonin el servicio de inyección en el escritorio, las funciones relacionadas con la interfaz de los scripts de XXTouch no estarán disponibles:
- Las funciones que crean interfaces en la ventana superior, como
dialogywebview, se verán afectadas. - La función
alerthelperpara gestionar ventanas emergentes del escritorio no funcionará.
Utilizar XXTouch para eliminar archivos que las apps podrían detectar en 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')
¿Por qué existen estos archivos? Aunque Roothide instala las aplicaciones de jailbreak en una ruta aleatoria, no limita el comportamiento de estas aplicaciones durante su ejecución. Por ello, las cachés y otros archivos que generan las aplicaciones de jailbreak siguen escribiéndose en las ubicaciones correspondientes de la raíz del sistema.
Además, una app puede comprobar el puerto SSH. Si es necesario, desactive el servicio SSH en la interfaz de ajustes de Bootstrap para evitar que se detecte.