Перейти к основному содержимому

В чём особенности среды roothide?

roothide — это третья среда джейлбрейка, отличающаяся от rootful и rootless.


Отличия от rootful и rootless

В отличие от традиционного джейлбрейка, в среде roothide корень джейлбрейка (jbroot) и системный корень (rootfs) изолированы друг от друга.
Корень джейлбрейка монтируется по случайному пути внутри системного корня, а системный корень обратно монтируется по пути корня джейлбрейка/rootfs/.

Системный корень rootfs

В среде roothide системный корень — это исходный корневой каталог системы iOS без каких-либо изменений и дополнительных путей.

Корень джейлбрейка jbroot

Корень джейлбрейка монтируется по случайному пути внутри системного корня.
Обычно он находится по адресу /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/ (длинная последовательность X — случайное значение).
Функция jbroot преобразует обычный путь в соответствующий путь внутри корня джейлбрейка.
Например, чтобы обратиться к /var/mobile/Media/1.txt внутри корня джейлбрейка, используйте jbroot("/var/mobile/Media/1.txt").
При выполнении в скрипте f = io.open(jbroot("/var/mobile/Media/1.txt"), "r") фактически открывается следующий файл:

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

Среда Shell

Как указано выше, корень джейлбрейка монтируется по случайному пути внутри системного корня.
Однако в среде Shell (например, в скрипте установки deb) невозможно заранее узнать точное расположение корня джейлбрейка внутри системного корня.
Поэтому roothide задаёт корень времени выполнения Shell-скриптов как корень джейлбрейка.
Иными словами, /Applications/XXTExplorer.app из deb фактически устанавливается по адресу:

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

Это гарантирует, что установленные из deb плагины джейлбрейка не загрязняют системный корень.
Но возникает следующая проблема: при использовании os.execute или io.popen в XXTouch
эти функции выполняют Shell-скрипты через bash/zsh,
поэтому вызов os.execute("/usr/bin/hidutil list") фактически выполняет команду:

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

В результате к путям системного корня нельзя напрямую обратиться из Shell.
Чтобы решить эту проблему, roothide монтирует системный корень обратно по адресу корня джейлбрейка/rootfs/.
Поэтому при выполнении в скрипте os.execute("/rootfs/usr/bin/hidutil list") фактически выполняется команда:

/usr/bin/hidutil list

Зеркалирование файлов и каталогов

Некоторые пути файлов и каталогов в корне джейлбрейка настроены как символические ссылки на исходный системный корень:

Путь в корне джейлбрейка
/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

Кроме того, путь скриптов XXTouch /var/mobile/Media/1ferver также связан символической ссылкой с соответствующим путём в системном корне.
К указанным путям можно напрямую обратиться и из корня джейлбрейка, и из системного корня.
Источник

Описание XXTouch в среде Bootstrap

Нет автоматического запуска

После перезагрузки устройства с полу-джейлбрейком Bootstrap-Roothide и повторной активации Bootstrap фоновая служба XXTouch не запускается автоматически.
Необходимо вручную открыть приложение XXTouch: оно автоматически завершится и покажет Starting XXTouch Daemon...; примерно через 20 секунд фоновая служба будет готова.

Нет службы рабочего стола

Если Bootstrap используется без активации службы внедрения рабочего стола через Serotonin, функции скриптов XXTouch, связанные с интерфейсом, недоступны:

  • функции создания интерфейса в окне верхнего уровня, такие как dialog и webview, работают с ограничениями;
  • функция alerthelper, обрабатывающая всплывающие окна рабочего стола, не работает.

Очистка файлов, которые могут обнаруживаться приложениями в среде 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')

Почему существуют эти файлы?
Хотя Roothide устанавливает приложения джейлбрейка в случайный путь, он не ограничивает поведение этих приложений во время выполнения.
Поэтому после запуска приложения джейлбрейка создаваемый им кэш и другие файлы по-прежнему записываются в соответствующее место системного корня.

Кроме того, приложение может проверять порт SSH. При необходимости отключите службу SSH в настройках Bootstrap, чтобы избежать такой проверки.