frida-iOS-dump를 이용한 앱 복호화
1. iOS 앱
Apple의 iOS 앱은 앱스토어에 등록될 때 FairPlay DRM(Digital Rights Management) 를 사용하여 앱의 바이너리 코드를 암호화하여 등록된다.
암호화되는 영역은 다음과 같다.
1. 바이너리 코드 (Mach-O 실행 파일)
- 이 암호화는 앱이 App Store에서 다운로드될 때 적용되고, 실행 시 iOS 커널이 복호화하여 메모리에 로드
- 보호 대상: 앱의 코드 섹션(.text), 데이터 섹션(.data) 일부
2. 네트워크 트래픽 (App Transport Security, ATS)
- iOS 앱은 기본적으로 HTTPS를 강제하는 ATS(App Transport Security)를 사용
- 즉, 네트워크 요청 데이터(HTTP 요청/응답)가 암호화
- 보호 대상: 앱 내에서 이루어지는 네트워크 통신
3. 키체인 (Keychain Services)
- iOS의 Keychain을 사용하여 저장된 비밀번호, 토큰, 민감한 데이터는 iOS에서 자체 암호화
- 보호 대상: 앱이 저장하는 민감한 사용자 데이터
4. 애플 서버와 통신하는 데이터
- iCloud, APNs(푸시 알림) 등의 Apple 서버와의 통신은 TLS(전송 계층 보안)로 암호화
- 보호 대상: iCloud 데이터, 푸시 알림 데이터
따라서, 앱 분석 전 반드시 복호화 과정을 진행해야 정상적인 분석이 가능하다.
예시를 위해 앱스토어에서 다운받은 실행 파일을 추출

아이다 분석 시 다음과 같이 encrypt가 되어 있는것이 확인된다.

Yes 선택 후, 분석 시 .text 섹션의 start 함수가 난독화되어 있는것을 확인할 수 있다.

따라서, 보통 탈옥된 iOS에서는 crackerXI, flexdecrypt 과 같은 트윅을 사용하여 복호화 후 분석을 진행할 수 있지만 버전 및 호환성 등 문제로 사용이 불가할 때가 번번이 발생한다.
그래서 가장 확실하고 편한 방법은 frida를 통해 앱 실행 시점에 iOS 커널에서 복호화 후 로드된 메모리를 덤프 뜨는 방법이다.
https://github.com/AloneMonkey/frida-ios-dump.git
GitHub - AloneMonkey/frida-ios-dump: pull decrypted ipa from jailbreak device
pull decrypted ipa from jailbreak device. Contribute to AloneMonkey/frida-ios-dump development by creating an account on GitHub.
github.com
해당 git에서 frida-ios-dump 파이썬 스크립트를 다운받을 수 있다.
압축 해제 후, pip install -r requirements.txt 명령을 통해 필요한 모듈을 설치한다.
fri-dump 수행 시 iOS에서 frida는 실행중인 상태여야 하며 PC와 USB로 연결된 상태여야한다.
1. iOS 기기 정보
fri-dump를 수행하는 로컬과 같은 네트워크 망에 연결
dump.py 스크립트 내 해당 부분에 사용자 iOS 기기에 맞게 ssh 연결 정보를 수정
User = 'root'
Password = 'alpine'
Host = '192.168.0.56'
Port = 22
KeyFileName = None
2. zip 설치
스크립트에서 패키지 추출 후 zip으로 압축하므로 zip 환경변수가 설정되어 있어야한다.
zip_args = ('zip', '-qr', os.path.join(os.getcwd(), ipa_filename), target_dir)
subprocess.check_call(zip_args, cwd=TEMP_DIR)
http://stahlworks.com/dev/?tool=zipunzip
zip and unzip for the windows command line
How to do things AI Noob vs. Pro List biggest files List newest files Show subdir sizes Search in files Replace word in files List dir differences Send files in LAN Free Open Source: Swiss File Knife a command linemulti function tool. Depeche View Sourc
stahlworks.com

해당 링크에서 zip.exe 파일 다운로드 후 C:\Windows\System32 경로에 넣어준다.
2. 덤프
python dump.py -l 입력 시 추출할 수 있는 앱의 목록이 출력된다.

python dump.py [패키지명] 명령으로 원하는 앱을 추출할 수 있다.

앱이 추출되고 나면 디렉터리 내 ipa 파일을 확인할 수 있다.

압축 해제 후, 실행 파일 분석 시 start 함수가 복호화된 것을 확인할 수 있으며 정상적인 분석이 가능하다.

Start the target app kr.co.ebs.togetherschool
unexpected error while resuming process: (os/kern) failure
에러 발생 시 어플 한번 실행 후 다시 하면됨