ios 앱 분석 준비
2024년 12월 16일
탈옥 #
palera1n #
checkm8 취약점으로 탈옥하는 방식인데, A11 기기에서 전부 쉽게 탈옥이 가능하다.
반탈 도구이기 때문에 재부팅 하면 풀리고, passcode를 설정하는 순간 재부팅되면서 풀린다.
Disconnected 메시지 -> 애플로고 -> 체크메이트 로고 -> 탈옥성공
- amd CPU 라면 안된다는 이야기가 있음 (실제로 실패함)
- usb-C 타입으로는 실패한다는 이야기가 있음 (실제로 실패함)
- 내 경우에는 disconnect 됐다는 프롬프트 이후 기기가 계속 부팅이됐는데, disconnect 메시지 떴을때 그냥 usb를 뺐다가 다시 꽂으니 pongoOS로 넘어가면서 탈옥이 됐다. 아마 fakefs가 완벽하게 클린되지 않았을때 발생하는 문제로 생각된다.
잘안되면 시간끄는것보다 그냥 새로 플래시하고 하는게 낫다. 어차피 Retain User’s Data 옵션으로 플래시하면 데이터는 삭제안됨
DFU 모드 만들기 (Iphone X) #
- 최신 itunes가 설치된 PC에 USB 연결
볼륨업 살짝→볼륨다운 살작→오른쪽버튼 길게누르기(10초정도 누르면 꺼짐)- 꺼졌을때 떼고 바로
볼륨다운 + 오른쪽버튼(3~5초) - 대충 시간 지나면
오른쪽버튼 떼고 볼륨다운만 누르고있기(10초쯤) - 그냥 까만화면에 PC에서 DFU 모드라고 인식되면 성공. 너무 길게누르면 애플로고 떠서 다시해야됨
windows #
amd CPU 때문인지 실패함
- https://winra1n.net/ 에서 Winra1n 설치
- AppleMobileDeviceSupport64.msi, UsbDk_…msi 를 설치한다
- WinRa1n2.1.exe 로 탈옥한다.
mac (m1) #
중간에 아이폰이 재부팅 되면서 DFU에서 빠져나오는데, 다시 DFU로 만들고 진행하면 된다.
1sudo /bin/sh -c "$(curl -fsSL https://static.palera.in/scripts/install.sh)"
2sudo palera1n -l(rootless) or -f(rootful)
ubuntu #
- rootful : RootFS(/ 디렉터리) 를 리마운트 하면서 쓰기 권한을 얻고, 과거의 트윅도 호환되기 때문에 마음대로 설치할 수 있다. rootful에서는 안정성을 위해 fakeFS를 사용한다. 점점 트윅 지원이 줄어들기 때문에 rootless가 더 낫다.
- rootless : 사용자 영역에
/var/jb경로를 만들고 여기에서 트윅 설치 등 쓰기작업을 한다. rootful 트윅 호환을 위해 overlayFS를 활용한 fakeFS 를 설정해서/var/jb경로를/경로에 매핑하면 기존 트윅과의 호환성도 높다.
1# install
2sudo /bin/sh -c "$(curl -fsSL https://static.palera.in/scripts/install.sh)"
3sudo systemctl stop usbmuxd
4sudo usbmuxd -f -p
5
6sudo palera1n -l(rootless) or -f(rootful)
도파민 #
아직안써봄
frida 사용하기 #
-
Frida 트윅 설치
- https://build.frida.re
- frida server 역할을 해줌
-
frida-ps
아이폰을 연결하면 버그 때문인지 frida가 usb가 두개가 잡히는데, 위에꺼를 잡으려고 해서 에러가 발생한다.
이걸 해결하려면frida-ls-devices명령으로 device id 를 찾아서 연결하면 잘 연결된다. -
Bundle Id 찾기
안드로이드의 패키지명처럼 spawn 방식으로 하려면 Bundle ID 로 frida 스크립트를 실행시켜야한다.- 직접 찾으려면
/var/containers/Bundle/Application/<APP_ID>/Target.app/Info.plist에서 찾을 수 있지만, 바이너리 파일로 되어있어서 보기 힘들다. -
https://offcornerdev.com/bundleid.html
- 3uTools 에서도 확인가능
- 직접 찾으려면
-
frida 스크립트 실행.
frida -D c63c5f7eb01ff22fc07f00457461f767f646201a -f com.eCareme.ASUSWebStorage -l hook.js
앱 추출 #
iGameGod #
- iGameGod 설치 (repo: https://iosgods.com/repo)
- iGDecrypt → 원하는 앱 토글 → Play → Decrypt & IPA 실행
- 복호화된 IPA의 경로를 확인할 수 있다.
- openssh 설치
- terminal 설치 후 비번 변경
1sudo passwd root # selio 설치할때 입력했던 비밀번호, 그 후 루트 비번세팅 - 설정에서 기기의 ip 확인
- 같은 네트워크에서
ssh root@iphone-ip-addr로 접근해서 추출된 ipa 경로 확인/var/jb/var/mobile/Documents/Decrypted/또는/private/var/mobile/Documents/Decrypted이 경로이다.
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 를 사용해야 한다.
나중에 스크립트 수정해서 올려두면 좋을듯
기타 팁 #
특정지역 앱 설치 #
- 설정 > 아이디 > 미디어 및 구입 항목 > 국가 / 지역
- 일본으로 변경하려면 작성할게 있어서 키보드 미리 세팅해야함
- 우편번호 대충 812-0012
트윅, 툴 모음 #
Zebra에서 설치할때 편집 길게 누르면 버전을 선택할 수 있다.
https://ios-repo-updates.com 에서 deb로 받을수도있음 dpkg -i <*.deb>로 설치
- openssh
- newterm
- 터미널 앱
- appstore++
- sileo(zebra)에서 기본 트윅. (rootful 에서 사용가능)
- 낮은 버전의 앱 설치 가능. 앱스토어에서 설치한 앱들의 버전을 선택할 수 있게 함.
- appstore++ 앱의 앱리스트에서 앱을 길게 누르면 설정가능
- 애플이 공식적으로 호스팅중인 서명된 앱을 설치하는 원리로 동작
- frida
- repo: https://build.frida.re
- frida-server 역할
- iGameGod
- repo: https://iosgods.com/repo
- ipa 복호화
- 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 안되는것 #
- https://github.com/frida/frida/issues/3562#issuecomment-3310967841
- IGG 설치 시 의존으로 Ellekit이 필요한데, 이걸 설치하게되면 frida -f 가 안됨. 이 패키지 삭제하면 정상동작
탈옥 후 dpkg 문제 #
- deb를 설치하려고 할때
dpkg: warning: package architecture (iphoneos-arm64) does not match system (iphoneos-arm)이런 에러가 발생한다. - 그냥 dpkg가 arm으로 설치돼서 그런거임 –force 가 가능하긴 하다. 될지안될진 모름
하드웨어 아키텍쳐 자체는 arm64인데, dpkg만 이상함..
1gimdonghyeon-ui-iPhone:/var/mobile root# uname -a
2Darwin 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
3gimdonghyeon-ui-iPhone:/var/mobile root# sysctl -n hw.optional.arm64
41
5gimdonghyeon-ui-iPhone:/var/mobile root# dpkg --print-architecture
6iphoneos-arm
7gimdonghyeon-ui-iPhone:/var/mobile root# dpkg --force-architecture -i frida_17.4.2_iphoneos-arm64.deb