마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

프로그래밍/자료실

ProGuard가 적용된 안드로이드 앱의 난독화 해제하기!!

동동매니저 2017. 11. 4. 18:27

오랜만에 글을 쓰네요...


제가 5년된 노트북으로 작업을 하는데 속도가 너~~무 느려서...

결국 포맷을 했어요 ㅠ.ㅠ

그런데...!!!

.

.

.

제가 만들고 있었던 안드로이드 앱 소스 코드도 같이 없어졌어요 ㅠ.ㅠ

그래서 다른 공간을 찾아보았어요...

그러던 도중...

단 하나의 희망을 찾았어요...

바로...

네이버 클라우드 백업 파일인데요,

그러나...!!!

소스 파일 없이 APK와 ProGuard 매핑 파일뿐이었어요 ㅠ.ㅠ

그래서!!!

ProGuard를 해제하는 방법을 찾으려고

열~심히 구글 검색을 했어요

그 결과...!!!

몇 가지 프로그램을 찾아냈어요!!!

그래서!! 이번에는 ProGuard로 난독화된 앱의 난독화 해제 방법을

알려드리고자 해요

(단, 매핑 파일이 없으면 복구 불가능... 주의하세요!!)

그나마 저 같은 경우에는 매핑 파일을 백업을 했기 때문에...

희망을 가지고 도전!!


<프로그램 리스트>

(첨부 파일을 직접 다운 받으셔서 진행 해주셔도 돼요~!)


1. dex2jar - APK 내부의 'classes.dex' 파일을 jar 파일로 변환 (사이트dex2jar-2.0.zip)

2. jd-gui - 변환된 jar 파일 디컴파일 (사이트1사이트2jd-gui-windows-1.4.0.zip)

3. Mapping Window (별칭, 직접 컴파일) - ProGuard 적용된 jar 파일과 매핑 파일로 난독화 해제 (참고소스mapping.jar)


<준비물>

1. 위에서 소개한 프로그램

2. Java JRE

3. ProGuard가 적용된 APK 파일

4. ProGuard 매핑 파일


이제부터... 시작할게요~!

(여기에서는 제가 직접 만든 '스마트 투표' 앱을 사용해요)


먼저, APK 파일에서 'classes.dex' 파일을 추출 할거예요~!

APK 파일 구조는 일반 ZIP 압축 파일 구조와 같아요

그래서!! 먼저 APK 파일의 확장자를 '.zip'으로 바꿔주세요~!

그리고 압축 프로그램으로 여시면...

APK 파일의 구조가 보이는데요,

여기에서 'classes.dex' 파일의 압축을 풀어주세요~!

다음으로 dex2jar를 실행시켜서, jar 파일로 변환할건데요,

먼저 dex2jar의 압축을 풀어주세요

그리고 '명령 프롬프트'를 열어주세요

(원도우키 + R 누르고 'cmd' 입력)

그리고 'cd' 명령으로 classes.dex 파일이 있는 폴더로 이동 후,

아래와 같이 입력 해주세요

(dex2jar 폴더)\d2j-dex2jar.bat classes.dex

그리고 잠깐 기다리면...

짠~! jar 파일로 변환됐어요~!

그리고 이를 jd-gui로 열어보면...

코드의 일부가 난독화 되어있는 것을 확인 할 수 있어요

이를 해제하기 위해서 구글 검색 하고,

직접 소스를 다운 받아서 컴파일을 했어요

다운 받으신 'mapping.jar' 파일을 사용 할건데요,

먼저 환경변수 'Path'에 Java 위치를 등록 해주시고,

mapping.jar 파일이 있는 위치로 이동 후,

명령 프롬프트에 아래와 같이 입력 해주시면...

java -jar mapping.jar


여기에서 jar 파일과 매핑 파일을 입력하고, ProGuard 선택 후

'Reverse'를 누르시면,

난독화 해제가 진행돼요

그리고...

Saved modified file!

이 문구가 나타나면 성공!!!

cmd가 가리키고 있는 폴더를 보면,

'.correlated.jar'로 끝나는 파일이 보일거예요

이 파일을 jd-gui로 열어보면...

짠~! 난독화 해제가 완료된 모습이 보여요~!

저도 이를 참고해서 포맷으로 없어진 소스를 최대한 되살리고 싶어요 ㅠ.ㅠ

이 글을 보시는 개발자 분들도

ProGuard 사용 하실 때 유용한 정보로 참고해 주셨으면 해요~!


P.S.

Play 스토어에도 매핑 파일 업로드 기능이 있어요

물론, 저도 이를 적극 활용하고 있어요

그리고, APK 파일의 크기도 줄어든다는 효과도 보고 있어요

제가 처음에 ProGuard와 함께 Multi Dex를 함께 알게 되었어요

(당시에는 Eclipse로 개발하고 있었어요...)

하지만, Android Studio를 알게 되면서

이러한 불편함도 줄어들었어요

여러분들도 코드를 줄여주고 난독화 시켜주는 ProGuard를 활용한

성공적인 앱 개발을 기원할게요~!