안드로이드 난독화 처리하기
Posted by Albert 2839Day 22Hour 50Min 42Sec ago [2017-07-11]
앱개발하면서 난독화하는건 이번이 처음이다
제일좋은건 유료버전인 덱스가드 사용하면 좋은데
현회사에서 제공할수없는 사항으로 공짜인 프로가드 적용하기로 했다.
프로가드 적용은 생각보다 쉬웠지만 적용후 룰을 지정하는부분에서 삽질을 많이 했다.
1. 적용방법
적용하려는 타겟앱의 build.gradle 파일에서
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
minifyEnabled 설정을 true로 하면 난독화처리가 완료된다.
proguard-android.txt 는 자신의 sdk위치 / tools/proguard/폴더밑의 파일을 기본으로 잡고 proguard-rules.pro 파일은 타겟앱의 루트 폴더에 생성하면 된다.
만약 관련 파일없을시 사인된 앱생성시 애러가 난다. 애러를 확인하여 해당 경로에 관련 파일을 넣어주면 된다.
2. 다중모듈관련 (현재 배포한 앱은 여러가지 모듈을 만들어 같이 사용중인앱이라 초반에는 모듈별로 gradle설정을 하였는데 알고보니 타켓만 설정하면 나머지 모듈들은 알아서 난독화 처리된다.)
3. 설정후 proguard-rule설정하기
일단 아무것도 않하고 빈 프로가드 룰을 넣으니 애러가 막막하게 떳다. ㅜㅜ
프로가드는 난독화 처리하는거로서 일부 난독화후 잘되던 기능이 작동 않될수 있다는 사실을 알아야 한다.
해결방법은 proguard-rule.pro 파일에 관련 애러내용들을 하나하나 배제하면된다.
자주사용되는 proguard-rule.pro 기본템플릿은 웹에 넘쳐난다.
이외 자신의 앱에맛겟금 설정을 해줘야한다.
이미 알려진 공용외부라이브러리는 난독화 할 필요가 없으므로
-dontwarn com.xxx.** //난독화에서 관련 클래스를 예외처리한다.
-keep class xxx.xxx.** {*;} // 위와 거의 비슷하게 관련 클래스를 난독화에서 예외처리한다.
프로가드의 난독화 예외처리방법은 관련 포털사이트에서 참고하시길바란다.
이런식으로 앱배포시 애러에 근거하여 하나하나 난독화 예외처리작업을하여 배포성공할때까지 예외처리한다.
apk가배포되면 끝인줄 알았는데 그것이 아니였다.
난독화된 apk파일을 실제폰에 깔고 실행햇더니 일부 기능들이 않되는것이 발견되었다.
대부분 관련 클래스가 난독화되어 찾지못하는 것이였는데 하나하나 또 난독화에서 예외처리했다.
이로인하여 모든 난독화 작업이 끝낫다.
실제 프로가드 난독화 작업은 기술적측면에서 어려운건없는데 예외처리하는데 좀 많은 테스트 및 시간이 들어서 불편했다.
덱스가드는 사용못해봐서 잘 모르겠는데 한방에 난독화될수있는 관련 툴이 있으면 참 편하겠다는 생각이 든다.ㅜㅜ