В чём особенности среды 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, чтобы избежать такой проверки.