//////
Search
🗃️

IPA 파일 추출법

목차

앱스토어에서 내려 받지 않은 경우

설치된 파일 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 이라는 도구를 사용하여 확인한다.
결과에서 cryptid0이라면 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.
하단의 SettingsCrackerXI 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
복사