DoveRunner Mobile App Security 적용
DoveRunner Mobile App Security는 코드 변경 없이 코드 난독화, 무결성 보호, 환경 탐지, 위협 도구 탐지 등 다양한 자체 보호 기능을 제공합니다.
시작하기 전에 다음을 준비하세요:
- 프레임워크 — 앱 빌드에 사용된 프레임워크. React Native 등 하이브리드 프레임워크의 경우 사용 버전도 확인해 두세요.
- KeyStore 정보 — Play Store 업로드 전 DoveRunner Mobile App Security가 실링된 앱에 자동 서명하도록 하려면 필요합니다.
실링은 세 단계로 완료됩니다:
- APK 또는 AAB 파일을 업로드합니다.
- Developer Console의 5개 설정 그룹에서 보안 옵션을 구성합니다.
- 실링된 앱을 다운로드합니다 — 키스토어로 서명된 상태로, 또는 apksigner로 직접 서명할 수 있는 미서명 상태로 받을 수 있습니다.
실링이 완료되면 다운로드 안내가 표시됩니다. 이후에는 기록 정보에서도 다운로드할 수 있습니다.
v3.x 릴리스 노트
Section titled “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” 워터마크가 표시됩니다. 추가 요금은 발생하지 않습니다.릴리스 — 워터마크를 제거하고 프로덕션 기능을 전부 활성화합니다. |
| SO 암호화 | APK에 포함된 네이티브 라이브러리(.so) 파일을 암호화하여 역공학을 방지합니다.예 — 지원되는 모든 SO 파일을 암호화합니다.아니오 — SO 파일을 암호화하지 않습니다.부분 암호화 — 특정 SO 파일만 암호화합니다. 전체 암호화 시 성능 문제가 있는 경우 사용합니다. |
Dex 보호
Section titled “Dex 보호”Dex 보호는 컴파일된 Dex 바이트코드를 난독화하여 정적·동적 분석을 어렵게 만듭니다. 적용 전 ProGuard/R8 기본 난독화를 먼저 적용해야 합니다.
| 옵션 | 설명 |
|---|---|
| String 난독화 | Dex 바이트코드의 문자열 리터럴을 난독화하여 정적 분석 및 문자열 추출을 어렵게 만듭니다.Fast — 오버헤드가 낮고 난독화 강도가 가볍습니다.Balance — 성능과 보호 수준의 균형을 맞춥니다.Maximum — 가장 강력한 난독화. 앱 시작 시간에 영향을 줄 수 있습니다. |
| Call Hiding (함수 호출 난독화) | Dex 바이트코드의 함수 호출 패턴을 난독화하여 제어 흐름 분석을 어렵게 만듭니다.Fast / Balance / Maximum — String 난독화와 동일한 수준 구분을 사용합니다. |
기기 환경이 변조되었거나 모니터링 중인 것으로 감지될 때 앱이 어떻게 반응할지를 설정합니다.
| 옵션 | 기본값 | 설명 |
|---|---|---|
| 루팅 | 차단 | 루팅된 기기를 탐지합니다. 차단 설정 시 감지되면 앱이 종료됩니다. |
| 개발자옵션 | 허용 | Android 개발자 옵션 활성화 여부를 탐지합니다. 개발자 모드는 악용될 수 있는 디버깅 인터페이스를 노출합니다. |
| USB 디버깅 | 차단 | ADB USB 디버깅 활성화 여부를 탐지합니다. 차단 설정 시 USB 디버깅이 켜져 있으면 앱이 종료됩니다. |
| Wi-Fi 보안 프로토콜 | 미사용 | 정보 수집 설정 시 기기에서 사용 중인 Wi-Fi 보안 프로토콜(예: WPA2, WPA3)을 모니터링 목적으로 수집합니다. 앱 동작에는 영향을 주지 않습니다. |
| 에뮬레이터 | 차단 | Android 에뮬레이터 환경을 탐지합니다.차단 — 에뮬레이터 감지 시 앱이 종료됩니다.선택 허용 — 특정 에뮬레이터만 허용하고 나머지는 차단합니다.허용 — 모든 에뮬레이터 환경에서 앱이 실행됩니다. |
| 직장 프로필 및 삼성 보안 폴더 | 차단 | Work Profile 환경에서는 일부 보안 기능이 비활성화될 수 있으며, 일부 공격 도구가 이를 이용해 앱을 공격합니다.차단 — Work Profile 또는 삼성 보안 폴더에서 실행 시 앱이 종료됩니다.선택 허용 — 특정 프로파일만 허용합니다.허용 — 모든 Work Profile 환경에서 앱이 실행됩니다. |
툴 & 패키지 탐지
Section titled “툴 & 패키지 탐지”기기에 설치된 악성 도구를 탐지하고, 해당 도구가 있는 환경에서 앱 실행 여부를 설정합니다.
| 옵션 | 기본값 | 설명 |
|---|---|---|
| 매크로 도구 | 차단 | 앱 기능 악용에 사용될 수 있는 매크로 자동화 도구를 탐지합니다. 차단 목록은 최신 상태로 유지됩니다. |
| 패킷 공격 | 차단 | 네트워크 트래픽을 가로채거나 변조하는 패킷 인터셉터 도구를 탐지합니다. |
| 키로거 | 허용 | 터치 입력을 수집하는 키로거 앱을 탐지합니다. 민감한 정보를 다루는 앱에서는 차단을 권장합니다. |
| 오버레이 윈도우 | 허용 | 다른 앱이 앱 위에 오버레이 창을 표시하는 것을 탐지합니다. 오버레이는 입력 가로채기나 화면 콘텐츠 캡처에 악용될 수 있습니다. |
| 옵션 | 기본값 | 설명 |
|---|---|---|
| 스크린 미러링 & 캡처 | 허용 | 앱이 포그라운드에 있는 동안 화면 콘텐츠가 캡처되거나 외부 디스플레이로 미러링되는 것을 방지합니다. 민감한 정보를 다루는 앱에서는 차단을 권장합니다. |
| Over-The-Air 업데이트 | 아니오 | 새 앱 릴리스 없이 실행 중인 앱에 커스텀 위협 차단 목록 업데이트를 배포합니다. 커스텀 차단 목록은 DoveRunner 기본 차단 목록과 병합되어 활성 앱 설치본에 전달됩니다. 차단 목록 내용은 앱 구성에서 설정합니다. |
보안 가이드
Section titled “보안 가이드”ProGuard/R8 설정
Dex 보호를 사용하는 경우, DoveRunner가 비즈니스 코드를 올바르게 식별하고 난독화할 수 있도록 ProGuard/R8 설정에서 패키지 구조를 유지해야 합니다. 필수 룰과 주의사항은 ProGuard 설정 가이드를 참고하세요.
기타 요구사항
- Firebase Crashlytics는 원래 패키지 이름을 유지해야 합니다 — 난독화하지 마세요.
- React Native 버전 감지를 위해 다음 클래스를 난독화하면 안 됩니다:
com/facebook/react/modules/systeminfo/ReactNativeVersion.java
실링 과정에서 원본 인증서가 무효화되므로, 실링된 앱은 기기 설치 또는 Play Store 제출 전에 반드시 서명이 필요합니다.
방법 1 — Developer Console에서 서명 (권장)
Developer Console에 키스토어를 미리 등록해두면, 실링된 빌드 다운로드 시 자동으로 서명이 적용됩니다. 별도의 수동 작업이 필요하지 않습니다.
방법 2 — 수동 서명
콘솔의 서명 기능을 사용하지 않는 경우, 다운로드 후 직접 서명해야 합니다. APK와 AAB에 사용하는 도구가 다릅니다:
| 형식 | 도구 | 명령어 |
|---|---|---|
| APK | apksigner | apksigner sign --ks your.keystore your-app.apk |
| AAB | jarsigner | jarsigner -keystore your.keystore your-app.aab alias |