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 スクリプトの実行時ルートを脱獄ルートに設定します。
つまり、deb 内の /Applications/XXTExplorer.app は実際には次の場所へインストールされます:
/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/Applications/XXTExplorer.app
これにより、deb でインストールした脱獄プラグインがシステムルートを汚染することを防げます。
一方で、XXTouch で os.execute または io.popen を使用する際には問題が生じます。
これらの関数は bash/zsh 経由で Shell スクリプトを実行するため、
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 に対応するシンボリックリンクもシステムルート内に作成されます。
上記のパスには、脱獄ルートとシステムルートのどちらからでも直接アクセスできます。
参考資料
Bootstrap 環境での XXTouch に関する説明
自動起動なし
Bootstrap-Roothide で半脱獄したデバイスでは、再起動して Bootstrap を再度有効にしても、XXTouch のバックグラウンドサービスは自動的に起動しません。
XXTouch App を手動で開く必要があります。App は自動的に終了して Starting XXTouch Daemon... と表示され、約 20 秒後にバックグラウンドサービスが使用可能になります。
SpringBoard サービスなし
Bootstrap を使用していて、Serotonin で SpringBoard インジェクションサービスを有効にしていない場合、XXTouch スクリプトの UI 関連機能は使用できません:
dialog、webviewなど、最前面のウィンドウに UI を作成する機能が影響を受けますalerthelperで SpringBoard のポップアップを処理する機能は動作しません
XXTouch を使用して Bootstrap-Roothide 環境で App に検出される可能性のあるファイルを削除する
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 は脱獄アプリをランダムなパスにインストールしますが、アプリの実行時の動作までは制限していません。
そのため、脱獄アプリの実行後に生成されたキャッシュなどのファイルは、引き続きシステムルート内の対応する場所へ書き込まれます。
また、App が SSH ポートを検出する場合もあります。必要に応じて、Bootstrap の設定画面で SSH サービスを無効にすると検出を回避できます。