신규 프로젝트를 진행한 뒤, 난독화가 잘 되었는지 확인하기 위해서 디컴파일을 진행해 보았다. 디컴파일은 평소에 자주 하는게 아니기 때문에 정리차원에서 포스팅을 해두자.
apktool을 이용하여 디컴파일을 하는 방법도 있지만, 나는 오래전에 사용해 보았던 dex2jar를 이용하여 간단하게 디컴파일을 할 것이다.
1. 먼저 아래 링크에서 dex2jar를 다운 받는다.
https://sourceforge.net/projects/dex2jar/
2. 다운받은 dex2jar를 압축 풀고, 디컴파일을 하고 싶은 apk 파일을 이 폴더안에 넣는다.
3. 터미널을 이용하여 dex2jar 폴더로 이동하여 아래와 같이 명령어를 입력한다. (apk 파일이 jar로 변환되어 하나 생성되었을 것이다)
$ sh ./d2j-dex2jar.sh your_test.apk
4. 혹시라도 권한 오류가 발생했다면 chmod 명령어로 권한을 부여하면 된다.
$ sudo chmod +x d2j_invoke.sh
5. jar로 변환된 파일을 GUI로 볼 수 있도록 JD-gui를 다운 받는다.
http://java-decompiler.github.io/#jd-gui-download
6. 압축을 풀고 실행하면 되는데, 이전에는 보이지 않던 오류 메시지가 뜨더라.
No suitable Java version found on your system!
This program requires Java 1.8+.
Make sure you install the required Java version.
7. 위 오류를 해결하기 위해서는
- JD-GUI 실행파일에서 우클릭 후, 패키지 내용보기를 선택
- Contents/MacOS/universalJavaApplicationStub.sh 파일을 열고
- export JAVA_HOME=$(/usr/libexec/java_home -v1.8) 을 입력
8. 이렇게 설정이 끝났으면 다시 JD-gui 앱을 열고, 3번에서 만들어진 jar 파일을 불러오면 패키지별 트리 형태로 클래스와 소스 내용이 디컴파일 되어 읽을 수 있을 것이다.