Android:Decompile
Android 디컴파일(Decompile)에 대한 설명.
Tools
- APK to JAR.
- DEX2JAR - https://code.google.com/p/dex2jar/
- Decompress APK.
- APKTool - https://code.google.com/p/android-apktool/
- JAR Decompiler .
- JD-GUI - http://java.decompiler.free.fr/?q=jdgui
- JAD - http://www.varaneckas.com/jad/
APK Decompile
APK tool, dex2jar, jd-gui 를 이용한 안드로이드 apk 파일 디 컴파일 방법에 대하여 정리한다.
apk tool
- http://code.google.com/p/android-apktool/
- 다운로드 : apktool-install- windows 용 파일, apktool-file
- 다운받은 두 압축파일을 모두 압축 해제
- 내 컴퓨터의 android-sdk/platform-tools/ 에 apktool이라는 폴더 생성
- apktool 폴더에 aapt.exe, apktool.bat, apktool.jar (다운받은 파일을 압축 한 결과 파일, 총3개)를 복사 붙여 넣는다.
- apk tool 준비 완료
dex2jar
- http://code.google.com/p/dex2jar/
- 다운로드 : dex2jar-0.0.7.9-snopshot.zip -> 압축 해제
- 내 컴퓨터의 android-sdk/platform-tools/ 압축해제한 폴더 붙여 넣고, 폴더명을 dex2jar 로 간소화
apk tool과 dex2jar를 사용하기 위한 환경 변수 설정
- 환경변수 설정의 시스템 환경변수중 Path를 편집
- 내컴퓨터/andorid-sdk/platform-tools 경로 추가
- 내컴퓨터의 /andorid-sdk/platform-tools/apktool 경로 추가
- 내컴퓨터의 /andorid-sdk/platform-tools/dex2jar 경로 추가
- 3개의 경로를 Path 시스템 변수에 추가 후 cmd 접속
- cmd : adb 입력! -> 뭔가 주르륵 나온다면 정상
- cmd: apktool 입력! -> 뭔가 주르륵 나온다면 정상
- cmd: dex2jar 입력! -> 뭔가 주르륵 나온다면 정상
- apk tool, dex2jar 사용 준비 완료!!!!
디컴파일러 jd-gui 준비
안드로이드 디바이스나 가상디바이스 에서 해당 apk 파일 추출
- 버추얼박스에 올린 가상디바이스를 사용하고 있는 상태일때
- 가상디바이스를 실행하고 wifi 설정에서 IP를 확인한다.
- cmd창을 실행하고
- adb connect 확인된 IP
- adb devices : 연결된 가상디바이스를 확인할 수 있다.
- adb shell 실행. shell모드에서
shell@android:/ $ pm list package -f
하면
가상디바이스에 설치된 apk목록을 확인할 수 있다.
목록에서 추출할 apk의 경로와 이름을 확인하고 - adb pull /data/app/com.HelloWorld.apk(추출할 apk의 경로및 이름)
apktool로 추출한 apk 파일 디컴파일하기
- apktool d 추출한apk이름 출력할디렉토리 (e.g. apktool d HelloWorld.apk out)
- out 폴더에는 res폴더, smali폴더, androidmanifest.xml, apktool.yml 파일이 생성된다.
- smali 폴더에 해당 apk의 java화일의 *.smali가 생성되어있음을 확인할 수 있다.
- 안드로이드 apk 를 리버스 할 준비는 끝 이제 안드로이드 apk파일을 만들어서 리버스를 해보자!
- 이클립스를 통해 리버스할 안드로이드 테스트 프로젝트를 만든다.
- 안드로이드 프로젝트 우클릭 -> android tools -> export unsinged application package.... 선택 -> apk 파일 만들 경로 설정
- 안드로이드 apk 파일 생성 완료
WARNING |
apktool을 이용하면 apk로 부터 리소스파일과, 설정파일을 가져오는것이 가능하다 그러나 자바 소스를 보기에는 어려움이 있다. |
dex2jar와 jd-gui로 apk 파일 소스보기
- 자바파일을 보고 싶은 apk파일의 확장자를 zip으로 바꾼다.
- 알집과 같은 프로그램으로 압축을 푼다.
- res폴더와, androidManiFest.xml, classes.dex , resources.arsc 파일이 생성된다.
- classes.dex를 통해 자바파일을 읽어 볼수 있다.
- cmd 접속
- cmd 에서 classes.dex 파일 경로로 이동
- cmd 에서 dex2jar classes.dex 를 입력
- 뭔가 진행되고 완료
- 해당 경로에 classes_dex2jar.jar 파일이 생성된다.
- jar화일의 압축을 풀면 행당 해당 apk의 class화일을 확인할 수 있다.
- jd-gui 프로그램 실행 classes_dex2jar.jar 파일을 읽어온다.
- 패키지와 자바 소스를 확인 할수 있다.
jad를 이용한 java.class를 java.java 로 디컴파일
- www.varaneckas.com/jad 로 이동
- windows용 jad.zip 파일 다운로드
- jad.zip 압축 해제 후 실행파일을 내 컴퓨터의 java/jdk/bin 폴더에 복사 붙여넣기 한다.
- jad 를 이용한 디컴파일 준비 완료
- cmd로 디컴파일을 원하는 class 파일 경로로 이동 후 콘솔창에
jad -p aaa.class > bbb.java
입력
aaa.class 파일을 디컴파일 해 해당 경로에 bbb.java 파일을 생성한다.
See also
Favorite site
- 안드로이드 APK 디컴파일하기
- Android 디컴파일(decompile) 방법
- dex 파일 디컴파일(decompile)
- dex 파일 수정방법
- Odex Deodex 강좌 #1 오덱스 & 디오덱스란?
- Odex Deodex 강좌 #2 (부제 : dex화일 추출)
- Odex Deodex 강좌 #3 (부제 : dex화일 수정 및 적용)
- Odex & Deodex 명령어 정리
- SOFTDX DEX TOOLS v1.0
References
-
Android_how_to_use_decompile_tools.pdf ↩