Pular para o conteúdo principal

O que há de especial no ambiente roothide?

O roothide é um terceiro ambiente de jailbreak, diferente dos ambientes rootful e rootless.


Diferenças em relação aos ambientes rootful e rootless​

Ao contrário do jailbreak tradicional, no ambiente roothide o jbroot e o rootfs são isolados um do outro.
O jbroot é montado em um caminho aleatório dentro do rootfs, que também é montado de volta no caminho jbroot/rootfs/.

A raiz do sistema rootfs​

No ambiente roothide, o rootfs é o diretório raiz original do sistema iOS, sem modificações e sem caminhos adicionais.

A raiz do jailbreak jbroot​

O jbroot é montado em um caminho aleatório sob o rootfs,
normalmente /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/ (a sequência de X é um valor aleatório).
A função jbroot converte um caminho comum no caminho correspondente dentro do jbroot.
Por exemplo, para acessar /var/mobile/Media/1.txt no jbroot, use jbroot("/var/mobile/Media/1.txt").
Quando o script executa f = io.open(jbroot("/var/mobile/Media/1.txt"), "r"), o arquivo aberto na prática é:

/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/var/mobile/Media/1.txt

Ambiente do Shell​

Como explicado acima, o jbroot é montado em um caminho aleatório dentro do rootfs.
No ambiente do Shell (por exemplo, em um script de instalação deb), não é possível saber antecipadamente sua localização exata no rootfs.
Por isso, o roothide define o jbroot como a raiz de execução dos scripts do Shell.
Isso significa que /Applications/XXTExplorer.app em um deb é instalado, na prática, em:

/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/Applications/XXTExplorer.app

Isso garante que os plug-ins de jailbreak instalados pelo deb não poluam o rootfs.
Mas também introduz um problema: ao usar os.execute ou io.popen no XXTouch,
essas funções executam scripts do Shell por meio do bash/zsh.
Assim, chamar os.execute("/usr/bin/hidutil list") executa, na prática, o comando:

/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/usr/bin/hidutil list

Isso impede o acesso direto aos caminhos do rootfs a partir do Shell.
Para resolver isso, o roothide monta o rootfs de volta em jbroot/rootfs/.
Assim, quando o script executa os.execute("/rootfs/usr/bin/hidutil list"), o comando executado é:

/usr/bin/hidutil list

Espelhamento de arquivos e diretórios​

Alguns caminhos de arquivos e diretórios no jbroot são links simbólicos para o rootfs original:

Caminho no jbroot
/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

Além disso, o caminho de scripts do XXTouch, /var/mobile/Media/1ferver, também tem um link simbólico correspondente criado no rootfs.
Todos os caminhos acima podem ser acessados diretamente tanto pelo jbroot quanto pelo rootfs.
Fonte de referência

XXTouch no ambiente Bootstrap​

Sem inicialização automática​

Em um dispositivo com o jailbreak parcial Bootstrap-Roothide, o serviço em segundo plano do XXTouch não inicia automaticamente depois de reiniciar e reativar o Bootstrap.
Abra manualmente o aplicativo XXTouch; ele fechará automaticamente e exibirá Starting XXTouch Daemon.... O serviço ficará pronto após cerca de 20 segundos.

Sem serviço de injeção na tela inicial​

Se o Bootstrap for usado sem ativar o serviço de injeção na tela inicial pelo Serotonin, os recursos de interface dos scripts do XXTouch ficarão indisponíveis:

  • recursos que criam interfaces em janelas de nível superior, como dialog e webview, serão afetados;
  • o recurso alerthelper para lidar com pop-ups da tela inicial não funcionará.

Limpar, com o XXTouch, arquivos que podem ser detectados por aplicativos no ambiente 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 que esses arquivos existem?
Embora o Roothide instale os aplicativos de jailbreak em caminhos aleatórios, ele não limita o comportamento desses aplicativos durante a execução.
Por isso, caches e outros arquivos criados pelos aplicativos de jailbreak continuam sendo gravados nos locais correspondentes do rootfs.

Além disso, um aplicativo pode verificar a porta SSH. Se necessário, desative o serviço SSH nas configurações do Bootstrap para evitar essa detecção.