---
title: "DoveRunner Mobile App Security 적용"
description: "Android 앱에 DoveRunner Mobile App Security 보호를 적용하는 방법을 알아보세요."
---
> For the complete documentation index, see [llms.txt](/llms.txt).

import { Aside } from '@astrojs/starlight/components';

DoveRunner Mobile App Security는 코드 변경 없이 코드 난독화, 무결성 보호, 환경 탐지, 위협 도구 탐지 등 다양한 자체 보호 기능을 제공합니다.

시작하기 전에 다음을 준비하세요:
- **프레임워크** — 앱 빌드에 사용된 프레임워크. React Native 등 하이브리드 프레임워크의 경우 사용 버전도 확인해 두세요.
- **KeyStore 정보** — Play Store 업로드 전 DoveRunner Mobile App Security가 실링된 앱에 자동 서명하도록 하려면 필요합니다.

## 앱 실링

실링은 세 단계로 완료됩니다:
1. APK 또는 AAB 파일을 업로드합니다.
2. Developer Console의 5개 설정 그룹에서 보안 옵션을 구성합니다.
3. 실링된 앱을 다운로드합니다 — 키스토어로 서명된 상태로, 또는 apksigner로 직접 서명할 수 있는 미서명 상태로 받을 수 있습니다.

실링이 완료되면 다운로드 안내가 표시됩니다. 이후에는 [실링 이력](../android-history/)에서도 다운로드할 수 있습니다.

---

## v3.x 릴리스 노트

실링 버전 3.x에서 v2.x 대비 다음 사항이 변경되었습니다:

- **Dex 암호화 → Dex 보호로 개편** — 기존의 단순 Yes/No 방식의 Dex 암호화가 String 난독화와 Call Hiding 두 가지 옵션으로 분리되었습니다. 각 옵션은 Fast / Balance / Maximum 세 가지 강도로 독립적으로 설정할 수 있어 보호 수준과 성능 간의 균형을 세밀하게 조정할 수 있습니다.
- **Dex 보호 적용 전 ProGuard/R8 필수** — DoveRunner의 Dex 보호는 ProGuard/R8 표준 난독화 위에 추가되는 방식으로 동작합니다. ProGuard/R8 없이 Dex 보호만 적용하면 보호 효과가 크게 떨어집니다. 빌드 파이프라인에 ProGuard/R8이 포함되어 있는지 먼저 확인하세요.
- **앱 카테고리 삭제** — 게임 / 비게임 앱 카테고리 선택 항목이 제거되었습니다. 보호 설정은 앱 유형에 관계없이 동일하게 적용됩니다.
- **Data Sealing 삭제** — Data Sealing 기능은 v3.x에서 제공되지 않습니다. 향후 개선된 구현으로 다시 제공될 예정입니다.

---

## 설정 옵션

### 기본 설정

앱 프레임워크, 실링 버전, 실링 모드, 네이티브 코드 및 Dex 코드 보호 옵션을 설정합니다.

| 옵션 | 설명 |
| :--- | :--- |
| **앱 프레임워크** | 앱 개발에 사용된 프레임워크. 네이티브 및 하이브리드 프레임워크를 모두 지원합니다. 드롭다운에서 적합한 항목을 선택하세요. |
| **앱실링 버전** | 적용할 DoveRunner 앱실링 버전. 최신 버전을 사용하면 최신 보안 기능과 프레임워크 지원을 이용할 수 있습니다. |
| **실링 모드** | `테스트` — Release와 동일한 보호 수준이지만 화면에 주기적으로 "Test mode" 워터마크가 표시됩니다. 추가 요금은 발생하지 않습니다.<br/><br/>`릴리스` — 워터마크를 제거하고 프로덕션 기능을 전부 활성화합니다. |
| **SO 암호화** | APK에 포함된 네이티브 라이브러리(`.so`) 파일을 암호화하여 역공학을 방지합니다.<br/><br/>`예` — 지원되는 모든 SO 파일을 암호화합니다.<br/>`아니오` — SO 파일을 암호화하지 않습니다.<br/>`부분 암호화` — 특정 SO 파일만 암호화합니다. 전체 암호화 시 성능 문제가 있는 경우 사용합니다. |

#### Dex 보호

Dex 보호는 컴파일된 Dex 바이트코드를 난독화하여 정적·동적 분석을 어렵게 만듭니다. 적용 전 ProGuard/R8 기본 난독화를 먼저 적용해야 합니다.

<Aside type="caution">
Dex 보호를 활성화하기 전에 빌드에 ProGuard/R8 기본 난독화를 먼저 적용하세요. Dex 보호는 표준 난독화를 대체하는 것이 아니라 그 위에 추가되는 기능입니다. 필수 룰은 [ProGuard 설정 가이드](../android-proguard-guide/)를 참고하세요.
</Aside>

| 옵션 | 설명 |
| :--- | :--- |
| **String 난독화** | Dex 바이트코드의 문자열 리터럴을 난독화하여 정적 분석 및 문자열 추출을 어렵게 만듭니다.<br/><br/>`Fast` — 오버헤드가 낮고 난독화 강도가 가볍습니다.<br/>`Balance` — 성능과 보호 수준의 균형을 맞춥니다.<br/>`Maximum` — 가장 강력한 난독화. 앱 시작 시간에 영향을 줄 수 있습니다. |
| **Call Hiding (함수 호출 난독화)** | Dex 바이트코드의 함수 호출 패턴을 난독화하여 제어 흐름 분석을 어렵게 만듭니다.<br/><br/>`Fast` / `Balance` / `Maximum` — String 난독화와 동일한 수준 구분을 사용합니다. |

---

### 환경 탐지

기기 환경이 변조되었거나 모니터링 중인 것으로 감지될 때 앱이 어떻게 반응할지를 설정합니다.

| 옵션 | 기본값 | 설명 |
| :--- | :----- | :--- |
| **루팅** | 차단 | 루팅된 기기를 탐지합니다. 차단 설정 시 감지되면 앱이 종료됩니다. |
| **개발자옵션** | 허용 | Android 개발자 옵션 활성화 여부를 탐지합니다. 개발자 모드는 악용될 수 있는 디버깅 인터페이스를 노출합니다. |
| **USB 디버깅** | 차단 | ADB USB 디버깅 활성화 여부를 탐지합니다. 차단 설정 시 USB 디버깅이 켜져 있으면 앱이 종료됩니다. |
| **Wi-Fi 보안 프로토콜** | 미사용 | **정보 수집** 설정 시 기기에서 사용 중인 Wi-Fi 보안 프로토콜(예: WPA2, WPA3)을 모니터링 목적으로 수집합니다. 앱 동작에는 영향을 주지 않습니다. |
| **에뮬레이터** | 차단 | Android 에뮬레이터 환경을 탐지합니다.<br/><br/>`차단` — 에뮬레이터 감지 시 앱이 종료됩니다.<br/>`선택 허용` — 특정 에뮬레이터만 허용하고 나머지는 차단합니다.<br/>`허용` — 모든 에뮬레이터 환경에서 앱이 실행됩니다. |
| **직장 프로필 및 삼성 보안 폴더** | 차단 | Work Profile 환경에서는 일부 보안 기능이 비활성화될 수 있으며, 일부 공격 도구가 이를 이용해 앱을 공격합니다.<br/><br/>`차단` — Work Profile 또는 삼성 보안 폴더에서 실행 시 앱이 종료됩니다.<br/>`선택 허용` — 특정 프로파일만 허용합니다.<br/>`허용` — 모든 Work Profile 환경에서 앱이 실행됩니다. |

---

### 툴 & 패키지 탐지

기기에 설치된 악성 도구를 탐지하고, 해당 도구가 있는 환경에서 앱 실행 여부를 설정합니다.

| 옵션 | 기본값 | 설명 |
| :--- | :----- | :--- |
| **매크로 도구** | 차단 | 앱 기능 악용에 사용될 수 있는 매크로 자동화 도구를 탐지합니다. 차단 목록은 최신 상태로 유지됩니다. |
| **패킷 공격** | 차단 | 네트워크 트래픽을 가로채거나 변조하는 패킷 인터셉터 도구를 탐지합니다. |
| **키로거** | 허용 | 터치 입력을 수집하는 키로거 앱을 탐지합니다. 민감한 정보를 다루는 앱에서는 차단을 권장합니다. |
| **오버레이 윈도우** | 허용 | 다른 앱이 앱 위에 오버레이 창을 표시하는 것을 탐지합니다. 오버레이는 입력 가로채기나 화면 콘텐츠 캡처에 악용될 수 있습니다. |

---

### 고급 탐지

| 옵션 | 기본값 | 설명 |
| :--- | :----- | :--- |
| **스크린 미러링 & 캡처** | 허용 | 앱이 포그라운드에 있는 동안 화면 콘텐츠가 캡처되거나 외부 디스플레이로 미러링되는 것을 방지합니다. 민감한 정보를 다루는 앱에서는 **차단**을 권장합니다. |
| **Over-The-Air 업데이트** | 아니오 | 새 앱 릴리스 없이 실행 중인 앱에 커스텀 위협 차단 목록 업데이트를 배포합니다. 커스텀 차단 목록은 DoveRunner 기본 차단 목록과 병합되어 활성 앱 설치본에 전달됩니다. 차단 목록 내용은 [앱 구성](../android-app-configurations/)에서 설정합니다. |
| **앱 종료 대신 콜백으로 위협 처리 사용** | 끔(체크 해제) | 체크하면 위협 감지 시 앱을 종료하는 대신 실시간 위협 이벤트를 Android 브로드캐스트로 앱에 전달합니다. 아래 **위협 탐지 콜백**을 참고하세요. |
| **위협 대응 메시지 커스터마이징** | 끔 | 켜면 위협 감지 시 사용자에게 표시되는 기본 보안 메시지를 직접 만든 브랜드·다국어 템플릿으로 교체합니다. Enterprise 플랜 전용입니다. 아래 **위협 대응 메시지**를 참고하세요. |

#### 위협 탐지 콜백

**앱 종료 대신 콜백으로 위협 처리 사용**을 체크하면 위협 감지 시 실링된 앱의 반응 방식이 달라집니다. 앱을 즉시 종료하는 대신, `error_code`와 `timestamp`를 담은 위협 탐지 이벤트를 브로드캐스트로 전송하며, 앱에서 Android `BroadcastReceiver`로 수신할 수 있습니다. 이를 통해 로깅, 분석, 커스텀 경고 화면, 강제 로그아웃 등 자체 처리 로직을 실행할 수 있습니다.

<Aside type="caution" title="모니터링 모드">
이 옵션을 체크했지만 브로드캐스트 리시버를 구현하지 않으면, 앱은 **모니터링 전용 모드**로 동작합니다 — 위협은 감지·보고되지만 앱이 **종료되지는 않습니다**. 단 하나의 예외는 **코드 후킹**으로, 이 설정과 관계없이 항상 고위험 위협으로 간주되어 기본 보호 흐름(경고, 앱 종료, 보고)을 따릅니다.
</Aside>

<Aside type="note">
브로드캐스트 명세, 리시버 구현, 에러 코드 매핑, 샘플 코드는 [헬프 센터](https://support.doverunner.com)로 문의해 주세요.
</Aside>

#### 위협 대응 메시지

DoveRunner는 루팅 기기, 에뮬레이터, 디버거, 앱 위변조, 후킹 프레임워크 등 위협을 감지하면 사용자에게 대응 메시지 다이얼로그를 표시합니다. 기본적으로는 솔루션이 제공하는 표준 메시지가 기기 언어로 표시됩니다.

**위협 대응 메시지 커스터마이징** 토글을 켜면 이 기본 메시지를 직접 만든 재사용 가능한 **템플릿**으로 교체할 수 있습니다 — 메시지 문구, 다이얼로그 제목, 회사 로고, 버튼 스타일, 기본 HTML 서식을 최대 16개 언어로 구성할 수 있습니다. 템플릿은 콘솔에서 생성하여 실링 시 적용하거나 프리셋에 포함시킬 수 있습니다. 이 기능은 선택(opt-in) 사항으로, 토글이 꺼져 있으면 솔루션 기본 메시지가 사용되며 기존 빌드에는 영향을 주지 않습니다.

<Aside type="note">
Enterprise 플랜 전용 기능입니다. 템플릿 생성, 언어 구성, 전체 단계별 가이드는 [헬프 센터](https://support.doverunner.com)로 문의해 주세요.
</Aside>

---

## 보안 가이드

### 실링 전

**ProGuard/R8 설정**

Dex 보호를 사용하는 경우, DoveRunner가 비즈니스 코드를 올바르게 식별하고 난독화할 수 있도록 ProGuard/R8 설정에서 패키지 구조를 유지해야 합니다. 필수 룰과 주의사항은 [ProGuard 설정 가이드](../android-proguard-guide/)를 참고하세요.

**기타 요구사항**

- Firebase Crashlytics는 원래 패키지 이름을 유지해야 합니다 — 난독화하지 마세요.
- React Native 버전 감지를 위해 다음 클래스를 난독화하면 안 됩니다:
  ```
  com/facebook/react/modules/systeminfo/ReactNativeVersion.java
  ```

### 실링 후

실링 과정에서 원본 인증서가 무효화되므로, 실링된 앱은 기기 설치 또는 Play Store 제출 전에 반드시 서명이 필요합니다.

**방법 1 — Developer Console에서 서명 (권장)**

Developer Console의 [KeyStore 관리](../android-manage-keystore/) 메뉴에서 키스토어를 미리 등록해두면, 실링된 빌드 다운로드 시 자동으로 서명이 적용됩니다. 별도의 수동 작업이 필요하지 않습니다.

**방법 2 — 수동 서명**

콘솔의 서명 기능을 사용하지 않는 경우, 다운로드 후 직접 서명해야 합니다. APK와 AAB에 사용하는 도구가 다릅니다:

| 형식 | 도구 | 명령어 |
| :--- | :--- | :----- |
| APK | apksigner | `apksigner sign --ks your.keystore your-app.apk` |
| AAB | jarsigner | `jarsigner -keystore your.keystore your-app.aab alias` |