2 분 소요


img

IPA 구조

  • IPA 란?
  • IPA 구조
    • Payload
    • 앱설치 경로
    • 파일 시스템



IPA 란?

image-20221218004255943

iOS 패키지 앱 스토어를 의미한다.

IPA 문서는 iOS 앱 확장자로써, iPad, iPhone, iPod Touch, Mac 등과 같은 iOS 운영 장치에서만 다운로드 가능하다.

IPA 파일에는 앱의 압축 데이터가 ZIP 파일로 포함되어 있으며,

iTunes, Apple Configurator 2 또는 타사 프로그램에서 다운로드할 수 있다.



IPA 구조

image-20221218004407419

Payload

애플리케이션의 모든 데이터를 포함하는 폴더이다.

  • {AppName}.app : ARM 컴파일된 애플리케이션, 앱에서 사용하는 정적 리소스, Info.plist 등이 포함된다.


iTuensArtwork

아이콘에서 사용하기 위한 512x512 픽셀 PNG 파일이다.

애플리케이션에 아이콘을 빠르게 표시하기위한 파일로 보안에 아무런 영향이 없다.


iTunesMetadata.plist

여러가지 정보를 포함하는데, 개발자 정보, 번들 식별자, 저작권 명세, 장르, 앱 이름, 출시 일 등이 있다.

아이튠즈에 표시하기 위한 임시 파일로 보안에 아무런 영향이 없다.


WatchKitSupport/WK

백그라운드 작업, 확장된 런타임 세션 및 Siri 의도를 관리하는 확장 번들을 포함하여 watchOS 앱과 같은 앱 개발을 만들기 위한 인프라를 제공한다.

앱 개발 프레임워크는 사용자의 Apple Watch에 대한 정보에 접근하는 것과 같은 제어 작업을 수행한다.


Meta-INF

열린 IPA 파일 메타 정보를 만드는 데 사용되는 응용 프로그램이 들어있다.


Application Apps Document

macOS를 실행하는 데 필요한 시스템이 포함되어있다.

실행 파일, 리소스기타 보조 시스템과 같은 것들이 포함되어있다.



IPA 구조 - Paylod

image-20221218012415636

AppName.app/_CodeSignature

iOS 애플리케이션은 Code Signature(코드 무결성 사인) 이라는 방식으로 보호되고 있다.

이 Code Signature는 일종의 헤쉬값으로 애플리케이션을 개발한 다음 패키징할 때 셍성되는 사인이다.

XcodeCodesign이라는 유틸리티개발자 인증서(Provising Profile)를 이용해 이 사인을 작성해준다.

즉, 이러한 사인을 담고 있는 폴더이다.


Appname.app/SC_info

iOS 어플리케이션에는 구매자 인증 정보 시스템이 존재하며 바이너리에 암호화되어 있다.

이는 앱스토어에서 어플을 다운 받을 때 삽입되는 고유의 코드로, 구매자의 계정정보와 이에 따른 해쉬값이 들어있다.

이러한 인증 정보가 저장되는 폴더이다.

또한, SC_Info 폴더에는 암호화 키값이 저장되는데,

iOS에서 앱을 실행할 때마다 이 암호화 키를 이용해 메인 바이너리({Appname}파일, 확장자가 없는 파일)의 암호화를 푼 뒤 메모리에 올리게 된다.

info.plist

번들 ID, 버전 정보, 애플리케이션 표시 이름 등의 구성 정보다.

{Appname}

컴파일된(읽을 수 없는) 애플리케이션 소스 코드를 포함하는 메인 바이너리 실행 파일이다.



IPA 파일 구조 (앱 설치 경로)

image-20221218025752812

이름 경로 설명
Bundle Container /var/containers/Bundle/Application/$uuid 앱의 번들을 저장하며 여기서 번들은 macOS 및 iOS에서 S/W를 제공하는 편리한 방법으로 실행 가능한 코드와 해당 코드에서 사용하는 리소스를 가진 디렉토리이다. 일반적으로 쓰기가 불가능하고 읽기만 가능하다. 또한 iTunes나 iCloud에 백업되지 않는다.
Data Container /var/mobile/Containers/Data/Application/$uuid 앱과 사용자의 데이터를 저장한다. iOS에서 제공하는 샌드박스로 인해 탈옥되지 않은 디바이스의 특정 애플리케이션에서만 접근 가능하다.
iCloud Container /private/var/mobile/Library/MobileDocuments iCloud와 관련된 데이터를 저장하며, iCloud 지원 iOS 애플리케이션이 사용하는 데이터가 포함된다.
iOS Keychain /var/KeyChain/keychain-2.db 사용자의 계정정보, 비밀번호 등 중요한 정보를 다루며 암호화되어 저장된다. SQLite 데이터베이스로 구성된 파일이다.



파일 시스템

image-20221218030050974

루트 사용자 홈 디렉터리

symbolic link를 이용한 루트 사용자 홈 디렉터리 접근 경로

  • /var/root

기본 루트 사용자 홈 디렉터리 접근 경로

  • /private/var/root

루트 사용자의 루트 디렉토리

  • /

업데이트: