일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 광고
- dex2jar
- Dagger
- 앱 광고
- dsl
- 수익
- Kotlin Dsl
- 무작정
- 난독화
- 안드로이드
- 플레이버
- 가이드
- 서밋
- 의존성
- 디컴파일
- 애드몹
- R8
- 의존성 주입
- 모바일 광고
- 독립성
- Kotlin
- gradle
- Flavor
- dagger2
- 적용
- 서밋코퍼레이션
- 신기술
- Google AdMob
- 프로가드
- proguard
- Today
- Total
서밋코퍼레이션
R8 난독화 적용하기 & apk 디컴파일 확인하기 본문
오늘은 R8 난독화 적용 및 예외처리 방법.
이후 apk 파일을 디컴파일하여 난독화가 잘 적용됬는지 확인해보겠습니다.
난독화를 하였을때 장점
코드 축소(또는 Tree Shaking): 앱에서 사용하지 않는 클래스, 필드, 메서드, 속성 및 라이브러리 종속성을 감지하여 안전하게 삭제합니다(64k 참조 제한을 해결하기 위한 유용한 도구).
리소스 축소: 앱의 라이브러리 종속성에서 사용하지 않는 리소스를 포함하여 패키징된 앱에서 사용하지 않는 리소스를 삭제합니다. 리소스 축소는 코드 축소와 함께 사용하여 사용하지 않는 코드를 삭제하고 마찬가지로 더 이상 참조되지 않는 리소스도 안전하게 삭제할 수 있습니다.
난독화: 클래스와 멤버 이름을 줄여 DEX 파일 크기를 줄입니다.
최적화: 코드를 검사하고 다시 작성하여 앱 DEX 파일의 크기를 더 줄입니다. 예를 들어, if/else 구문의 else {} 브랜치가 전혀 사용되지 않음을 R8에서 감지한 경우 R8이 else {} 브랜치 코드를 삭제합니다.
악용적으로 사용자가 코드를 뜯었을때 난독화처리를하여 읽을수 이해하기 어렵게 만드는 장점도 있습니다.
방법
1. 난독화 옵션 키기
buildgradle <app>
buildTypes { getByName("release") { minifyEnabled true shrinkResources true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), ) } }
|
위와 같이
minifyEnabled true
shrinkResources true
로 설정해주면 R8 난독화를 간단하게 사용할 수 있습니다. (Android Gradle 플러그인 3.4.0 이상에서)
2. 난독화 적용 후 예외처리.
- 사실 난독화는 적용이 어렵다기보단 난독화를 하지않아야할 class 및 함수를 예외처리하는데 신경을 많이써야한다는 점이 어렵습니다.
예) Google에 remote config 를 통한 값을 가져오는 통신에서 data에 난독화가 적용되어 정상적인 값을 못가져오는 현상
난독화 하지않을 부분은 위쪽 코드 proguardFiles에 명시된 곳에 예외처리를 해줘야합니다.
ex)
# Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle.kts. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #}
# Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile
# 광고 적용 -keep summit.lol.couter.scene.Ads {*;} -keep summit.lol.couter.scene.view {*;}
# 데이터 통신 -keep com.xwray.groupie.* {*;}
|
-dontwarn 패키지명.** : 지정해서 경고 무시
-keep class 패키지명.** : 난독화가 필요하지 않은 경우
-ignorewarnings : 경고 무시
-dontoptimize : 최적화 하지 않기
-dontshrink : 사용하지 않는 메소드 유지
-keepclassmembers : 특정 클래스 멤버 원상태 유지
-keepattributes : 내부 클래스 원상태 유지 적용
이후 apk 를 빌드하고 제대로 난독화가 적용됬는지 확인해 보겠습니다.
순서:
1. apk 파일을 jar파일로 변환해 줍니다.
2. jar 파일을 툴을 이용하여 Open 하여 확인.
1. Dex2Jar
apk파일를 jar파일로 변환해 줍니다.
- URL : http://sourceforge.net/projects/dex2jar
- Download : http://sourceforge.net/projects/dex2jar/files
dex2jar - Browse Files at SourceForge.net
VPN은 해킹을 방지하고 온라인 트래픽 흐름을 위한 암호화된 터널이라고 상상해 보세요. 아무도 터널 안을 통해 볼 수 없으며 사용자의 인터넷 데이터를 손에 넣을 수 없습니다. NordVPN은 공용 Wi-Fi를 사용하거나, 밖에서 개인 계정과 직장 계정에 액세스하거나, 또는 자신의 인터넷 사용 기록을 비공개로 안전하게 유지합니다.
sourceforge.net
2. jd-gui
jar 파일의 내용(소스코드)보여 주는 툴
- URL : https://github.com/pxb1988/dex2jar
- Download : https://github.com/java-decompiler/jd-gui/releases
java-decompiler/jd-gui
A standalone Java Decompiler GUI. Contribute to java-decompiler/jd-gui development by creating an account on GitHub.
github.com
가이드.
1. apk 파일을 다운받은 dex2jar-2.0 폴더안에 넣어줍니다.
(저는 test.apk 파일이라고 넣어줬습니다.)
2. CMD 창을 열어 apk 파일이 있는 dex2jar-2.0 폴더로 이동합니다.
3. 명령어를 이용하여 apk 파일을 jar 파일로 만들어줍니다.
명령어 :
d2j-dex2jar.bat -f -o (생성될 jar 파일이름 설정).jar (디컴파일할 APK 파일 이름).apk
4. 다운받은 jd-gui 를 통해 생성된 jar 파일을 Open 해줍니다.
아래 화면처럼 모든 변수 및 작성한 변수 및 함수명이 그대로 보인다면 난독화가 적용되지않은 것.
아래 이미지 처럼 class 명 부터 변수 및 함수명이 모드 변하게됩니다.( ※ proguard 파일에서 예외처리한 부분 제외 )
이상 난독화 (R8) 적용에 대한 예시 및 디컴파일 확인 방법 가이드였습니다.
감사합니다.
'Android' 카테고리의 다른 글
앱에 광고를 적용해보자!( 광고 매체사별 비교 ) (0) | 2020.03.29 |
---|---|
무료앱 유료앱 2가지 버전 만들기! Flavors를 적용하기 (0) | 2020.03.29 |
간단한 예제로 보는 Dagger2 적용 (0) | 2020.03.29 |
Gradle Kotlin DSL 적용 (0) | 2020.03.29 |