1. Dex 부분 암호화 (Selective Dex encryption)
Dex 부분 암호화는 안드로이드 앱의 Java/Kotlin 코드로 빌드된 Dex 파일을 모두 암호화하여 보호하는 Dex 암호화 기능이 일부 앱에서 성능을 저하하는 경우 이를 완화할 수 있도록 제공되는 기능입니다.
Dex 전체 암호화를 적용한 앱을 단말에 설치 후 첫 실행 시 액티비티가 실행될 때까지 걸리는 시간이 증가할 수 있습니다. 앱이 단말에 설치될 때 Dex 파일은 단말에 맞게 최적화되는 과정을 거치게 되는데 앱실링을 적용하여 암호화된 Dex 파일은 단말에 설치될 때 시스템이 최적화를 하지 못합니다. 이로 인해 앱을 처음 실행할 때 복호화되는 Dex를 대상으로 최적화를 진행하게 되고 이때 딜레이가 발생합니다.
2. 부분암호화 적용하기
1) 실링 옵션 적용할 때 부분 암호화 선택
앱실링 적용 시 암호화 메뉴에서 Dex 부분 암호화를 활성화하여 적용할 수 있습니다. 기본적으로는 모든 암호화를 활성화하는 것을 권장드립니다.
2) 실링 요청
부분 암호화를 처음 사용하는 경우 실링을 요청하면 다음과 같은 알림창이 표시됩니다. ‘확인’ 버튼을 선택하여 다음 화면으로 진행할 수 있습니다.
위와 같이 업로드를 시도한 앱에 대해 팝업창이 표시됩니다. 확인 버튼을 누르면 새로운 팝업창이 표시되며, 이 화면에서 해당 앱에서 보호할 클래스 또는 패키지를 추가할 수 있습니다.
주의사항: 패키지를 보호할때 와일드카드 입력 없이 패키지 이름만 입력해 주시기 바랍니다.
3) 부분암호화 적용할 클래스 또는 패키지 추가
업로드할 앱의 클래스 또는 패키지를 미리 추가한 다음 팝업창을 닫고 다시 실링을 요청하면 Dex 부분 암호화가 정상적으로 적용됩니다.
이때, 실제 앱에 존재하지 않는 클래스나 패키지를 암호화 하려고 하면 실링이 실패하므로, 앱에 난독화가 적용된 경우 기능 사용에 주의가 필요합니다.
4) 실링 재요청 및 결과 확인
Dex 부분 암호화를 적용한 다음 실링을 요청하면 실링 이력의 상세 등록정보에서 부분암호화가 정상적으로 적용된 것을 확인할 수 있습니다.
5) 부분 암호화 패키지 및 클래스 목록 관리
Dex 부분 암호화를 위한 패키지 및 클래스를 관리하는 팝업창은 안드로이드 보안 서비스 페이지의 앱 구성 패널에서 각 앱마다 가지고 있는 ‘부분 암호화 관리’ 버튼을 선택하여 접근할 수 있습니다.
3. Dex 전체 암호화 vs 부분 암호화
전체 암호화에 따른 성능 저하는 저사양 단말에서 비교적 크게 발생합니다.
아래 비교표를 통해 안드로이드 OS별 Dex 암호화 옵션에 따른 성능을 확인하실 수 있습니다.
성능 측정 기준
- OS 별 단말에 설치 후 최초 실행 시 Activity가 실행될 때까지 걸리는 시간 측정
- 앱실링 2.22.0.0 버전 기준
- Dex 전체 크기가 22MB인 앱으로 측정하였으며, Selective dex 기능을 적용할 때 1~2MB의 패키지를 선택하여 암호화하였습니다.
- 앱의 dex 크기 및 앱의 구조에 따라 실제 성능은 편차가 발생할 수 있습니다.
설치 후 첫 실행시 Activity 실행에 걸리는 시간 |
||||
안드로이드 버전 |
앱실링없는 원본 (초) |
전체 암호화 (초) |
부분 암호화 (초) |
Dex 암호화 하지 않음 (초) |
5 |
1.99 |
9.42 |
5.64 |
3.51 |
6 |
1.79 |
8.64 |
5.29 |
3.84 |
7 |
0.79 |
5.11 |
4.31 |
3.49 |
8 |
0.84 |
6.23 |
3.62 |
4.14 |
9 |
1.80 |
8.40 |
4.52 |
3.28 |
10 |
1.22 |
5.09 |
2.76 |
2.06 |
11 |
0.43 |
2.91 |
1.80 |
1.50 |