본문으로 건너뛰기

루트하이드(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 앱을 수동으로 열어야 합니다. 앱은 자동으로 종료되면서 Starting XXTouch Daemon...을 표시하며, 약 20초 후 백그라운드 서비스를 사용할 수 있습니다.

데스크톱 서비스 없음​

Bootstrap을 사용하지만 Serotonin으로 데스크톱 주입 서비스를 활성화하지 않은 경우 XXTouch 스크립트의 UI 관련 기능을 사용할 수 없습니다:

  • dialog, webview처럼 최상위 창에 UI를 만드는 기능이 영향을 받습니다
  • alerthelper로 데스크톱 팝업을 처리하는 기능이 작동하지 않습니다

XXTouch를 사용하여 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 포트를 감지할 수도 있습니다. 필요한 경우 Bootstrap 설정 화면에서 SSH 서비스를 끄면 감지를 피할 수 있습니다.