IPA 실링
IPA 실링은 이미 빌드된 iOS 앱을 보호합니다. 빌드된 .IPA를 Developer Console에 업로드하면 DoveRunner가 RASP(런타임 애플리케이션 자체 보호)와 앱 변조 방어 기능을 바이너리에 직접 주입하고, 보호된 빌드를 내려받을 수 있습니다.
소스 코드나 앱 로직은 전혀 변경되지 않습니다. 컴파일된 바이너리를 대상으로 동작하기 때문입니다.
서명이 중요한 이유
Section titled “서명이 중요한 이유”보호 기능을 주입하면 앱 실행 파일이 변경되므로 원본 코드 서명이 무효화됩니다. 실링된 IPA는 재서명해야 iOS가 설치·실행을 허용합니다. 처리 방법은 두 가지입니다.
| 방식 | 업로드하는 것 | 결과물 |
|---|---|---|
| DoveRunner가 재서명 | IPA + 프로비저닝 프로파일 + .p12 인증서 + 인증서 비밀번호 | 서명이 완료된 IPA를 받아 바로 설치하거나 제출할 수 있습니다. |
| 직접 재서명 | IPA만 | 미서명 IPA를 받습니다. 설치·제출 전에 직접 재서명해야 합니다. |
실링을 시작하는 데 반드시 필요한 것은 애플리케이션 바이너리뿐입니다. 나머지 세 가지는 DoveRunner가 결과물을 대신 재서명하도록 하려는 경우에만 필요합니다.
| 자산 | 형식 | 필수 여부 | 용도 |
|---|---|---|---|
| 애플리케이션 바이너리 | .IPA | 필수 | 보호 전의 컴파일된 iOS 애플리케이션. Xcode 또는 CI/CD 파이프라인으로 빌드합니다. |
| 프로비저닝 프로파일 | .mobileprovision | 재서명 시에만 | 설치 대상, App ID 기능, 엔타이틀먼트를 정의합니다. |
| 서명 인증서 | .p12 (PKCS#12) | 재서명 시에만 | 개인 키와 Apple이 발급한 배포·개발용 인증서를 포함합니다. |
| 인증서 비밀번호 | 평문 | 재서명 시에만 | 비밀번호로 보호된 .p12 개인 키를 복호화합니다. |
애플리케이션 바이너리 (.IPA)
Section titled “애플리케이션 바이너리 (.IPA)”- 생성 방법 — Xcode에서
.IPA로 내보내거나 자동화된 빌드 시스템에서 생성합니다. - 아키텍처 — 표준 iOS 기기(ARM64)를 대상으로 해야 합니다.
- 복호화된 빌드 — IPA는 복호화된 빌드여야 합니다. App Store에서 내려받은 앱은 FairPlay 암호화가 적용되어 있어 그대로 실링할 수 없습니다.
- Bitcode — 내보낼 때 Bitcode를 비활성화하세요. DoveRunner는 표준 ARM64 바이너리를 요구하며, Apple도 최근 Xcode에서 Bitcode를 지원 중단했습니다.
- 무결성 — 보호 전에 정상적으로 컴파일되고 동작하는 빌드인지 확인하세요. 실링 과정에서 원본 서명이 대체됩니다.
프로비저닝 프로파일 (.mobileprovision)
Section titled “프로비저닝 프로파일 (.mobileprovision)”- Bundle ID 일치 — 프로파일의 App ID가 앱의 기본 Bundle ID와 정확히 일치하거나, 승인된 와일드카드 App ID여야 합니다.
- 엔타이틀먼트 일치 — App Groups, 푸시 알림, Associated Domains, Keychain Sharing 등 앱이 사용하는 모든 기능이 프로파일에 명시적으로 포함되어야 합니다.
- 배포 방식 — Development, Ad-Hoc, Enterprise In-House, App Store 중 실제 배포 경로와 일치시켜야 합니다.
서명 인증서 (.p12)와 비밀번호
Section titled “서명 인증서 (.p12)와 비밀번호”- 형식 — 인증서와 그에 대응하는 개인 키를 모두 포함한
.p12(PKCS#12) 파일이어야 합니다. - 유효성 — 만료되지 않았고 Apple이 발급한 인증서(Apple Development 또는 Apple Distribution)여야 합니다.
- 추출 위치 — macOS 키체인 접근의 나의 인증서에서 내보냅니다.
- 비밀번호 —
.p12를 내보낼 때 지정한 암호입니다.
키체인 접근에서 .p12 내보내기
Section titled “키체인 접근에서 .p12 내보내기”-
Mac에서 키체인 접근을 엽니다(Spotlight 또는 응용 프로그램 → 유틸리티).
-
사이드바에서 키체인 아래 로그인을, 카테고리 아래 나의 인증서를 선택합니다.
-
사용 중인 Apple Distribution 또는 Development 인증서를 찾습니다. 예:
iPhone Distribution: Company Name (Team ID) -
인증서 항목을 펼쳐 아래에 개인 키가 있는지 확인합니다.
-
인증서와 개인 키를 둘 다 선택한 뒤 마우스 오른쪽 버튼을 클릭하고 **2개 항목 보내기…**를 선택합니다.
-
파일 형식을 **개인 정보 교환(.p12)**으로 설정하고 저장을 클릭합니다.
-
강력한 비밀번호를 지정하고 보관하세요. Developer Console에서 입력해야 합니다.
상시 적용 보호 기능
Section titled “상시 적용 보호 기능”IPA로 실링한 모든 앱에는 아래 보호 기능이 적용됩니다. 항상 활성화되어 있으며 별도의 코딩이 필요 없습니다. 위저드 1단계의 Inherent Features 영역에서 확인할 수 있습니다.
Always On Security
Section titled “Always On Security”| 보호 기능 | 설명 |
|---|---|
| Javascript Bytecode Encryption (React Native 전용) | React Native JavaScript 바이트코드를 암호화하여 비즈니스 로직의 리버스 엔지니어링을 방지합니다. |
| Code Encryption Flag | 코드 암호화 플래그를 적용하여 정적 분석 도구에 대한 바이너리 내성을 강화합니다. |
| Certificates / Certificates check | 앱 서명 인증서를 검증하여 승인되지 않은 주체가 재서명하지 않았는지 확인합니다. |
| Jailbreak Detection | 탈옥된 기기를 탐지하고 변조된 환경에서 앱이 실행되지 않도록 합니다. |
| Cheat Tool Detection | 일반적인 치트툴, 게임 해킹 유틸리티, 비인가 자동화 도구를 탐지합니다. |
| Files Integrity check | Assets.car, 프레임워크, 화이트리스트 파일을 제외한 앱 파일의 무결성을 검증하여 비인가 변조를 탐지합니다. |
Anti Debugging & Runtime Attack
Section titled “Anti Debugging & Runtime Attack”| 보호 기능 | 설명 |
|---|---|
| Method Swizzling / Hook Detection | Frida, Cydia Substrate 등이 런타임에 악성 코드를 주입하는 데 사용하는 Objective-C 메서드 스위즐링을 탐지하고 차단합니다. |
| Debugging / Attach Detection | 앱 프로세스에 디버거가 연결된 것을 탐지하고 앱을 종료합니다. |
| Frida framework | 디버깅·후킹·스크립트 주입에 널리 쓰이는 Frida 프레임워크를 여러 레이어에서 탐지합니다. |
iOS 모바일 앱 보안 → IPA Sealing → Apply AppSealing을 엽니다. 위저드는 3단계로 구성됩니다.
| 단계 | 이름 | 다루는 내용 |
|---|---|---|
| 1 | Upload File | .IPA 업로드 및 상시 적용 보호 기능 확인 |
| 2 | Basic Configuration | 프레임워크 지정, 배포 옵션, 그리고 DoveRunner가 대신 서명하도록 하려는 경우 프로비저닝 프로파일·.p12·인증서 비밀번호 |
| 3 | Environment Detection | 변조되었거나 신뢰할 수 없는 실행 환경에 대한 앱의 대응 방식 |
1단계 — Upload File
Section titled “1단계 — Upload File”보호 전 .IPA를 선택하거나 업로드 영역으로 끌어다 놓습니다. 옆 패널에는 위에서 설명한 상시 적용 보호 기능이 표시됩니다.
2단계 — Basic Configuration
Section titled “2단계 — Basic Configuration”| 옵션 | 설명 |
|---|---|
| This app is built with React Native | React Native 앱이라면 체크합니다. React Native 앱은 암호화된 JavaScript를 정상적으로 복호화하고 실행하려면 사용 중인 React Native 버전과 일치하는 Hermes 엔진이 필요합니다. 체크하면 Framework Version이 나타나며 React Native 메이저·마이너 버전을 선택합니다. |
| AppSealing Version | 빌드에 적용되는 실링 버전입니다. 현재 IPA 실링 버전으로 고정되며 선택할 수 없습니다. |
| Allow distributing without using the App Store & TestFlight. | App Store나 TestFlight 외의 방식(엔터프라이즈 배포, IPA 직접 설치 등)으로 배포하는 경우 활성화합니다. 일반적인 App Store 제출이라면 해제 상태로 둡니다. |
| Provisioning Profile (.mobileprovision) | 실링된 IPA를 재서명할 때 필요합니다. 직접 재서명할 예정이라면 생략해도 됩니다. |
| P12 Certificate | 실링된 IPA를 재서명할 때 필요합니다. Ad Hoc 및 App Store 배포에 사용되며, 코드 서명에 필요한 인증서와 개인 키를 모두 포함해야 합니다. |
| P12 Password | 키체인 접근에서 .p12를 내보낼 때 지정한 비밀번호입니다. |
3단계 — Environment Detection
Section titled “3단계 — Environment Detection”변조되었거나 신뢰할 수 없는 실행 환경에 대해 실링된 앱이 어떻게 대응할지 설정합니다.
| 옵션 | 값 | 기본값 | 설명 |
|---|---|---|---|
| Hooking | Block / Allow | Block | 앱에 코드를 주입하는 런타임 후킹 프레임워크를 차단합니다. |
| Method Swizzling | Block / Allow | Block | 런타임에 앱 동작을 바꾸는 Objective-C 메서드 스위즐링을 차단합니다. |
| Secure Storage | Enable / Disable | Enable | 기기에 저장되는 앱 데이터를 보호합니다. |
| Screen Capture | Block / Allow | Block | 앱 화면이 캡처되거나 녹화되지 않도록 합니다. |
| Do not terminate the App on detecting Threat. | 체크박스 | 해제 | 체크하면 위협 탐지 시 DoveRunner가 앱을 자동으로 종료하지 않으므로 대응을 직접 처리할 수 있습니다. 위협 유형별로 콜백을 등록해야 하며, 운영 환경에서 처리되지 않은 상태로 두면 안 됩니다. |
-
START APPSEALING을 클릭하면 바이너리 주입, 변조 방어 적용, (자격 증명을 제공한 경우) 재서명이 수행됩니다.
-
실링된
.IPA를 내려받습니다. 서명 자격 증명을 제공하지 않았다면 배포 전에 직접 재서명하세요.
이전 실행 이력은 Historical Information에서, 앱별 서비스 설정은 Configurations에서 확인할 수 있습니다.
자격 증명 처리
Section titled “자격 증명 처리”- 임시 처리 — 서명 자격 증명은 격리된 일회성 빌드 환경에서 처리됩니다.
- 미저장 —
.p12파일, 인증서 비밀번호, 프로비저닝 프로파일은 영구 저장되지 않으며, 실링 세션이 끝나는 즉시 안전하게 파기됩니다. - 변조 방지 봉인 — RASP, 무결성 검사, 안티 디버깅 기능은 바이너리 서명에 결속되므로, 실링 이후 변조된 바이너리는 실행되지 않습니다.
| 오류 | 원인 | 해결 방법 |
|---|---|---|
| 인증서 복호화 실패 / 잘못된 비밀번호 | 입력한 비밀번호가 .p12를 내보낼 때 지정한 암호와 다르거나 파일이 손상되었습니다. | 키체인 접근에서 인증서와 개인 키를 함께 다시 내보내고 단순한 평문 암호를 지정하세요. .p12를 키체인에 다시 가져와 확인한 뒤 재업로드합니다. |
| Bundle ID 불일치 | 앱의 Bundle ID가 .mobileprovision의 App ID와 다릅니다. | Xcode에서 Bundle ID를 확인하고, 프로파일이 해당 Bundle ID를 정확히 대상으로 하거나 승인된 와일드카드 App ID(com.company.*)를 사용하도록 설정하세요. |
| 엔타이틀먼트 불일치 | IPA가 사용하는 기능(푸시 알림, App Groups, Keychain Sharing 등)이 업로드한 프로파일에 없습니다. | Apple Developer 계정에서 프로파일을 수정해 필요한 기능을 모두 활성화하고, 다시 내려받아 실링을 재실행하세요. |
.p12에 개인 키 없음 | 공개 인증서만 내보냈습니다. | 키체인 접근에서 인증서 항목을 펼쳐 인증서와 개인 키를 함께 선택한 뒤 **2개 항목 보내기…**를 실행하세요. |
| 실링 후 실행 시 앱 크래시 | 프로파일의 배포 유형이 대상 환경과 맞지 않습니다. 예를 들어 TestFlight 빌드에 Development 프로파일을 사용했거나, Ad-Hoc 프로파일에 등록되지 않은 기기를 사용한 경우입니다. | .mobileprovision이 실제 배포 경로와 일치하는지 확인하세요. Ad-Hoc 테스트라면 프로파일 생성 전에 기기 UDID를 추가해야 합니다. |
자주 묻는 질문
Section titled “자주 묻는 질문”실링하면 앱의 기능이나 소스 코드가 바뀌나요? 아니요. DoveRunner는 컴파일된 바이너리를 대상으로 RASP 방어 기능과 변조 방지 장치를 주입하며, 소스 코드나 앱 로직은 건드리지 않습니다.
실링된 .IPA를 App Store에 바로 제출할 수 있나요?
네. 유효한 Apple Distribution 인증서와 프로덕션 App Store 프로비저닝 프로파일로 서명되어 있다면 — 실링 중 DoveRunner가 서명했든 이후에 직접 서명했든 — App Store 제출과 TestFlight 배포에 사용할 수 있습니다.
DoveRunner가 .p12 개인 키와 비밀번호를 요구하는 이유는 무엇인가요?
DoveRunner에게 재서명을 맡기는 경우에만 필요합니다. 보호 기능을 주입하면 원본 서명이 깨지므로, 변경된 바이너리를 재서명하려면 개인 키가 필요합니다. 공유하고 싶지 않다면 IPA만 업로드하고 결과물을 직접 재서명하세요.
서명 자격 증명이 DoveRunner 서버에 저장되나요?
아니요. 업로드된 .p12 파일, 비밀번호, .mobileprovision 프로파일은 일회성 컨테이너에서 처리되며 실링 세션이 끝나는 즉시 파기됩니다.
Bitcode 빌드를 지원하나요? 아니요. DoveRunner는 표준 ARM64 바이너리를 요구하므로 내보낼 때 Bitcode를 비활성화하세요.