앱스토어에서 내려 받지 않은 경우
설치된 파일 IPA 파일로 추출
앱 스토어에 업로드 되지 않은 IPA파일은 암호화가 적용되어 있지 않기 때문에 복호화를 거치지 않고 ipainstaller 라는 프로그램으로 바로 추출해도 분석이 가능하다.
ipainstaller 프로그램은 번들아이디로 간편하게 추출이 가능하다.
명령어
ipainstaller -b [번들 아이디]
결과 --------------------------------------------------------------
Backing up application with identifier "com.highaltitudehacks.DVIAswiftv2"...
The application has been backed up as /private/var/mobile/Documents/DVIA-v2 (com.highaltitudehacks.DVIAswiftv2) v2.0.ipa.
Bash
복사
앱의 번들 아이디 확인하는 방법
•
FRIDA를 이용한 간단한 확인법
Frida를 사용할 수 있는 경우 frida-ps 를 이용하면 간단히 확인이 가능하다.
명령어
frida-ps -Uai
------------------------------------------------
PID Name Identifier
---- ------------- ---------------------------------
4985 CrackerXI+ com.ipc.crackerxi
4856 Mail com.apple.mobilemail
4831 ReProvision com.matchstic.reprovision.ios5042 한게임 섯다 com.NHNEnt.MSudda
- App Store com.apple.AppStore
- Cydia com.saurik.Cydia
- DVIA-v2 com.highaltitudehacks.DVIAswiftv2
- FaceTime com.apple.facetime
- IPA Installer com.slugrail.ipainstaller
- Photo Booth com.apple.Photo-Booth
- Safari com.apple.mobilesafari
- Substitute com.ex.substitute.settings
- TV com.apple.tv
- checkra1n kjc.loader
- iPhone 찾기 com.apple.mobileme.fmip1
- iTunes Store com.apple.MobileStore
- unc0ver com.dongyeon.uncover2
- 도서 com.apple.iBooks
- 메모 com.apple.mobilenotes
- 메시지 com.apple.MobileSMS
- 미리 알림 com.apple.reminders
- 사진 com.apple.mobileslideshow
- 설정 com.apple.Preferences
- 시계 com.apple.mobiletimer
- 연락처 com.apple.MobileAddressBook
- 음성 메모 com.apple.VoiceMemos
- 음악 com.apple.Music
- 주식 com.apple.stocks
- 지도 com.apple.Maps
- 카메라 com.apple.camera
- 캘린더 com.apple.mobilecal
- 팁 com.apple.tips
- 파일 com.apple.DocumentsApp
- 팟캐스트 com.apple.podcasts
- 한게임 바둑 com.nhnent.HanBaduk
- 홈 com.apple.Home
Bash
복사
•
SSH로 앱이 설치된 경로로 이동 후 직접 확인
◦
관리툴(ex : 3utools)에서 연결된 기기의 SSH를 활성화 시켜준 후 SSH로 접속한다.
SSH를 열었을 때, 기본 계정 정보는 다음과 같다.
ID : root
PW : alpine
◦
관리툴에서 앱이 설치된 경로로 이동하여 iTunesMetadata.plist 파일을 추출한다.
앱이 설치된 경로는 /var/containers/Bundle/Application/ 이다.
iTunesMetadata.plist 파일은 앱스토어에서 받은 앱들만 존재하는것 같다.
하지만, 같은 경로의 다른 plist 파일을 추출하여 확인도 가능하다.
◦
번들 아이디을 확인한다. iTunesMetadata.plist 파일이라면 다음과 같이 softwareVersionVundleId 와 같이 작성되어 있다.
...
<key>softwareVersionBundleId</key>
<string>com.minigoodapp.Calculator</string> # 번들 아이디
...
XML
복사
◦
만약 iTunesMetadata.plist 가 존재하지 않는다면, 다른 plist 파일에 다음과 같이 작성되어 있다.
<key>MCMMetadataIdentifier</key>
<string>com.minigoodapp.Calculator</string> # 번들 아이디
XML
복사
앱스토어에서 내려 받은 경우
앱 스토어에서 다운로드한 앱은 FairPlay DRM을 이용해 암호화되어 보호된다. 또한 암호화된 바이너리 파일은 커널의 Mach-O 로더에 의해 런타임 중 해독된다.
Fairplay DRM 확인
putty로 iOS 기기에 원격 접속 후, otool 이라는 도구를 사용하여 확인한다.
결과에서 cryptid 가 0이라면 Fairplay 적용되지 않은 상태, 1이라면 Fairplay가 적용된 상태이다.
# 앱 저장 위치로 이동
cd /var/containers/Bundle/Application/$uuid/Application.app
# otool를 사용하여 확인
otool -l [Application name] | grep -A4 LC_ENCRYPTION_INFO
# 결과 예시
cmd LC_ENCRYPTION_INFO_64
cmdsize 24
cryptoff 16384
cryptsize 3801088
cryptid 0
Plain Text
복사
CrackerXI+ 앱을 이용한 IPA 추출 방법
탈옥 후 설치되는 Cydia 앱에서 다운로드 가능한 CrackerXI+ 앱을 이용하여 앱 스토어에서 내려받은 앱을 복호화하여 추출 가능하다. 앱에서 자동으로 추출해주기 때문에 가장 간편한 방법이다.
CrackerXI+ 앱 설치 방법
•
Cydia앱 → 소스 → 오른쪽 상단 편집 버튼 → 왼쪽 상단 추가 버튼 클릭
•
http://cydia.iphonecake.com/ 소스 추가
•
검색창에서 CrackerXI+ 검색 후 설치
CrackerXI+ 앱 사용법
처음 앱을 열면 사용자가 앱스토어에서 설치한 앱 목록만 확인이 가능하다.
1.
하단의 Settings → CrackerXI Hook 옵션을 켜준다.
2.
하단의 AppList → IPA 추출을 원하는 앱 선택 → IPA 전체를 원하면 YES, Full IPA / 복호화 된 바이너리 파일만 원하면 YES, Binary Only 선택
3.
작업이 끝나면 추출된 IPA / 바이너리 경로 확인 가능
한번 추출한 앱은 백그라운드에서 완전히 종료되었는지 앱 실행목록등을 확인해줘야 한다.
frida-ios-dump를 이용한 IPA 추출 방법
•
frida-ios-dump 사용을 위해 패키지를 업데이트 한다. requirements.txt 파일은 frida-ios-dump를 다운받으면 같이 존재한다.
requirements.txt 파일에 frida-tools 패키지도 작성되어 있다.
즉, pip로 업데이트 할때, --upgrade 옵션을 사용하면 frida-tools 도 같이 업데이트 될 수 있기 때문에, 버전을 맞춰쓰는 사람은 주의해야한다.
pip install -r requirements.txt --upgrade
Plain Text
복사
아래 두 도구는 윈도우에서 진행할 때 필요한 도구이다.
•
iTunesDriver64_0205
frida-ios-dump를 사용한 IPA 추출하는 법 (IN Window)
•
덤프 가능한 목록을 확인한다.
python dump.py -l
-l 옵션 : 덤프 가능한 리스트 확인
Plain Text
복사
•
관리 툴(3utools 등)을 사용하여 iOS기기의 터미널을 열어준 후, itunnel_mux를 사용하여 원격에서 SSH 통신을 통한 명령어 전달이 가능하도록 설정한다.
itunnel_mux.exe --iport 22 --lport 2222
--iport : iOS 기기의 open된 SSH 포트 번호
--lport : local port로, open된 iOS기기의 SSH로 원격 접속할 포트 번호
Plain Text
복사
•
dump.py로 파일을 선택하여 복호화 하면, ipa 파일로 추출해준다. 일반적인 복호화는 Mach-O 로더에 의해 런타임 중 해독작업이 진행되기 때문에, dump.py도 앱을 동작시키며 복호화가 진행한다.
# 리스트 확인
python dump.py -l
# 복호화 후, IPA 추출 (명령어 실행 위치에 IPA 파일 생성)
python dump.py [식별자 이름(xxx.xxx.xxx)]
Plain Text
복사
ERROR 해결법 (IN Window)
•
PermissionError: [WinError 5] 액세스가 거부되었습니다 에러
dump.py 파일에서 리눅스 명령어인 chmod 를 사용하는데, 윈도우 cmd에서는 추가 프로그램 설치를 하지 않으면 해당 명령어를 사용하지 못하여 발생하는 에러이다.
따라서 추가적으로 프로그램을 설치하여 윈도우 cmd에서도 ls , chmod 와 같은 리눅스 명령어를 사용할 수 있도록 해야한다.
또한 이전의 덤프 작업 실패 등의 이유로 해당 폴더안에 쓰레기 데이터가 포함되어 있어서 삭제하지 않으면 덤프가 진행이 되지 않는다.
따라서 해당 경로의 Payload 폴더를 삭제해야 한다.
◦
경로 : C:\Users\ {지정한 사용자 이름} \AppData\Local\Temp
frida-ios-dump를 사용하여 IPA 추출하는 법 (IN Kali Linux VM)
•
칼리 리눅스에서 DRM 복구를 위한 툴을 설치한다.
# ROOT 계정 비밀번호 변경
su passwd
apt-get update
apt install -y libusbmuxd-tools
apt install -y python3-pip
cd /frida-ios-dump-master
pip3 install -r requirements.txt --upgrade
Shell
복사
•
iOS 기기를 재 연결 한다. 그러면 다음과 같은 창이 뜨는데, 이 중에서 Connect to a virtual machine 을 선택하여 칼리 가상머신과 iOS 기기를 연결한다.
•
연결이 되었다면 iproxy 명령어로 iOS기기와 SSH 원격 연결을 한다.
iproxy 2222 22
Shell
복사
•
dump.py로 파일을 선택하여 복호화 하면, ipa 파일로 추출해준다. 일반적인 복호화는 Mach-O 로더에 의해 런타임 중 해독작업이 진행되기 때문에, dump.py도 앱을 동작시키며 복호화가 진행한다.
kali Linux 에서는 기본적으로 설치된 python 3.x 버전을 쓰기 위해 python3 명령어를 사용한다.
# 리스트 확인
python3 dump.py -l
# 복호화 후, IPA 추출 (명령어 실행 위치에 IPA 파일 생성)
python3 dump.py [식별자 이름(xxx.xxx.xxx)]
Plain Text
복사
ERROR 해결법 (IN Kali Linux VM)
•
Failed to enumerate applications ~~ TLS handshake Error 에러
# 에러 전체
Failed to enumerate applications: error performing TLS handshake: error:00000001:lib(0):func(0):reason(1)
Plain Text
복사
이 경우 iOS 기기에서 FRIDA 서버가 동작하지 않을 때 발생하는 문제이다.
간혹 스스로 종료되는 경우도 있기 때문에, iOS 기기에 설치된 Terminal(Cydia에서 설치) 에서 ps -A | grep frida 명령어로 FRIDA 서버가 동작하는지 확인한다.
동작하지 않는다면 Kali에 설치된 FRIDA 버전과 동일한 FRIDA 서버를 실행해줘야 한다.
•
unable to access process ~~ user account 에러
이는 덤프할 프로그램이 동작하지 않을 때 발생하는 에러이다. 애플의 Fairplay DRM은 Mach-O 로더에 의해 런타임 중 해독작업이 진행되기 때문에, 프로그램이 실행된 상태여야 복호화가 가능하다.
윈도우에서는 자동으로 실행시켜 주지만, 리눅스에서는 직접 실행한 후, dump 실행 명령어를 사용해야 정상적으로 추출이 가능하다.
# 에러 전체
unable to access process with pid 1 from the current user account
Plain Text
복사