---
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/)에서도 다운로드할 수 있습니다.

위저드는 페이지 왼쪽에 표시되는 5개 단계로 구성됩니다.

| 단계 | 이름 | 다루는 내용 |
| :--- | :--- | :---------- |
| 1 | **파일 업로드** | APK 또는 AAB 업로드, 상시 적용 보호 기능 확인 |
| 2 | **기본 설정** | 프레임워크, 실링 버전, 실링 모드, 네이티브·Dex 코드 보호 |
| 3 | **환경 탐지** | 변조되었거나 감시 중인 기기 환경에 대한 앱의 대응 방식 |
| 4 | **툴 & 패키지 탐지** | 기기에 설치된 악성 도구에 대한 앱의 대응 방식 |
| 5 | **고급 탐지** | 화면 캡처, Data Sealing, OTA 업데이트, 위협 처리 콜백 |

위저드를 설정하는 동안 오른쪽 패널에 **Security level**(보안 수준) 백분율과 이를 높이거나 낮추는 선택 항목이 표시됩니다. 저장된 실링 프리셋을 그대로 적용할 수 있는 **Preset** 선택기도 함께 제공됩니다.

---

## 상시 적용 보호 기능

아래 보호 기능은 실링된 모든 앱에 적용되며 설정할 수 없습니다. 1단계의 **Always On Security** 영역에서 확인할 수 있습니다.

| 그룹 | 보호 기능 |
| :--- | :-------- |
| **코드 암호화** | 네이티브 코드를 위한 SO 암호화, Unity·Xamarin(Mono) 앱을 위한 DLL 암호화, React Native 앱을 위한 JavaScript 번들 암호화 |
| **디버깅 및 동적 공격 방어** | 프로세스·쓰레드 상태 감시, 디버거 연결 차단, Frida 프레임워크 탐지, Xposed 프레임워크 탐지, 트램폴린 코드 후킹 탐지, 메모리 덤프 탐지, SSL Pinning 우회 방지 |
| **앱 변조 방어** | 코드 무결성 검증, 리소스·에셋 무결성 검증, 패키지 이름 변조 탐지, `AndroidManifest` 변조 탐지, 메모리 변조 차단 |
| **가상 환경** | 가상 OS, Virtual Space 도구, 샤오미 듀얼앱, 샤오미 보조공간 |
| **치트툴** | 게임가디언, 럭키패처, 스피드핵, 앱 변조 도구(APK Editor) |
| **해킹 탐지 및 애널리틱스** | 실시간 해킹 탐지 데이터 대시보드 전송(`ANDROID_ID` 기준 식별), 해킹 탐지 메시지 지역화(영어, 한국어, 중국어, 일본어, 인도네시아어, 베트남어, 스페인어 등 계속 추가 중) |

---

## 2단계 — 기본 설정

| 옵션 | 설명 |
| :--- | :--- |
| **앱 프레임워크 선택** | 앱 개발에 사용한 프레임워크입니다. Native(Java/Kotlin), Unity, Unreal, Flutter, Xamarin, React Native, Ionic, Cordova, Others를 지원합니다. |
| **앱실링 버전 선택** | 적용할 실링 버전입니다. 최신 보안 기능과 프레임워크 지원을 받으려면 최신 버전을 사용하세요. React Native 등 하이브리드 프레임워크는 현재 `3.x` 계열과 별도로 레거시 `1.7.x` 계열도 제공합니다. |
| **실링 모드** | `테스트` — 릴리스와 동일한 보호 수준이지만 화면에 테스트 모드 메시지가 주기적으로 표시됩니다. 과금되지 않습니다.<br/><br/>`릴리스` — 테스트 모드 메시지가 제거되며 과금이 발생합니다. |

### SO 암호화

APK 내 네이티브 라이브러리(`.so`) 파일을 암호화하여 리버스 엔지니어링으로부터 보호합니다.

| 값 | 동작 |
| :-- | :--- |
| **예** (기본값) | APK 내 호환되는 모든 `.so` 파일이 자동으로 암호화됩니다. |
| **아니오** | `.so` 파일을 암호화하지 않습니다. |
| **부분 암호화** | 암호화할 `.so` 파일을 직접 선택합니다. 콘솔이 암호화할 수 없는 파일 목록을 보여주며, 검색·개별 선택 또는 **Select All Supported**를 사용할 수 있습니다. 서로 다른 아키텍처에서 파일명이 같은 `.so` 파일은 함께 암호화됩니다. |

### Dex 보호

Dex 보호는 컴파일된 Dex 바이트코드에 대한 정적·동적 분석을 크게 어렵게 만듭니다. 표준 ProGuard/R8 난독화를 대체하는 것이 아니라 그 위에 적용됩니다.

<Aside type="caution">
콘솔의 기본 설정 단계에는 다음 안내가 표시됩니다.

> **필수 조치: ProGuard/R8 기본 난독화 적용 후 Dex Protection 적용**
>
> 고급 커스텀 난독화 기법인 Dex Protection을 적용하기 전에, 반드시 ProGuard/R8을 통한 표준 기본 난독화가 일관되게 올바르게 적용되도록 해야 합니다. 기본 난독화(ProGuard/R8)와 고급 난독화(Dex Protection)를 계층적으로 결합하는 것이 가장 강력한 보안 방어 체계를 구축합니다.

필요한 룰과 피해야 할 룰은 [Dex 보호를 위한 ProGuard 설정](../android-proguard-guide/)을 참고하세요.
</Aside>

| 옵션 | 값 | 설명 |
| :--- | :-- | :--- |
| **Dex 암호화** | 아니오(기본값) / 부분 암호화 | Dex 파일을 암호화하여 Java 코드를 위변조로부터 보호합니다. 활성화하면 설치·업데이트 후 최초 실행 시간이 다소 증가할 수 있습니다.<br/><br/>`부분 암호화`는 [앱 구성](../android-app-configurations/)의 **Package Selection for Dex Encryption** 목록에 등록된 패키지만 암호화합니다. 목록이 비어 있으면 암호화가 적용되지 않습니다. |
| **String 난독화** | 예 / 아니오(기본값) / 부분 암호화 | Dex 코드의 문자열을 난독화하여 정적 분석으로부터 보호합니다.<br/><br/>`예`는 앱 전체를 난독화하며 강도 설정이 함께 표시됩니다.<br/>`부분 암호화`는 [앱 구성](../android-app-configurations/)의 **Package Selection for Dex String Obfuscation** 포함(Inclusion)·제외(Exclusion) 목록을 사용합니다. |
| **Call Hiding (함수 호출 난독화)** | 예 / 아니오(기본값) | Dex 파일의 함수 호출과 코드 흐름을 난독화하여 흐름 분석을 어렵게 만듭니다. 활성화하면 강도 설정이 함께 표시됩니다. |

String 난독화 또는 Call Hiding을 **예**로 설정하면 난독화 강도를 선택할 수 있습니다.

| 강도 | 특성 |
| :--- | :--- |
| **Fast** (기본값) | 난독화 강도는 낮고 실행 성능은 높습니다. |
| **Balance** | 강도와 성능의 중간 지점입니다. |
| **Maximum** | 가장 강력한 난독화이며 성능 저하가 일부 발생할 수 있습니다. |

### 무결성 옵션

| 옵션 | 기본값 | 설명 |
| :--- | :----- | :--- |
| **파일 무결성 검사 비활성화** | 해제 | 실링 이후 앱 파일이 변조되지 않았는지 확인하는 런타임 검사를 비활성화합니다. DoveRunner 지원팀의 안내가 없다면 해제 상태로 두세요. |
| **서명 인증서 신원 검사 사용** | 해제 | 런타임에 앱의 서명 인증서를 등록된 SHA-256 지문과 비교하여 재서명되거나 리패키징된 사본을 탐지합니다. |

---

## 3단계 — 환경 탐지

변조되었거나 감시 중일 수 있는 기기 환경을 탐지했을 때 앱이 어떻게 동작할지 설정합니다.

| 옵션 | 값 | 기본값 | 설명 |
| :--- | :-- | :----- | :--- |
| **루팅** | 차단 / 허용 | 차단 | 루팅된 기기와 루팅 툴을 탐지합니다. 루팅 환경에서의 실행은 심각한 보안 위험이므로 차단을 강력히 권장합니다. |
| **개발자옵션** | 차단 / 허용 | 허용 | 개발자 옵션 활성화 여부를 탐지합니다. 개발자 옵션은 USB 디버깅을 포함해 공격자에게 강력하고 위험한 기능을 제공합니다. |
| **USB 디버깅** | 차단 / 허용 | 차단 | USB 디버깅 활성화 여부를 탐지합니다. USB 디버깅이 켜져 있으면 공격자가 디버그 도구를 연결해 시스템의 민감한 영역에 접근할 수 있습니다. |
| **Wi-Fi 보안 프로토콜** | 정보 수집 / 미사용 | 미사용 | Android 12 이상에서 연결된 Wi-Fi의 보안 프로토콜 정보를 모니터링 목적으로 수집합니다. **정보 수집**을 선택하면 앱에 `ACCESS_WIFI_STATE` 권한이 추가됩니다. 앱 동작에는 영향을 주지 않습니다. |
| **에뮬레이터** | 차단 / 선택 허용 / 허용 | 차단 | 안드로이드 에뮬레이터 환경을 탐지합니다.<br/><br/>`선택 허용`은 LDPlayer, Nox App Player, BlueStacks, GameLoop 중 특정 에뮬레이터만 허용하고 나머지는 차단합니다. |
| **직장 프로필 및 삼성 보안 폴더** | 차단 / 선택 허용 / 허용 | 차단 | 일부 치트툴이 작업 프로필을 이용해 앱을 공격합니다. 차단하면 삼성 보안 폴더에서도 앱이 실행되지 않습니다.<br/><br/>`선택 허용`은 삼성 보안 폴더만 선택적으로 허용합니다. |

<Aside type="note">
에뮬레이터를 허용하는 경우, 별도 공지가 있기 전까지 DoveRunner는 BlueStacks, LDPlayer, Nox 환경에서만 보호를 보장합니다.
</Aside>

---

## 4단계 — 툴 & 패키지 탐지

기기에 설치된 악성 도구를 탐지하고, 해당 도구와 함께 앱을 실행할지 여부를 설정합니다.

| 옵션 | 값 | 기본값 | 설명 |
| :--- | :-- | :----- | :--- |
| **매크로 도구** | 차단 / 허용 | 차단 | 앱 기능을 어뷰징하는 데 사용될 수 있는 매크로 자동화 도구를 탐지합니다. 블랙리스트는 항상 최신으로 유지됩니다. |
| **패킷 공격** | 차단 / 허용 | 차단 | 네트워크 통신 데이터를 수집하는 패킷 공격 도구를 탐지합니다. 블랙리스트는 항상 최신으로 유지됩니다. |
| **키로거** | 차단 / 허용 | 허용 | 기기에 숨어 사용자의 터치 입력을 수집하는 키로거를 탐지합니다. |
| **오버레이 윈도우** | 차단 / 허용 | 허용 | Android 12 이상에서 다른 앱이 앱 화면 위에 표시하는 오버레이를 가립니다. 앱은 **종료되지 않으며** 리포트도 전송되지 않습니다. 안드로이드 접근성(Accessibility) 오버레이는 차단되지 않습니다. |
| **Use Query All Packages** | Enable / Disable | Disable | `QUERY_ALL_PACKAGES` 권한을 사용해 앱 이름을 변경한 치트툴까지 탐지합니다. |

<Aside type="caution">
**Use Query All Packages**를 활성화하면 Google Play Console에 `QUERY_ALL_PACKAGES` 권한 사용 설명서를 제출해야 합니다. 비활성화하면 제출이 필요 없지만, 앱 이름을 변경해 동작하는 치트툴은 탐지하기 어려워집니다. [QUERY_ALL_PACKAGES 권한 사용 신청 방법](https://helpcenter.appsealing.com/hc/en-us/articles/6310295171225-How-to-submit-QUERY-ALL-PACKAGES-permission-usage-form-at-Google-Play-Console)을 참고하세요.
</Aside>

---

## 5단계 — 고급 탐지

| 옵션 | 값 | 기본값 | 설명 |
| :--- | :-- | :----- | :--- |
| **스크린 미러링 & 캡처** | 차단 / 허용 | 허용 | 스크린샷, 화면 녹화, 미러링, 원격 접속을 포함합니다. 차단하면 캡처 도구에는 앱 화면 대신 검은 화면만 보입니다. 앱은 **종료되지 않으며** 리포트도 전송되지 않습니다. |
| **Data Sealing** | 예 / 아니오 | 아니오 | **3.x 빌드에서는 동작하지 않습니다.** Data Sealing은 실링 버전 3.x에서 제거되었으며, 이 옵션은 잘못 표시되고 있는 것입니다. [Android DataSealing](../android-datasealing/)을 참고하세요. |
| **Over-The-Air 업데이트** | 예 / 아니오 | 아니오 | 새 앱 배포 없이 커스텀 블랙리스트를 실행 중인 앱에 전달합니다. 커스텀 블랙리스트는 DoveRunner 기본 블랙리스트와 함께 동작합니다. 블랙리스트는 [앱 구성](../android-app-configurations/)에서 설정합니다. 엔터프라이즈 플랜 전용입니다. |
| **앱 종료 대신 콜백으로 위협 처리 사용** | 체크박스 | 해제 | 앱을 종료하는 대신 실시간 위협 이벤트를 앱 코드로 전달합니다. |
| **Hardware Key Attestation** | Enable / Disable | Disable | 안드로이드의 하드웨어 기반 Key Attestation을 통해 기기의 부트로더 및 무결성 상태를 검증합니다. |
| **Customize Threat Response Messages** | 토글 | 해제 | 최종 사용자에게 표시되는 위협 대응 다이얼로그에 직접 만든 템플릿을 사용합니다. 켜면 **Select template** 드롭다운이 나타납니다. 끄면 솔루션 기본 메시지가 사용됩니다. |

<Aside type="note">
**Hardware Key Attestation**과 **Customize Threat Response Messages**는 모든 플랜에서 제공되지는 않습니다. 콘솔 5단계에 표시되지 않는다면 [헬프 센터](https://support.doverunner.com)로 문의해 주세요.
</Aside>

### 위협 탐지 콜백

**앱 종료 대신 콜백으로 위협 처리 사용**을 체크하면 위협 탐지 시 앱의 동작이 달라집니다. 즉시 종료하는 대신 Android 브로드캐스트를 통해 등록된 콜백을 호출하므로, 로깅·분석·자체 경고 화면·강제 로그아웃 등 원하는 처리 로직을 직접 구현할 수 있습니다.

콘솔은 적용 범위를 다음과 같이 설명합니다.

> 활성화하면 AppSealing이 앱을 종료하는 대신 등록된 콜백 함수를 호출하여 탐지 사실을 앱에 알립니다. 3단계와 4단계에서 **차단**으로 설정된 모든 탐지에 적용됩니다.

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

<Aside type="caution" title="연동 규격은 확정되지 않았습니다">
브로드캐스트 규격 — 액션 문자열, 권한 이름 규칙, 위협 코드 값 — 은 향후 릴리스에서 변경될 예정입니다. 이전 문서나 샘플 프로젝트에서 가져온 규격을 그대로 구현하지 마세요.

리시버를 구현하기 전에 [헬프 센터](https://support.doverunner.com)로 최신 연동 규격을 문의하세요. CLI의 `use_callback_feature`로 실링하는 경우에도 동일합니다.
</Aside>

### 위협 대응 메시지

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

엔터프라이즈 플랜에서는 이를 직접 만든 **템플릿**으로 대체할 수 있습니다. 11개 위협 카테고리별 문구, 다이얼로그 제목과 버튼 라벨, 색상을 지정할 수 있습니다. 템플릿은 **ThreatResponseMessages**에서 만들며, 적용하려면 5단계에서 **Customize Threat Response Messages**를 켜고 **Select template**에서 선택하거나, CLI로 실링하는 경우 프리셋에서 참조합니다.

<Aside type="note">
템플릿 생성, 지원 언어, 브랜딩 옵션은 [위협 대응 메시지](../threat-response-messages/)를 참고하세요. 콘솔에 해당 메뉴가 보이지 않는다면 [헬프 센터](https://support.doverunner.com)로 문의해 주세요.
</Aside>

---

## 보안 가이드

### 실링 전

**ProGuard/R8 설정**

Dex 보호를 사용하는 경우, DoveRunner가 대상 코드를 정확히 식별하고 난독화할 수 있도록 ProGuard/R8 설정이 비즈니스 패키지 구조를 유지해야 합니다. 필요한 룰과 피해야 할 룰은 [Dex 보호를 위한 ProGuard 설정](../android-proguard-guide/)을 참고하세요.

**기타 요구사항**

- Firebase Crashlytics는 원래 패키지 이름을 유지해야 하며, 난독화하면 안 됩니다.
- 다음 클래스는 난독화하면 안 됩니다(React Native 버전 탐지에 필요).
  ```
  com/facebook/react/modules/systeminfo/ReactNativeVersion.java
  ```

### 실링 후

실링 과정에서 원본 인증서가 무효화되므로, 실링된 앱은 설치하거나 Play Store에 제출하기 전에 반드시 서명해야 합니다.

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

Developer Console의 [키스토어 관리](../android-manage-keystore/)에서 키스토어를 미리 등록해 두면, 실링된 빌드를 다운로드할 때 콘솔이 등록된 키스토어로 자동 서명합니다. 별도 작업이 필요 없습니다.

**방법 2 — 직접 서명**

콘솔의 서명 기능을 사용하지 않는 경우, 다운로드한 파일에 직접 서명합니다.

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