Môi trường roothide có gì đặc biệt?
Roothide là loại môi trường jailbreak thứ ba, khác với rootful và rootless.
Khác biệt so với rootful và rootless
Không giống jailbreak truyền thống, roothide tách riêng “thư mục gốc jailbreak (jbroot)” và “thư mục gốc hệ thống (rootfs)”.
jbroot được gắn bên trong rootfs tại một đường dẫn ngẫu nhiên, đồng thời rootfs cũng được bind mount ngược lại tại jbroot/rootfs/.
Thư mục gốc hệ thống (rootfs)
Trong roothide, thư mục gốc hệ thống là thư mục gốc của iOS. Thư mục này không bị sửa đổi và không chứa đường dẫn bổ sung.
Thư mục gốc jailbreak (jbroot)
Trong roothide, jbroot được gắn bên dưới rootfs tại một đường dẫn ngẫu nhiên,
thường có dạng /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/, trong đó các ký tự X là ngẫu nhiên.
Dùng hàm jbroot để chuyển đường dẫn thông thường thành đường dẫn tương ứng trong jbroot.
Ví dụ, để truy cập /var/mobile/Media/1.txt bên trong jbroot, dùng jbroot("/var/mobile/Media/1.txt").
Trong kịch bản, f = io.open(jbroot("/var/mobile/Media/1.txt"), "r") thực tế sẽ mở:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/var/mobile/Media/1.txt
Môi trường shell
Như đã nêu, jbroot được gắn tại một đường dẫn ngẫu nhiên bên trong rootfs.
Tuy nhiên, trong môi trường shell, chẳng hạn kịch bản cài đặt deb, không thể biết jbroot được gắn ở đâu trong rootfs.
Do đó, roothide đặt thư mục gốc khi chạy kịch bản shell thành jbroot.
Vì vậy, /Applications/XXTExplorer.app trong một gói deb sẽ được cài vào:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/Applications/XXTExplorer.app
Cơ chế này bảo đảm các gói jailbreak không làm thay đổi thư mục gốc hệ thống.
Tuy nhiên, nó gây ra vấn đề khi dùng os.execute hoặc io.popen trong kịch bản XXTouch,
vì các lệnh này chạy qua bash/zsh. Ví dụ, gọi os.execute("/usr/bin/hidutil list") thực tế sẽ chạy:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/usr/bin/hidutil list
Điều này ngăn shell truy cập trực tiếp đường dẫn trong rootfs.
Để giải quyết, roothide bind mount thư mục gốc hệ thống trở lại jbroot/rootfs/.
Vì vậy, os.execute("/rootfs/usr/bin/hidutil list") thực tế sẽ chạy:
/usr/bin/hidutil list
Các tệp và thư mục được ánh xạ
Một số tệp và thư mục trong jbroot được liên kết tượng trưng đến rootfs gốc:
| Đường dẫn trong 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 |
Ngoài ra, thư mục gốc kịch bản XXTouch /var/mobile/Media/1ferver trong jbroot cũng được liên kết tượng trưng vào rootfs.
Các đường dẫn này có thể truy cập từ cả jbroot lẫn rootfs.
Tài liệu tham khảo
XXTouch trong môi trường Bootstrap
Không tự động khởi động
Trên thiết bị dùng bán jailbreak Bootstrap-Roothide, sau khi khởi động lại và kích hoạt lại Bootstrap,
tiến trình nền XXTouch không tự khởi động. Hãy mở ứng dụng XXTouch; ứng dụng sẽ tự đóng và hiển thị Starting XXTouch Daemon....
Tiến trình nền sẽ hoạt động sau khoảng 20 giây.
Không chèn vào SpringBoard
Nếu dùng Bootstrap mà không bật chèn SpringBoard qua Serotonin, các chức năng kịch bản liên quan đến giao diện sẽ không khả dụng:
dialog,webviewvà các chức năng khác tạo giao diện cấp cao nhất sẽ bị ảnh hưởngalerthelperkhông thể xử lý cảnh báo SpringBoard
Dùng XXTouch để xóa các tệp có thể bị phát hiện trong 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')
Vì sao các tệp này tồn tại? Mặc dù roothide cài ứng dụng jailbreak dưới đường dẫn jbroot ngẫu nhiên, môi trường chạy của ứng dụng không bị giới hạn trong các đường dẫn đó. Do vậy, sau khi chạy, bộ nhớ đệm hoặc tệp khác vẫn có thể được ghi vào vị trí tương ứng trong rootfs.
Ứng dụng cũng có thể phát hiện cổng SSH. Nếu cần, hãy tắt SSH trong phần cài đặt Bootstrap để tránh bị phát hiện.