본문 바로가기

Android

APK파일 디컴파일(Decompile)하는 방법 1


요즘 널리 쓰이는 구글 안드로이드 스마트폰. 
다들 잘 알고 있다시피 안드로이드 앱 개발은 자바(JAVA)로 합니다.

JAVA로 개발된 프로그램은 C와 같은 언어와 달리 바이트 형태의 class파일을 생성하는데 'Write Once, Run Anywhere"라는 Java의 패러다임에서 알수 있듯이, JavaVM이 존재하는 모든 시스템에서 실행될수 있는 시스템 독립적인 코드입니다.
따라서, 바이트 코드와 같은 경우는 바이너리 코드와 달리 손쉽게 역컴파일이 가능합니다.

* 참고 : http://lyb1495.tistory.com/entry/Java-Decompiler-jad

안드로이드 앱 역시 여기서 예외일 수 없는데, apk 파일만 가지고 있으면 손쉽게 디컴파일을 통해 소스코드를 확인할 수 있습니다.

준비물

1. dex2Jar
apk파일의 압축을 해제하면 classes.dex 라는 파일을 발견할 수 있는데, 이 파일은 안드로이드 가상 머신인 dalvik이 인식할 수 있도록 class파일을 바이트 코드로 변환 된 파일입니다.

  
dex2jar는 dex파일로부터 class 파일을 추출하는 도구 입니다. 
dex2jar로부터 추출된 class파일은 JAVA 디컴파일러를 통해 소스코드로 복원해 낼 수 있습니다.

다운로드 : http://code.google.com/p/dex2jar/downloads/list

2. jad
class 파일을 java파일로 복원하는 툴

다운로드 : http://www.varaneckas.com/jad


준비물이 갖추어졌으니 본격적으로 apk 파일을 디컴파일 해보겠습니다.

먼저 아래 그림과 같이 apk파일을 압집을 통해 압축을 해제합니다. 


 apk파일의 압축을 해제하면 classes.dex파일을 확인할 수 있는데 이 파일을 dex2jar를 통해 다시 한번 압축을 해제하게 됩니다. 사용법은 다음과 같이 간단합니다.

 (dex2jar가 설치된 폴더에서) dex2jar 대상dex파일 


dex2jar를 통해 dex파일 압축을 해제하면 다음 그림과 같이 classes_dex2jar.jar 파일을 확인할 수 있습니다.

 
이 파일은 class파일을 압축하고 있는 파일로 압집등을 통해 간단히 압축을 해제하면 class파일들을 확인할 수 있습니다.


이제 jad를 통해 class파일들을 java파일로 복원합니다.
아래 명령은 -dsrc 로 지정한 디렉토리(C:\android\decompiler\parceltrace-2\classes_dex2jar)의 모든 class파일을 디컴파일하는 명령입니다.


위 명령을 수행한뒤 jad가 설치된 폴더를 보면 다음 그림과 같이 java파일들이 생성된 것을 확인할 수 있습니다.
(jad의 -d 옵션을 통해 소스가 생성되는 디렉토리 위치를 변경할 수 있습니다. 자세한 사용법은 다운로드 받은 jad 에 첨부된 readme.txt 파일을 참조)


---------------------------------------------------------------------------------------------------  

[출처] http://lyb1495.tistory.com/83