티스토리 뷰

안드로이드 어플리케이션은 자바 언어로 개발하는데, 자바 언어는 컴파일하면 바이트코드로 나오기 때문에 리버스 엔지니어링에 취약하다(고한다).


1. APKTOOL


APKTool을 사용하면 안드로이드에서 사용하는 APK파일을 쉽게 분해 및 재조립할 수 있다.


APKTool : http://code.google.com/p/android-apktool/downloads/list


apktool1.x.x.tar.bz2apktool-install-windows-rxx......tar.bz2 파일을 다운받아 적당한 폴더에 푼다.


Windows PATH환경변수에 압축을 푼 폴더를 추가해주고, APK파일이 있는 곳에서 다음 명령을 실행한다.


apktool d <APK파일이름>


명령을 실행하면 APK파일 이름으로 폴더가 생성된다.

- [asserts]

- [lib]

- [res]

- [smali]

- AndroidManifest.xml


이중 smali폴더는 컴파일된 classes.dex를 smali로 디컴파일해서 풀어놓은 것으로 smali문법에 따라 수정할 수 있다.

res폴더에는 어플에서 사용하는 리소스 파일들이 들어있으므로 필요하면 수정할 수 있다.



수정이 완료되면 다음 명령으로 컴파일한다.


apktool b <폴더 이름>  또는 해당 폴더에서 apktool b


build폴더와 dist폴더가 추가로 생성되는데, dist폴더에서 컴파일된 APK파일을 찾을 수 있다.


다만, 사인이 되어있지 않으므로 설치가 되지 않는다. 개인이 가지고 있는 키 또는 motizen-sign으로 사인한다.


자세한 apktool 옵션은 직접 확인.

apktool d [옵션] [APK파일]: apk파일을 디컴파일

-s, --no-src : 소스(classes.dex)를 디컴파일하지 않는다. 리소스만 수정하려는 경우. 디컴파일되면 smali폴더가 생성되지 않고 

classes.dex파일이 복사된다.

-r, --no-res : 리소스를 디컴파일하지 않는다. 소스만 수정하려는 경우. 디컴파일되면 resources.arsc파일과 res폴더가 디코드되

지 않고 그대로 복사된다.(xml파일은 바이너리상태)

-d, --debug : 디버그 모드로 디컴파일한다. class와 method는 자바의 형태로, method의 내용은 smali문법으로 되어있는데,

여기서 java코드를 직접 입력할 수 있다. 아래 동영상의 후반부에 나오는데 smali코드와 java코드가 혼합되어 있는데 괴랄하게도 문제없이 컴파일되고 정상적으로 동작한다-_-;;

디버그 정보 : http://code.google.com/p/android-apktool/wiki/SmaliDebugging

동영상 : http://www.youtube.com/watch?v=P_Zyf7jFbx4



2. motizen-sign

 사인되지 않은 APK파일을 사인해준다.

 첨부파일을 받아서 압축을 푼 후 사인할 apk파일을 motizen.apk로 이름을 바꾼 후, sign.bat를 실행하면 motizen_signed.apk파일이 생성된다.

 이때, 어플이 이미 설치되어 있는 경우 사인이 달라서 설치가 안되는 경우가 있는데, 이경우 먼저 어플을 제거한 후 설치한다.



3. classes.dex 디컴파일(dex2jar, jad)

 dex2jar와 jad를 사용하여 dex파일을 java소스로 디컴파일 할 수 있다.


먼저 apk파일에서 dex파일만 압축을 풀어둔다.


dex2jar : http://code.google.com/p/dex2jar/downloads/list


dex2jar classes.dex 

를 실행하면 jar파일이 생성된다. jar 파일의 압축을 풀고 jad로 디컴파일한다.


jad : http://www.varaneckas.com/sites/default/files/jad/jad158g.win.zip


jad -o -r -sjava -dsrc 폴더이름\**\*.class


src폴더에 java파일들이 생성된다. 당연한 이야기지만 원본 소스와는 차이가 있다.

'학교 > 졸업작품' 카테고리의 다른 글

C2DM Push 사용하기  (0) 2011.08.19
어플 변조를 방지하기 위해서는? (Apktool)  (0) 2011.08.19
Facebook로 내보내기  (0) 2011.08.19
Twitter와 연동해보자  (0) 2011.08.19
이전 주소  (0) 2011.08.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함