본문 바로가기
낙서장/android

apk파일을 통해 소스를 보는 방법(퍼옴)

by "뭉치" 2021. 8. 10.
728x90

안드로이드 어플리케이션 파일인 APK(Android PacKage)파일은 zip과 같은 하나의 압축 파일이다.

어플리케이션에 관계된 파일들을 하나로 압축해 놓은 파일일 뿐이기 때문에. 압축 프로그램을 사용하여 압축을 풀수 있다.

 

APK파일이 만들어지는 구조도를 보면 다음과 같다.

 

 


 

 

apk파일의 압축을 풀면 나오는 .dex 파일은 안드로이드 가상 머신인 dalvik이 인식할 수 있도록 .class파일을 바이트 코드로 변환 된 파일이다.dex 파일을 jvm 바이트 코드로 디컴파일 하여 .class 파일을 추출 할 수 있다면안드로이드 어플리케이션의 java 코드의 추출이 가능하다.

 

 dex 파일을 디컴파일 하기 위해선 다음과 같은 준비물이 필요하다.  

 

.dex파일을 .class파일로 디컴파일 하는데 필요

 

- undx.jar ( http://www.illegalaccess.org/undx.html )




- dxdump.zip ( http://dex-decomplier.googlecode.com/files/dexdump.zip )

 

 .class 파일을 .java파일로 디컴파일 하는데 필요   - jd-gui ( http://java.decompiler.free.fr/?q=jdgui#downloads )     디컴파일 테스트를 위한 HelloWorld-debug.apk파일을 미리 준비하였다.패키지 파일중 액티비티를 상속 받은 java 클래스 파일에테스트를 위한 비교값으로 statiic 으로 선언된 String 변수와 int 변수를 선언하여 각각 값을 넣었다.  

 

 

 

.dex파일의 디컴파일 과정은 다음과 같다.

 

1) .dex 파일을 .jar파일의 형태로 디컴파일.

2디컴파일된 .jar파일을 .java 형태로 다시 디컴파일.

 

앞서 미리 만들어 놓은 HelloWorld-debug.apk 파일의 압축을 풀어 디컴파일 테스트를 준비한다.

그리고 준비한 undx.jar 파일과 dexdump 관련 파일을 압축을 풀어놓은 디렉토리에 위치시킨다.

 

디컴파일을 하기 위한 명령어는 다음과 같다.

 

 java -DASDKLoc={Location of dexdump} -jar undx.jar {dexfile}

 

 

압축을 푼 디렉토리에 있는 classes.dex파일을 디컴파일 하기 위한 명령어를 cmd 창에서 실행한 화면이다.


 

.dex파일을 디컴파일 하는 과정

 

 

프로젝트 폴더 밑의 gen 폴더를 확인하면 classes.dex 파일이 ,jar 파일로 디컴파일 된 파일을 확인 할 수 있다.

이제 .jar파일을 다시 디컴파일 하여 내용을 확인해 보자.

 

원본의 내용

 

디컴파일된 내용


 
디컴파일을 한다고 하여 컴파일 되기 이전의 형태와 완전히 동일하지는 않다.

그러나 디컴파일을 통해 컴파일 되기 이전의 클래스 파일의 정보는 확인 가능하다.

  

참고 사이트

 

http://teamcrak.tistory.com/268
http://kozazz.tistory.com/tag/decompil
http://aquarium.72pines.com/2010/02/24/using-undx-to-decompile-android-dex-bytecode/
[출처] dex 파일 디컴파일(decompile)|작성자 gigar

 

http://cafe.naver.com/itdocument/3297

 

728x90

'낙서장 > android' 카테고리의 다른 글

google - server  (0) 2021.08.10
Android - DB  (0) 2021.08.10
Study - Layout  (0) 2021.08.10
Android - project  (0) 2021.08.10
android - apk파일 만들기  (0) 2021.08.10

댓글