태그 보관물: decompiler

Andorid .apk decompile 하기..

안드로이드 애플리케이션 파일의 확장자는 .apk 이다. 그리고 이 파일을 만드는 과정은 아래의 그림에서 package 하는 과정으로 만들게 된다. 이 글의 내용은 package하는 과정을 뒤로 돌려서 소스를 확인할 수 있는 과정인 디컴파일(decompile) 과정을 살펴보자.

안드로이드 애플리케이션의 디컴파일 과정은 다음과 같다.

1. apk 파일을 .zip으로 확장자를 바꾸고 압축을 푼다.

2. dex2jar 애플리케이션으로 dex file을 jar file로 뽑아낸다.
2.1 http://code.google.com/p/dex2jar/ 에서 다운로드를 받아서 압축을 푼다.
2.2 압축을 푼 폴더는 PATH에 추가한다.
윈도를 사용하는 경우에는 탐색기 위치에서 바로 CMD를 실행할 수 있는 레지스트리(http://www.sjava.net/32)를 입력하면, 탐색기에서 편하게 사용할 수 있다.

3. Java Decompiler로 클래스들(jar)을 디컴파일 한다.
3.1 http://jd.benow.ca/에서 다운로드 받아서 압축을 푼다.
3.2 jd-gui.exe를 실행해서 위에서 뽑아낸 classes_dex2jar.jar파일을 연다.

4. apk 파일안에 있는 바이너리 xml을 디컴파일 한다.
4.1 http://code.google.com/p/android4me/ 에서 AXMLPrinter2.jar 파일을 다운로드 받고, 아래의 명령으로 xml을 decompile 한다.

4.2 아래는 layout의 xml 파일을 decompile하는 예제이다.

윈도 CMD에서 >는 UNIX/LINUX의 |(파이프라인)과 동일한 의미이다.

자바 디컴파일러(java decompiler)

자바 애플리케이션이 실행되는 과정을 살펴보면 아래와 같다.

  1. 소스를 컴파일해서 바이트 코드를 만들어 진다.
  2. 다음으로 자바 VM이 컴파일 된 바이트 코드를 읽어서 실행이 된다.

자바 애플리케이션은 VM이 바이트 코드를 읽어서 사용하는 구조이기에, 자바 애플리케이션들은 디컴파일러를 사용하면 쉽게 소스를 확인할 수 있다. 그래서 최소한의 보안을 위해서 난독화(Obfuscate)를 많이 사용한다. 이 글에서는 자바 애플리케이션을 디컴파일할 수 있는 툴 목록은 아래와 같다.

Java Decompiler 사용하기..

http://jd.benow.ca 에서 자바(Java) 디컴파일러를 다운로드 받아서 사용하면 된다.

아래의 4가지 제품을 사용 할 수 있다.

  1. JD-Core : 바이트 코드(.class)를 소스 코드(.java)로 변환하는 라이브러리로 자바 5 이후 버전을 지원한다.
  2. JD-GUI : 독립적으로 GUI를 가진 자바 디컴파일러이다.
  3. JD-Eclipse : 이클립스 플러그인.
  4. JD-IntelliJ : 인텔리제이(IntilliJ) 플러그인.