소스복원은 100% 완벽하지 않다. 개발자의 역량에 따라 달라 질 수 있다. 노가다 작업임이 분명하고, 시간 많이 걸릴 수 있다.
--------------------------------------------------------------------------------------------------------------
APK파일이 만들어지는 구조도
--------------------------------------------------------------------------------------------------------------
과정0. apk 추출
- Google에서 다운로드
- 안드로이드 file explorer 에서 apk 추출
------------------------------
.dex파일의 디컴파일 과정 (Dalvik bytecode decompile)
apk파일의 압축을 풀면 나오는 .dex 파일은 안드로이드가상머신(dalvik)이 인식할 수 있도록 .class파일을 바이트 코드로 변환 된 파일이다.
.dex 파일을 jvm 바이트 코드로 디컴파일 하여 .class파일을 추출 할 수 있다면, 안드로이드 어플리케이션의 java 코드의 추출이 가능하다.
과정1. undx과정 dex—>. class ==>.dex 파일을 .jar파일의 형태로 디컴파일.
과정2. java Decompiler .class –> .java ==>디컴파일된 .jar파일을 .java 형태로 다시 디컴파일.
(java bytecode decompile과정과 같다.)
과정1. undx는 apk파일안의 dex파일을 .class로 만드는 것
필요한 파일
- undx.jar ( http://www.illegalaccess.org/undx.html )
- dxdump.zip ( http://dex-decomplier.googlecode.com/files/dexdump.zip )
실행
먼저 로우 코드를 볼려면 undx.jar 파일과 dexdump 파일(안드로이드 sdk 폴더에 tools 폴더안에 있음)을
apk 파일내의 dex파일과 같은 폴더에 두고 다음 명령어를 수행한다.
(D:\HelloAndroid\ undx.jar
dexdump.exe
classes.dex )
cmd 창에서
java -DASDKLoc={Location of dexdump} -jar undx.jar {dexfile} |
D:\HelloAndroid>java -DASDKLoc=. -jar undx.jar classes.dex
또는 java -DASDKLoc=”D:\HelloAndroid” -jar undx.jar classes.dex
결과
gen 폴더가 만들어지면서 classes.dex.jar과 classes.dex.dump 파일이 만들어짐.
(classes.dex 파일이 .jar 파일로 디컴파일 된 파일을 확인 할 수 있다.)
과정2. Java Decompiler : class 파일을 .java파일로 디컴파일
필요한 파일
- jd-gui ( http://java.decompiler.free.fr/?q=jdgui#downloads )
디컴파일을 한다고 하여 컴파일 되기 이전의 형태와 완전히 동일하지는 않다.
그러나 디컴파일을 통해 컴파일 되기 이전의 클래스 파일의 정보는 확인 가능하다.
------------------------------------------------------
과정3. apk 내에 있는 압축된 xml 을 읽을 수 있게 다시 원복
<필요 프로그램>
- AXMLPrinter2.jar (XML로된 Resource파일을 볼 수 있도록 변환해주는 툴)
java -jar AXMLPrinter2.jar 대상.xml > 대상.txt |
D:\Sixx_Desktop\HelloAndroid>
java -jar AXMLPrinter2.jar "D:\Sixx_Desktop\HelloAndroid\res\layout\main.xml" > main.txt
java -jar AXMLPrinter2.jar AndroidManifest.xml> AndroidManifest.txt
<?xml version="1.0" encoding="utf-8"?> </RelativeLayout> | <?xml version="1.0" encoding="utf-8"?> |
<?xml version="1.0" encoding="utf-8"?> </application> | <?xml version="1.0" encoding="utf-8"?> |
<참조>
http://allsoft.egloos.com/4835110
http://kozazz.tistory.com/tag/decompil
http://namukee.tistory.com/45
Android .dex decompile
http://aquarium.72pines.com/2010/02/24/using-undx-to-decompile-android-dex-bytecode/
<참고>
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/
'Tech > Adroid_iphone' 카테고리의 다른 글
설치 (0) | 2012.08.09 |
---|---|
[펌] 갤럭시S 광속 (0) | 2012.01.30 |
MAC BOOK (0) | 2011.09.26 |
일정 (0) | 2010.10.03 |
일정 (0) | 2010.10.03 |
Titanium Backup -Rooting (0) | 2010.10.03 |