Programming/Android

충격과 공포의 apk 디컴파일

커널제로 2011. 12. 20. 10:06
..불법적으로 사용하진 맙시다.

APK파일 디컴파일 방법

 

소스코드를 APK파일로 만드는 과정을 컴파일, APK파일에서 소스코드로 변환하는 과정을 디컴파일이라고 합니다.

여기서 아셔야 될것은 디컴파일이라고 소스코드의 주석부분이라던지 static변수라던지 switch문 구조라던지 정확히 표현은 안되지만

API 함수를 사용한것을 정확히 판단할 수 있으며 대략적인 소스코드의 흐름을 아실 수 있습니다.

암호화된 XML파일은 완벽히 복구가 가능하며 이외에도 소스코드가 아닌 부분들에 대해선 완벽히 복구가 가능합니다.

 

기본적으로 apk파일은 zip파일에서 확장자 이름만 변경된 파일입니다.

그렇기에 확장자를 zip로 변경하신후 압축을 풀게 되면 내부에 간단한 image는 기본적으로 추출 가능합니다.

apk확장자를 zip로 바꾼 파일 내부에는 classes.dex 파일도 존재합니다.

 

프롬프트창 실행방법 : [윈도우-실행-cmd]  혹은  [윈도우-프로그램-보조프로그램-명령 프롬프트]

ApkTool, Dex2Jar, JD-GUI 파일 전부 첨부파일에 추가해 놓았습니다.

법적으로 문제가 될시에 해당 게시물은 조용히 내리겠습니다.

신고하시기 전에 저에게 게시물 법적 여부에 대해 쪽지나 메일을 주시면 매우 협조적으로 따르겠습니다.

 

 

 

ApkTool - java파일 소스코드 이외에 모든 파일(xml,db,asset 등)을 추출 할 수 있게 해주는 툴

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

파일 명을 보시면 어떠한 파일인지 감이 오실겁니다. 각 운영체제별 설치파일과 단순 압축파일이 존재합니다.

명령어는 당연히 프롬프트에서 이뤄집니다.

명령어 : apktool d <apk파일 절대경로+파일이름+확장자> out

명령어 예 : apktool d D:\com.test.file.apk out

 

 

 

 

Dex2Jar - class파일의 집합인 dex파일을 jar파일로 변환하게 도와주는 툴

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

zip확장자로 변환된 apk파일을 압축 해제후 내부에 존재하는 classes.dex파일을 대상으로 합니다.

명령어는 당연 프롬프트에서 이뤄집니다. 이외에 다른 명령어 프로그램도 가능합니다.

명령어 :  dex2jar <classes.dex절대경로+파일이름+확장자>

명령어예 : dex2jar c:\classes.dex

 

 

 

 

JD-GUI - jar파일을 디컴파일하여 패키지주소와 함께 소스코드를 보여주는 툴

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

dex2jar파일로 추출한 jar파일을 대상으로 합니다. 물론 다른 jar파일도 가능합니다.

명령어 : 는 존재하지 않습니다.

JD-GUI파일을 실행하여 [file]-[open]을 통하여 jar파일을 읽게 되면 내주에 존재하는 소스코드를 관찰 하실 수 있습니다.

[file]-[save all sources] 를 통해 jar파일 내부의 모든 소스코드를 패키지가 포함된 형태로 추출 가능합니다.

 

 

 

 

출처 : http://blog.softwaregeeks.org

참고 : http://blog.naver.com/man8408/110111707630