DoveRunner Mobile App Security 적용
DoveRunner Mobile App Security는 코드 변경 없이 코드 난독화, 무결성 보호, 환경 탐지, 위협 도구 탐지 등 다양한 자체 보호 기능을 제공합니다.
시작하기 전에 다음을 준비하세요:
- 프레임워크 — 앱 빌드에 사용된 프레임워크. React Native 등 하이브리드 프레임워크의 경우 사용 버전도 확인해 두세요.
- KeyStore 정보 — Play Store 업로드 전 DoveRunner Mobile App Security가 실링된 앱에 자동 서명하도록 하려면 필요합니다.
실링은 세 단계로 완료됩니다:
- APK 또는 AAB 파일을 업로드합니다.
- Developer Console 위저드의 5개 단계에서 보안 옵션을 구성합니다.
- 실링된 앱을 다운로드합니다 — 키스토어로 서명된 상태로, 또는 apksigner로 직접 서명할 수 있는 미서명 상태로 받을 수 있습니다.
실링이 완료되면 다운로드 안내가 표시됩니다. 이후에는 실링 이력에서도 다운로드할 수 있습니다.
위저드는 페이지 왼쪽에 표시되는 5개 단계로 구성됩니다.
| 단계 | 이름 | 다루는 내용 |
|---|---|---|
| 1 | 파일 업로드 | APK 또는 AAB 업로드, 상시 적용 보호 기능 확인 |
| 2 | 기본 설정 | 프레임워크, 실링 버전, 실링 모드, 네이티브·Dex 코드 보호 |
| 3 | 환경 탐지 | 변조되었거나 감시 중인 기기 환경에 대한 앱의 대응 방식 |
| 4 | 툴 & 패키지 탐지 | 기기에 설치된 악성 도구에 대한 앱의 대응 방식 |
| 5 | 고급 탐지 | 화면 캡처, Data Sealing, OTA 업데이트, 위협 처리 콜백 |
위저드를 설정하는 동안 오른쪽 패널에 Security level(보안 수준) 백분율과 이를 높이거나 낮추는 선택 항목이 표시됩니다. 저장된 실링 프리셋을 그대로 적용할 수 있는 Preset 선택기도 함께 제공됩니다.
상시 적용 보호 기능
Section titled “상시 적용 보호 기능”아래 보호 기능은 실링된 모든 앱에 적용되며 설정할 수 없습니다. 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단계 — 기본 설정
Section titled “2단계 — 기본 설정”| 옵션 | 설명 |
|---|---|
| 앱 프레임워크 선택 | 앱 개발에 사용한 프레임워크입니다. Native(Java/Kotlin), Unity, Unreal, Flutter, Xamarin, React Native, Ionic, Cordova, Others를 지원합니다. |
| 앱실링 버전 선택 | 적용할 실링 버전입니다. 최신 보안 기능과 프레임워크 지원을 받으려면 최신 버전을 사용하세요. React Native 등 하이브리드 프레임워크는 현재 3.x 계열과 별도로 레거시 1.7.x 계열도 제공합니다. |
| 실링 모드 | 테스트 — 릴리스와 동일한 보호 수준이지만 화면에 테스트 모드 메시지가 주기적으로 표시됩니다. 과금되지 않습니다.릴리스 — 테스트 모드 메시지가 제거되며 과금이 발생합니다. |
SO 암호화
Section titled “SO 암호화”APK 내 네이티브 라이브러리(.so) 파일을 암호화하여 리버스 엔지니어링으로부터 보호합니다.
| 값 | 동작 |
|---|---|
| 예 (기본값) | APK 내 호환되는 모든 .so 파일이 자동으로 암호화됩니다. |
| 아니오 | .so 파일을 암호화하지 않습니다. |
| 부분 암호화 | 암호화할 .so 파일을 직접 선택합니다. 콘솔이 암호화할 수 없는 파일 목록을 보여주며, 검색·개별 선택 또는 Select All Supported를 사용할 수 있습니다. 서로 다른 아키텍처에서 파일명이 같은 .so 파일은 함께 암호화됩니다. |
Dex 보호
Section titled “Dex 보호”Dex 보호는 컴파일된 Dex 바이트코드에 대한 정적·동적 분석을 크게 어렵게 만듭니다. 표준 ProGuard/R8 난독화를 대체하는 것이 아니라 그 위에 적용됩니다.
| 옵션 | 값 | 설명 |
|---|---|---|
| Dex 암호화 | 아니오(기본값) / 부분 암호화 | Dex 파일을 암호화하여 Java 코드를 위변조로부터 보호합니다. 활성화하면 설치·업데이트 후 최초 실행 시간이 다소 증가할 수 있습니다.부분 암호화는 앱 구성의 Package Selection for Dex Encryption 목록에 등록된 패키지만 암호화합니다. 목록이 비어 있으면 암호화가 적용되지 않습니다. |
| String 난독화 | 예 / 아니오(기본값) / 부분 암호화 | Dex 코드의 문자열을 난독화하여 정적 분석으로부터 보호합니다.예는 앱 전체를 난독화하며 강도 설정이 함께 표시됩니다.부분 암호화는 앱 구성의 Package Selection for Dex String Obfuscation 포함(Inclusion)·제외(Exclusion) 목록을 사용합니다. |
| Call Hiding (함수 호출 난독화) | 예 / 아니오(기본값) | Dex 파일의 함수 호출과 코드 흐름을 난독화하여 흐름 분석을 어렵게 만듭니다. 활성화하면 강도 설정이 함께 표시됩니다. |
String 난독화 또는 Call Hiding을 예로 설정하면 난독화 강도를 선택할 수 있습니다.
| 강도 | 특성 |
|---|---|
| Fast (기본값) | 난독화 강도는 낮고 실행 성능은 높습니다. |
| Balance | 강도와 성능의 중간 지점입니다. |
| Maximum | 가장 강력한 난독화이며 성능 저하가 일부 발생할 수 있습니다. |
무결성 옵션
Section titled “무결성 옵션”| 옵션 | 기본값 | 설명 |
|---|---|---|
| 파일 무결성 검사 비활성화 | 해제 | 실링 이후 앱 파일이 변조되지 않았는지 확인하는 런타임 검사를 비활성화합니다. DoveRunner 지원팀의 안내가 없다면 해제 상태로 두세요. |
| 서명 인증서 신원 검사 사용 | 해제 | 런타임에 앱의 서명 인증서를 등록된 SHA-256 지문과 비교하여 재서명되거나 리패키징된 사본을 탐지합니다. |
3단계 — 환경 탐지
Section titled “3단계 — 환경 탐지”변조되었거나 감시 중일 수 있는 기기 환경을 탐지했을 때 앱이 어떻게 동작할지 설정합니다.
| 옵션 | 값 | 기본값 | 설명 |
|---|---|---|---|
| 루팅 | 차단 / 허용 | 차단 | 루팅된 기기와 루팅 툴을 탐지합니다. 루팅 환경에서의 실행은 심각한 보안 위험이므로 차단을 강력히 권장합니다. |
| 개발자옵션 | 차단 / 허용 | 허용 | 개발자 옵션 활성화 여부를 탐지합니다. 개발자 옵션은 USB 디버깅을 포함해 공격자에게 강력하고 위험한 기능을 제공합니다. |
| USB 디버깅 | 차단 / 허용 | 차단 | USB 디버깅 활성화 여부를 탐지합니다. USB 디버깅이 켜져 있으면 공격자가 디버그 도구를 연결해 시스템의 민감한 영역에 접근할 수 있습니다. |
| Wi-Fi 보안 프로토콜 | 정보 수집 / 미사용 | 미사용 | Android 12 이상에서 연결된 Wi-Fi의 보안 프로토콜 정보를 모니터링 목적으로 수집합니다. 정보 수집을 선택하면 앱에 ACCESS_WIFI_STATE 권한이 추가됩니다. 앱 동작에는 영향을 주지 않습니다. |
| 에뮬레이터 | 차단 / 선택 허용 / 허용 | 차단 | 안드로이드 에뮬레이터 환경을 탐지합니다.선택 허용은 LDPlayer, Nox App Player, BlueStacks, GameLoop 중 특정 에뮬레이터만 허용하고 나머지는 차단합니다. |
| 직장 프로필 및 삼성 보안 폴더 | 차단 / 선택 허용 / 허용 | 차단 | 일부 치트툴이 작업 프로필을 이용해 앱을 공격합니다. 차단하면 삼성 보안 폴더에서도 앱이 실행되지 않습니다.선택 허용은 삼성 보안 폴더만 선택적으로 허용합니다. |
4단계 — 툴 & 패키지 탐지
Section titled “4단계 — 툴 & 패키지 탐지”기기에 설치된 악성 도구를 탐지하고, 해당 도구와 함께 앱을 실행할지 여부를 설정합니다.
| 옵션 | 값 | 기본값 | 설명 |
|---|---|---|---|
| 매크로 도구 | 차단 / 허용 | 차단 | 앱 기능을 어뷰징하는 데 사용될 수 있는 매크로 자동화 도구를 탐지합니다. 블랙리스트는 항상 최신으로 유지됩니다. |
| 패킷 공격 | 차단 / 허용 | 차단 | 네트워크 통신 데이터를 수집하는 패킷 공격 도구를 탐지합니다. 블랙리스트는 항상 최신으로 유지됩니다. |
| 키로거 | 차단 / 허용 | 허용 | 기기에 숨어 사용자의 터치 입력을 수집하는 키로거를 탐지합니다. |
| 오버레이 윈도우 | 차단 / 허용 | 허용 | Android 12 이상에서 다른 앱이 앱 화면 위에 표시하는 오버레이를 가립니다. 앱은 종료되지 않으며 리포트도 전송되지 않습니다. 안드로이드 접근성(Accessibility) 오버레이는 차단되지 않습니다. |
| Use Query All Packages | Enable / Disable | Disable | QUERY_ALL_PACKAGES 권한을 사용해 앱 이름을 변경한 치트툴까지 탐지합니다. |
5단계 — 고급 탐지
Section titled “5단계 — 고급 탐지”| 옵션 | 값 | 기본값 | 설명 |
|---|---|---|---|
| 스크린 미러링 & 캡처 | 차단 / 허용 | 허용 | 스크린샷, 화면 녹화, 미러링, 원격 접속을 포함합니다. 차단하면 캡처 도구에는 앱 화면 대신 검은 화면만 보입니다. 앱은 종료되지 않으며 리포트도 전송되지 않습니다. |
| Data Sealing | 예 / 아니오 | 아니오 | 3.x 빌드에서는 동작하지 않습니다. Data Sealing은 실링 버전 3.x에서 제거되었으며, 이 옵션은 잘못 표시되고 있는 것입니다. Android DataSealing을 참고하세요. |
| Over-The-Air 업데이트 | 예 / 아니오 | 아니오 | 새 앱 배포 없이 커스텀 블랙리스트를 실행 중인 앱에 전달합니다. 커스텀 블랙리스트는 DoveRunner 기본 블랙리스트와 함께 동작합니다. 블랙리스트는 앱 구성에서 설정합니다. 엔터프라이즈 플랜 전용입니다. |
| 앱 종료 대신 콜백으로 위협 처리 사용 | 체크박스 | 해제 | 앱을 종료하는 대신 실시간 위협 이벤트를 앱 코드로 전달합니다. |
| Hardware Key Attestation | Enable / Disable | Disable | 안드로이드의 하드웨어 기반 Key Attestation을 통해 기기의 부트로더 및 무결성 상태를 검증합니다. |
| Customize Threat Response Messages | 토글 | 해제 | 최종 사용자에게 표시되는 위협 대응 다이얼로그에 직접 만든 템플릿을 사용합니다. 켜면 Select template 드롭다운이 나타납니다. 끄면 솔루션 기본 메시지가 사용됩니다. |
위협 탐지 콜백
Section titled “위협 탐지 콜백”앱 종료 대신 콜백으로 위협 처리 사용을 체크하면 위협 탐지 시 앱의 동작이 달라집니다. 즉시 종료하는 대신 Android 브로드캐스트를 통해 등록된 콜백을 호출하므로, 로깅·분석·자체 경고 화면·강제 로그아웃 등 원하는 처리 로직을 직접 구현할 수 있습니다.
콘솔은 적용 범위를 다음과 같이 설명합니다.
활성화하면 AppSealing이 앱을 종료하는 대신 등록된 콜백 함수를 호출하여 탐지 사실을 앱에 알립니다. 3단계와 4단계에서 차단으로 설정된 모든 탐지에 적용됩니다.
위협 대응 메시지
Section titled “위협 대응 메시지”DoveRunner가 루팅 기기, 에뮬레이터, 디버거, 앱 변조, 후킹 프레임워크 등의 위협을 탐지하면 최종 사용자에게 대응 다이얼로그를 표시합니다. 기본적으로 솔루션이 제공하는 표준 메시지가 기기 언어로 표시됩니다.
엔터프라이즈 플랜에서는 이를 직접 만든 템플릿으로 대체할 수 있습니다. 11개 위협 카테고리별 문구, 다이얼로그 제목과 버튼 라벨, 색상을 지정할 수 있습니다. 템플릿은 ThreatResponseMessages에서 만들며, 적용하려면 5단계에서 Customize Threat Response Messages를 켜고 Select template에서 선택하거나, CLI로 실링하는 경우 프리셋에서 참조합니다.
보안 가이드
Section titled “보안 가이드”ProGuard/R8 설정
Dex 보호를 사용하는 경우, DoveRunner가 대상 코드를 정확히 식별하고 난독화할 수 있도록 ProGuard/R8 설정이 비즈니스 패키지 구조를 유지해야 합니다. 필요한 룰과 피해야 할 룰은 Dex 보호를 위한 ProGuard 설정을 참고하세요.
기타 요구사항
- Firebase Crashlytics는 원래 패키지 이름을 유지해야 하며, 난독화하면 안 됩니다.
- 다음 클래스는 난독화하면 안 됩니다(React Native 버전 탐지에 필요).
com/facebook/react/modules/systeminfo/ReactNativeVersion.java
실링 과정에서 원본 인증서가 무효화되므로, 실링된 앱은 설치하거나 Play Store에 제출하기 전에 반드시 서명해야 합니다.
방법 1 — Developer Console에서 서명 (권장)
Developer Console의 키스토어 관리에서 키스토어를 미리 등록해 두면, 실링된 빌드를 다운로드할 때 콘솔이 등록된 키스토어로 자동 서명합니다. 별도 작업이 필요 없습니다.
방법 2 — 직접 서명
콘솔의 서명 기능을 사용하지 않는 경우, 다운로드한 파일에 직접 서명합니다.
| 형식 | 도구 | 명령어 |
|---|---|---|
| APK | apksigner | apksigner sign --ks your.keystore your-app.apk |
| AAB | jarsigner | jarsigner -keystore your.keystore your-app.aab alias |