ios 앱 분석 준비

탈옥

palera1n

checkm8 취약점으로 탈옥하는 방식인데, A11 기기에서 전부 쉽게 탈옥이 가능하다.

반탈 도구이기 때문에 재부팅 하면 풀리고, passcode를 설정하는 순간 재부팅되면서 풀린다.

Disconnected 메시지 -> 애플로고 -> 체크메이트 로고 -> 탈옥성공

  • amd CPU 라면 안된다는 이야기가 있음 (실제로 실패함)
  • usb-C 타입으로는 실패한다는 이야기가 있음 (실제로 실패함)
  • 내 경우에는 disconnect 됐다는 프롬프트 이후 기기가 계속 부팅이됐는데, disconnect 메시지 떴을때 그냥 usb를 뺐다가 다시 꽂으니 pongoOS로 넘어가면서 탈옥이 됐다. 타이밍을 잘 맞춰야한다. 애플로고 뜰때까지 여러번 뺐다가 꽂으면 될 가능성이 높다.
  • 현재까지 제일 좋은 조합: 펌웨어 순정으로 플래시(이 플래시 타입도 여러가지로 해볼만함) + usb 부팅 + A타입 케이블로 연결 + intel CPU

잘안되면 시간끄는것보다 그냥 새로 플래시하고 하는게 낫다. 어차피 Retain User’s Data 옵션으로 플래시하면 데이터는 삭제안됨

558a8d56-4db5-4369-9320-24a2d2bc954a
558a8d56-4db5-4369-9320-24a2d2bc954a

DFU 모드 만들기 (Iphone X)

  1. 최신 itunes가 설치된 PC에 USB 연결
    • palera1n 을 실행하면 리커버리모드로 갔다가 설명따라서 DFU로 갈 수 있다.
  2. 볼륨업 살짝볼륨다운 살작오른쪽버튼 길게누르기(10초정도 누르면 꺼짐)
  3. 꺼졌을때 떼고 바로 볼륨다운 + 오른쪽버튼 (3~5초)
  4. 대충 시간 지나면 오른쪽버튼 떼고 볼륨다운만 누르고있기 (10초쯤)
  5. 그냥 까만화면에 PC에서 DFU 모드라고 인식되면 성공. 너무 길게누르면 애플로고 떠서 다시해야됨

DFU Ipad 7

  1. 전원버튼 + 홈버튼 4초
  2. 까만화면 되면 전원버튼 손떼고 10초
  3. palera1n 켜놓고 하다보면 DFU 진입됨

windows

amd CPU 때문인지 실패함

  1. https://winra1n.net/ 에서 Winra1n 설치
  2. AppleMobileDeviceSupport64.msi, UsbDk_…msi 를 설치한다
  3. WinRa1n2.1.exe 로 탈옥한다.

mac (m1)

중간에 아이폰이 재부팅 되면서 DFU에서 빠져나오는데, 다시 DFU로 만들고 진행하면 된다.

sudo /bin/sh -c "$(curl -fsSL https://static.palera.in/scripts/install.sh)"
sudo palera1n -l(rootless) or -f(rootful)

ubuntu

  • rootful : RootFS(/ 디렉터리) 를 리마운트 하면서 쓰기 권한을 얻고, 과거의 트윅도 호환되기 때문에 마음대로 설치할 수 있다. rootful에서는 안정성을 위해 fakeFS를 사용한다. 점점 트윅 지원이 줄어들기 때문에 rootless가 더 낫다.
  • rootless : 사용자 영역에 /var/jb 경로를 만들고 여기에서 트윅 설치 등 쓰기작업을 한다. rootful 트윅 호환을 위해 overlayFS를 활용한 fakeFS 를 설정해서 /var/jb 경로를 / 경로에 매핑하면 기존 트윅과의 호환성도 높다.
# install
sudo /bin/sh -c "$(curl -fsSL https://static.palera.in/scripts/install.sh)"
sudo systemctl stop usbmuxd
sudo usbmuxd -f -p

sudo palera1n -l(rootless) or -f(rootful)

usb에 palera1n 설치

usb로 부팅해서 실행하는 방식인데 ubuntu 에서도 잘 안됐던 기기도 탈옥에 성공했다. usb드라이버가 호환이 더 잘되는게 들어가있을수도 있고 이유는 잘 모르겠음..
이 방식도 역시 amd CPU 에서는 실패한다. (UAF race 에서 실패함)

  1. ventoy 로 usb를 플래시하고 palera1n.iso 파일을 복사한다.
  2. bios에서 secureboot를 끄고 USB 부팅

도파민

sideloadly로 도파민 설치 중 로컬캐시 임시 폴더에 압축을 해제하는데, 윈도우 디펜더가 악성코드로 인식하기 때문에 실시간 감시를 꺼둬야 한다.

  1. iOS 16 버전 이상은 설정에서 개발자 모드로 변경.
    설정 > 개인 정보 보호 > 맨아래에 개발자모드 토글
    토글이 없다면 xcode로 한번 연결해서 앱을 실행시킨 뒤에 확인해보면 된다.

  2. sideloadly 로 ipa 올려서 설치하기

    112d256c-ca34-49e5-9b3f-bf9e24787320
    112d256c-ca34-49e5-9b3f-bf9e24787320

  3. 15.4 버전 기준 설정 > 일반 > VPN 및 기기 관리 > 개발자 프로필 신뢰 설정
    위에서 개발자 설정을 못했기 때문에 그냥 여기에서 하면된다.

  4. 그냥 앱 실행해서 탈옥 버튼 누르면 끝난다..

frida 사용하기

  1. Frida 트윅 설치

  2. frida-ps
    아이폰을 연결하면 버그 때문인지 frida가 usb가 두개가 잡히는데, 위에꺼를 잡으려고 해서 에러가 발생한다.

    49d51987-da4d-498f-895e-d9197eab37c6
    49d51987-da4d-498f-895e-d9197eab37c6

    이걸 해결하려면 frida-ls-devices 명령으로 device id 를 찾아서 연결하면 잘 연결된다.
    f5e899bf-d9d7-4c6c-b4e9-e37ff7d2b01f
    f5e899bf-d9d7-4c6c-b4e9-e37ff7d2b01f

  3. Bundle Id 찾기
    안드로이드의 패키지명처럼 spawn 방식으로 하려면 Bundle ID 로 frida 스크립트를 실행시켜야한다.

    • 직접 찾으려면 /var/containers/Bundle/Application/<APP_ID>/Target.app/Info.plist 에서 찾을 수 있지만, 바이너리 파일로 되어있어서 보기 힘들다.
    • https://offcornerdev.com/bundleid.html
      fd38922a-aa8f-4853-b5a2-4213d1676feb
      fd38922a-aa8f-4853-b5a2-4213d1676feb
    • 3uTools 에서도 확인가능
      d77274dc-56b9-4aa5-ab8a-867b294a055c
      d77274dc-56b9-4aa5-ab8a-867b294a055c
  4. frida 스크립트 실행.
    frida -D c63c5f7eb01ff22fc07f00457461f767f646201a -f com.eCareme.ASUSWebStorage -l hook.js

앱 추출

iGameGod

  1. iGameGod 설치 (repo: https://iosgods.com/repo)
  2. iGDecrypt → 원하는 앱 토글 → Play → Decrypt & IPA 실행
    • 복호화된 IPA의 경로를 확인할 수 있다.
  3. openssh 설치
  4. terminal 설치 후 비번 변경
    sudo passwd root     # selio 설치할때 입력했던 비밀번호, 그 후 루트 비번세팅
    
  5. 설정에서 기기의 ip 확인
  6. 같은 네트워크에서 ssh root@iphone-ip-addr 로 접근해서 추출된 ipa 경로 확인
    • /var/jb/var/mobile/Documents/Decrypted/ 또는 /private/var/mobile/Documents/Decrypted이 경로이다.
  7. scp root@<iOS_기기_IP>:<파일_경로> <로컬_저장_경로>

frida-ios-dump

https://github.com/AloneMonkey/frida-ios-dump

iGameGod 은 앱이 계속 실행가능한 상태여야 덤프가 가능하다. 어떤 앱을 분석하던 중 탈옥탐지 메시지가 발생해서 iGameGod 으로는 덤프되지 않는 문제가 있었고, frida-ios-dump로 해결할 수 있었다.

ssh 설정, frida 설정이 완료된 이후 사용할 수 있다.

스크립트를 조금 수정해야 하는데, frida 세팅할때 봤던 것 처럼 -U 로 접근할 수 없게되어 frida-ls-devices 로 얻은 id 를 사용해야 한다.

843fa6a6-c61e-4c66-846e-6a3d0611b1fe
843fa6a6-c61e-4c66-846e-6a3d0611b1fe

나중에 스크립트 수정해서 올려두면 좋을듯

기타 팁

특정지역 앱 설치

  • 설정 > 아이디 > 미디어 및 구입 항목 > 국가 / 지역
  • 일본으로 변경하려면 작성할게 있어서 키보드 미리 세팅해야함
    • 우편번호 대충 812-0012

트윅, 툴 모음

Zebra에서 설치할때 편집 길게 누르면 버전을 선택할 수 있다.
https://ios-repo-updates.com 에서 deb로 받을수도있음 dpkg -i <*.deb>로 설치

  • WIFI Widget - NetState
    • 이 앱은 앱스토어 앱인데, 현재 아이피 주소를 표시해주는 위젯을 생성할 수 있다.
  • openssh
  • newterm
    • 터미널 앱
  • appstore++
    • sileo(zebra)에서 기본 트윅. (rootful 에서 사용가능)
    • 낮은 버전의 앱 설치 가능. 앱스토어에서 설치한 앱들의 버전을 선택할 수 있게 함.
    • appstore++ 앱의 앱리스트에서 앱을 길게 누르면 설정가능
    • 애플이 공식적으로 호스팅중인 서명된 앱을 설치하는 원리로 동작
  • frida
  • iGameGod
  • TrollStore
    • CoreTrust 취약점(AMFI 서명 우회)을 이용해 만료 없이 IPA를 영구 설치하는 툴 (iOS 14.0b2 ~ 16.6.1/17.0 일부까지 지원)
    • IPA를 따로 찾아야하기 때문에 IPA가 지원되지 않는 앱은 사용불가
    • 앱스토어에서 받은 IPA들은 FairPlay DRM이 걸려있기 때문에 IPA를 뽑아도 설치불가
  • appstore++ TrolStore
    • appstore++가 원래 rootful에서만 지원되기 때문에 appstore++ Trollstore 를 IPA로 받아서 트롤스토어를 사용해서 설치하는 방법임 rootless로 사용할 수 있게된다.
    • https://github.com/CokePokes/AppStorePlus-TrollStore
    • 깃허브에서 ipa 다운받아서 트롤스토어로 설치
  • muffinStore
    • https://github.com/mineek/MuffinStore
    • 트롤스토어에서 다운그레이드 하기 위해서는 이미 설치가되어있어야 하는데, 앱스토어에서는 최신버전 기준 ios버전이 맞지 않으면 설치가 안된다.
    • 하지만 이걸 이용하면 설치되지 않은 앱도 낮은버전 설치가 가능하다. (이거 맞나? 최신버전 그냥 설치되는데? 나중에 안되면 해보자)
    • 앱스토어 앱 설치페이지에서 공유링크 복사해서 설치하면 버전 선택이 가능하다.

20251030 기준 문제점

rootful vs rootless

  • rootful에는 Trollstore Lite 가 Sileo에 없다.
    • trollstorehelper deb를 받아서 설치하고 트롤스토어 설치하면됨.
  • rootless는 igg decrypt 덤프 실패 버전낮추면 될수도? (근데 Sileo에서 제공하는 낮은버전 써도안됨)
    • rootful에서는 frida가 되니까 frida-ios-dump를 사용하면 될듯

Frida spawn 안되는것

탈옥 후 dpkg 문제

  • deb를 설치하려고 할때 dpkg: warning: package architecture (iphoneos-arm64) does not match system (iphoneos-arm) 이런 에러가 발생한다.
  • 그냥 dpkg가 arm으로 설치돼서 그런거임 –force 가 가능하긴 하다. 될지안될진 모름
    하드웨어 아키텍쳐 자체는 arm64인데, dpkg만 이상함..
gimdonghyeon-ui-iPhone:/var/mobile root# uname -a
Darwin gimdonghyeon-ui-iPhone 22.6.0 Darwin Kernel Version 22.6.0: Tue Jul  2 20:47:35 PDT 2024; root:xnu-8796.142.1.703.8~1/RELEASE_ARM64_T8015 iPhone10,6 arm Darwin
gimdonghyeon-ui-iPhone:/var/mobile root# sysctl -n hw.optional.arm64
1
gimdonghyeon-ui-iPhone:/var/mobile root# dpkg --print-architecture
iphoneos-arm
gimdonghyeon-ui-iPhone:/var/mobile root# dpkg --force-architecture -i frida_17.4.2_iphoneos-arm64.deb

Comments

ESC
Type to search...