Tech/Adroid_iphone

Android apk 소스 보기 decompiler

onesixx 2011. 6. 6. 00:58
반응형

소스복원은 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
            android:id="@+id/relativeLayout1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="10px"
            xmlns:android="
http://schemas.android.com/apk/res/android" android:descendantFocusability="blocksDescendants">
        <TextView
                android:layout_height="wrap_content"
                android:layout_width="fill_parent"
                android:layout_alignParentLeft="true"
                android:text="Type here:"
                android:id="@+id/textView1" >
                </TextView>
        <EditText
                android:layout_height="wrap_content"
                android:id="@+id/editText1"
                android:layout_width="fill_parent"
                android:layout_below="@id/textView1"
                android:text="EditText"
                android:layout_alignParentLeft="true"></EditText>
        <Button
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_below="@id/editText1"
                android:id="@+id/button1"
                android:layout_alignParentLeft="true"
                android:text="Button"> </Button>

    </RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="
http://schemas.android.com/apk/res/android"
    android:id="@7F050000"
    android:padding="10.0px"
    android:descendantFocusability="2"
    android:layout_width="-1"
    android:layout_height="-2">
    <TextView
        android:id="@7F050001"
        android:layout_width="-1"
        android:layout_height="-2"
        android:text="Type here:"
        android:layout_alignParentLeft="true"
        >
    </TextView>
    <EditText
        android:id="@7F050002"
        android:layout_width="-1"
        android:layout_height="-2"
        android:text="EditText"
        android:layout_below="@7F050001"
        android:layout_alignParentLeft="true"
        >
    </EditText>
    <Button
        android:id="@7F050003"
        android:layout_width="-2"
        android:layout_height="-2"
        android:text="Button"
        android:layout_below="@7F050002"
        android:layout_alignParentLeft="true"
        >
    </Button>
</RelativeLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android"
      package="com.company.helloandroid"
      android:versionCode="1"
      android:versionName="1.0">

    <application 
       
android:icon="@drawable/icon" 
        android:label="@string/app_name">
        <activity android:name=".HelloAndroid"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="
http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="com.company.helloandroid">
    <application
        android:label="@7F040001"
        android:icon="@7F020000">
        <activity
            android:label="@7F040001"
            android:name=".HelloAndroid">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN">
                </action>
                <category
                    android:name="android.intent.category.LAUNCHER"
                    >
                </category>
            </intent-filter>
        </activity>
    </application>
</manifest>

 

<참조>
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