メインコンテンツまでスキップ

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 関連機能は使用できません:

  • dialogwebview など、最前面のウィンドウに 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 サービスを無効にすると検出を回避できます。