Proguard로 안드로이드 소스코드 난독화 하기

김명진·2021년 3월 15일
0

안드로이드

목록 보기
15/25
post-thumbnail

💡 프로가드란? (Proguard)


프로가드는 코드를 난독화 및 최적화를 해주는 무료 오픈소스 툴입니다. 즉 프로가드는 컴파일된 앱 패키지의 코드를 난독화해서 다른 사람이 해당 패키지를 디컴파일 했을때 해독하기 어렵게 만드는 일종의 보안 장치이다.

📌 프로가드 적용 방법


우선 안드로이드 패키지에서 어플리케이션의 build.gradle에 들어가서 buildTypes를 확인한다.

buildTypes {
	release {
    		minifyEnabled false
        	proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
}

release에서 minifyEnabled를 true로 설정하면 proguard가 적용이된다. debug 모드에서도 proguard를 적용해 테스트를 해보고싶다면 debug 모드도 추가해줘야 한다.

buildTypes {
	release {
    		minifyEnabled true
        	proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
	debug {
    		minifyEnabled true
        	proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
}

Proguard 미적용/적용 소스코드



proguard를 적용하지 않은 안드로이드 APK파일을 디컴파일하면 기존에 개발자가 작성했던 소스코드를 그대로 볼 수 있다. 하지만 proguard를 적용하면 다음와 같이 소스가 난독화된다.

*디컴파일 하는 방법은 이 글이서 다루지 않겠다.


Proguard를 적용한 안드로이드 APK파일을 디컴파일하면 해당 이미지처럼 모든 클래스, 메서드, 변수들의 이름들이 a,b,c 형태로 변경된것을 볼 수 있다. 즉 proguard를 적용하면 해독하는게 불가능하지는 않지면 매우 어렵게 만들어 어느정도의 보안을 적용할 수 있다.

📌 예외처리


Proguard를 적용하면 사용했던 라이브러리도 난독화되서 라이브러리의 클래스, 메서드, 변수의 이름도 변경이 되기 때문에 proguard를 적용하면 해당 라이브러리를 사용할수 없는 형태로 변하기 때문에 proguard-debug.pro에서 예외처리를 해줘야한다.

Proguard에서의 예외처리시 몇가지의 option들이 있다.

  • -dontwarn 패키지명.* : 지정한 경고를 무시해 주는 코드
  • -keep class 패키지명.** : 난독화 예외처리해주는 코드 (난독화가 필요하지 않는 경우)
  • -keepclassmembers

이외 자주 사용하는 라이브러리는 자체적으로 예외처리 코드를 제공해준다.

  • Retrofit2, GSON, OkHttp3, RxJava, etc.
profile
꿈꾸는 개발자

3개의 댓글

comment-user-thumbnail
2021년 3월 15일

굿

답글 달기
comment-user-thumbnail
2022년 3월 30일

프로가드가 아니라 r8이 아닌가요? gradle 3.4부터 바뀐 것으로 알고 있는데 궁금해서 남겨봅니다!

1개의 답글