* 안드로이드을빨리이해하기위한방법
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 활용한 학습 예제
- 분석할 앱선정과 APK 파일 추출
- 디컴파일 후 분석
- 클래스 다이어그램으로 - Enterprise Architect
- 의존성 검사를 통해 쉽게 - xDepend