안드로이드 APK 디컴파일 (소스보기)

안드로이드는 JAVA기반이기 때문에 런타임 후 코드가 실행되는 구조로 코드를 역으로 컴파일가능하다. 그중 가장 흔하게 사용하는 Dex2Jar이 있다. 이를 이용하면 dex파일을 jar로 변환이 가능하다. jar로 변환 후 JD GUI툴을 이용하여 코드를 볼 수있다.

아래 2가지 툴을 다운받아서 사용하면 되고 Windows와 Mac모두 지원이 된다.

dex2jar

http://code.google.com/p/dex2jar/downloads/list
dex2jar-0.0.9.12-a.zip

JD GUI

http://jd.benow.ca/
jd-gui-0.3.5.osx.i686.dmg jd-gui-0.3.6.windows.zip

 

apk파일을 jar로 변환하여 JDGUI로 어떻게 코드를 보는지 하나씩 설명 하겠다.

1) 소스를 볼 apk파일을 준비한다음 apk->zip파일로 확장자를 변환하여 압축을 푼다. 참고로 http://www.apkmirror.com 사이트를 이용하면 구글플레이에 올라온 앱을 모두 구할 수 있다.

 

2) 압축을 풀면 classs.dex파일이 보인다. 이파일을 dex2jar툴을 이용하여 jar로 변형한다. 위에서 받은 dex2jar압축을 풀면 dex2jar.bat(windows용)파일과 dex2jar.sh(mac용)을 볼 수 있다.

3) 명령어를 통해 dex파일을 jar로 변경 해보자.(mac)
$>./dex2jar.sh <apk압축을 푼 위치>/classes.de

이렇게 명령어를 실행 하고 나면 classes.dex의 같은 폴더내에 classes_dex2jar.jar파일이 생성된다.

JD-GUI를 통해서 디컴파일된 jar파일을 불러와서 코드를 보면된다.

이렇게 디컴파일이 쉽다 보니 코드를 난독화 하여 빌드되는 앱이 대부분일 것이다. 예를 들어 클래스명이나 메서드 명을 알아보지 못하게 바꿔버리는 해당클래스나 메서드가 어떤역할을 하는지 이해하지 못하도록 해버린다. 그렇기 때문에 이런 역컴파일 코드는 단순히 참고용으로 사용하길 바란다.