* 안드로이드을빨리이해하기위한방법

1. OpenSource활용

- http://code.google.com/hosting/

- http://google.com/codesearch

2. Reverse Engineering 활용하여 학습하기

- 자바 클래스 리버싱

사용자 삽입 이미지

- 안드로이드 실행파일 구조와 리버싱

사용자 삽입 이미지

사용자 삽입 이미지

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

1. 디컴파일을 위한 툴 설치

1.ApkTool

- 다운로드 : http://code.google.com/p/android-apktool/downloads/list

사용자 삽입 이미지

- 압축풀기 : android-sdk가 설치된 platform-tools디렉토리안에 apktool디렉토리를 만들어 압축을 푼다.

apktool1.4.1.tar.bz2

apktool-install-windows-r04-brut1.tar.bz2

사용자 삽입 이미지

2.Dex2Jar

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

사용자 삽입 이미지


- 압축풀기 : android-sdk가 설치된 platform-tools디렉토리안에 dex2jar디렉토리를 만들어 압축을 푼다.

dex2jar-0.0.7.10-SNAPSHOT.zip

사용자 삽입 이미지

3.Java Decompiler

- 다운로드 : http://java.decompiler.free.fr/?q=jdgui

사용자 삽입 이미지

- 압축풀기 : 실행하기 편한 곳에 압축을 풀어 놓는다.

2. 환경변수 잡기

- adb, apktool, dex2jar 명령어를 사용하기 위한 환경변수를 잡는다.

%ANDROID_SDK%\platform-tools

%ANDROID_SDK%\platform-tools\apktool

%ANDROID_SDK%\platform-tools\dex2jar

 

사용자 삽입 이미지사용자 삽입 이미지

3. apk 파일 추출

- 폰에 설치된 모든 패키리를 리스트로 보인다.

사용자 삽입 이미지

- 리스트 중에 디컴파일 할 APK파일을 정한다.

사용자 삽입 이미지

- APK파일을 추출한다. (adb shell을 종료 후 수행한다.)

사용자 삽입 이미지

4. ApkTool 실행 (java파일 외 xml, image, db등을 추출할 수 있다.)

- apktool 명령어를 사용하여 apk파일에 있는 파일을 디코딩하여 out폴더에 내보낸다.

사용자 삽입 이미지

사용자 삽입 이미지

- xml파일을 열어 내용을 확인한다.

사용자 삽입 이미지

5. Dex2Jar 실행 (Java파일을 추출할 수 있다.)

- apk파일의 확장자를 zip으로 변경한다.

사용자 삽입 이미지

- 추출한 zip파일의 압축을 풀어 classes.dex 파일을 추출한다.

사용자 삽입 이미지

- Dex2Jar를 실행한다.

사용자 삽입 이미지

- Dex2Jar를 실행하면 아래 jar파일이 생긴다.

사용자 삽입 이미지

6. JD-GDI 실행

- JD-GDI실행하여 classes.dex.dex2jar파일을 열어 소스를 분석한다.

사용자 삽입 이미지

7. Enterprise Architect를 이용하여 클래스 다이어그램으로 분석한다.

- 다운로드 : http://www.sparxsystems.com.au/products/ea/trial.html

사용자 삽입 이미지

- 설치

사용자 삽입 이미지

- 실행

사용자 삽입 이미지

- Java Decompiler에서 open할 파일을 추출한다.

사용자 삽입 이미지

- zip파일을 압축을 푼다.

사용자 삽입 이미지

- Enterprise Architect에서 classes.dex.dex2jar.src디렉토리를 import 한다.

사용자 삽입 이미지

- 클래스 다이어그램을 보고 분석한다.

사용자 삽입 이미지

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

제 11회 한국자바개발자 컨퍼런스에서 트랙1, 3번째 세션에서 Reverse Engineering, 안드로이드 학습이란 주제로 발표를 진행합니다.

리버싱이 무엇인지, 안드로이드 리버싱을 통해서 어떻게 학습을 할 수 있는지 다양한 도구와 팁들을 소개합니다.

학습을 목적으로 리버스엔지니어링이 허용되지만 기술을 복제 유혹을 받을 수도 있습니다.

법적이나, 윤리적으로 문제가 된다는 것을 명심하고, 공부한 내용을 서로 공유하며 미소 지을 수 있는 개발문화가 되길 바래봅니다. :D

발표자료와 함께 사용된 동영상 공유합니다.

발표자료 : Reverse Engineering, 안드로이드 학습

자바 클래스 리버싱

안드로이드 실행파일 구조와 리버싱

Reverse Engineering 활용한 학습 예제

  1. 분석할 앱선정과 APK 파일 추출
  2. 디컴파일 후 분석
  3. 클래스 다이어그램으로 - Enterprise Architect
  4. 의존성 검사를 통해 쉽게 - xDepend
2011/12/06 11:18 2011/12/06 11:18

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다