본문 바로가기

앱태크

안드로이드 앱 PROGUARD? 난독화? 어떻게 해야하나

안녕하세요.

오늘은 난독화 PROGUARD에 대해서 제가 하는 만큼 설명을 해보려고 합니다.

 

앱을 만들면 디컴파일을 통해서 다시 코드를 복구할 수 있다고 한다.

말이 복구지 소스코드를 추출하여 개발자가 밤새도록 만든 코드를 훔칠 수도 있다는 말인 것 같다.

그리고 API 코드를 가져다가 어둠의 경로로 사용할 수도 있지 않을까? 즉 유료로 가져온 API를

쓰는 경우 등 

 

그래서 이런 것들을 방지하기 위해 개발자들이 하는 방법은 코드를 난독화하여 업로드하는 것이다.

난독화하면 의미 없는 이름으로 코드들이 변경되어 디컴파일 즉 REENGINEER 하는 것을 힘들게 어렵게 하는 게 목적이다. 

구글링 해본 바로는 100프로 뚫지 못하는 코드는 없다고 하나 얼마나 시간을 드려서 디컴파일링을 하느냐 인 것 같다. 

 

조그마한 앱 정도 만들 때는 걱정할 필요가 없겠지만 

큰 회사인 경우 정보유출 등의 문제로 보안을 강화하는 이유가 이런 것인 것 같다. 

 

그래서 조그마한 앱 정도 만드는 사람에게는 PROGUARD가 딱 적당한 것 같다.

무료이며 별도 설치 없이 ANDROID STUDIO에서 APP 폴더에 BUILD.GRADLE 에 아래와 같은 코드를 설정하면 앱에 PROGUARD 난독화를 할 수 있다.

 

minifyEnabled에 TRUE라고 해주고 RUN APP을 하면 난독화가 되어 앱이 실행된다.

release일 때 debug 일때 따로따로 정할 수 있다.

 

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

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

이렇게 바꿔주기만 해서 앱이 문제없이 실행된다면 아주 좋겠지만.

앱에 사용하는 패키지 라이브러리 등등 에 따라서 앱이 실행이 안될 수도 있다.

그런 경우 지정 패키지 라이브러리 클래스 에는 난독화를 없애어야 앱이 재데로 실행한다.

 

예로 아래와 같이 proguard-rules.pro에 적으면 된다.

앱이 어떤 라이브러리, 패키지, 클래스를 사용하느냐에 따라 다르게 적어야 하니 

난독화 후 앱을 실행 후 에러 메시지로 구글링을 해봐서 찾아 봐야 할 것 같다.

 

-keepattributes Signature


-keep public class com.google.** {*;}
-keepnames class com.firebase.** { *; }


-keepclassmembers class com.ambitiousproject.lottolab.** {
*;
}

 

코딩은 너무 어렵다.