본문으로 건너뛰기

루트하이드(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 서비스를 끄면 감지를 피할 수 있습니다.