반응형
아이폰뿐만 아니라 전체적인 스마트폰에 대한 언급을 이 카테고리에서 해야 될 듯 싶습니다..

오늘은 A3 팀블로그에 Android 실행파일 분석 (Decompile)라는 글이 올라왔더군요.
(정말.. 감탄하고 있습니다.. 회사내에서 이러한 연구를 하시는 분이 몇분이나 되시는지는 모르겠지만.. 이정도로 다양한 연구를 진행할 수 있다니.. 부럽고 부끄럽네요.. ㅠㅠ)

안드로이드에 대해서는 세미나에서 들은 것 뿐.. 실제로 제가 안드로이드 환경에서 작업을 해본적이 없어서 뭐라 할 말이 없습니다..

제가 안드로이드폰을 사지 않는 이상.. 하지 않을 것 같고요.. 물론.. 엄청난 사건이 발생한다면.. 에뮬레이터를 설치하고 있겠죠 =_=;;

블로그상에 보면 보안상 디테일한 정보는 생략한다고 나와있지만..
구글링을 좀만 하면 그와 관련된 다양한 정보를 얻을 수 있습니다.. 그래서.. 정보를 바로 Search 하기 시작했죠.. +_ +;;
(표정들이 왜 그래요?? 마치 검색 안해본 사람 처럼..
 보안상 안알려준다고 모르고 있으면 정보보안쪽 공부하는 사람 아니자나요~
 그건 그냥 일반인이지)
그리고 찾아냈습니다.

내용은 아래와 같습니다. 일본어 입니다..
저도 일본어는 못하기 때문에 일본어를 제외한 부분만 일단 봤는데.. 맞는 내용인 듯 합니다..
그래서 자료 보관차.. 이렇게 글을 남깁니다.

http://android.jpn.org/2009/11/decompile-classesdex-in-apk.html



============================================================================================================
============================================================================================================
============================================================================================================
 Androidアプリケーション(apk)の中には Dalvik VMの実行形式である
classes.dexファイルが含まれています。今回、このdexファイルのヘッダ情報を取 得したり、
コードセクションを逆コンパイルできるdexdumpを使って、dexファイルを逆アセンブルしてみます。

1.apkファイル の展開
  $ mkdir HelloAndroid
  $ cd HelloAndroid
  $ unzip ../HelloAndroid.apk

2.dexdumpの実行
  $ ~/android-sdk-linux_x86-1.5_r3/platforms/android-1.5/tools/dexdump \
   -d ./classes.dex
Processing './classes.dex'...
Opened './classes.dex', DEX version '035'
Class #0            -
  Class descriptor  : 'Lcom/example/helloandroid/HelloAndroid;'
  Access flags      : 0x0001 (PUBLIC)
  Superclass        : 'Landroid/app/Activity;'
  Interfaces        -
  Static fields     -
  Instance fields   -
  Direct methods    -
    #0              : (in Lcom/example/helloandroid/HelloAndroid;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
0002c4:                                        |[0002c4] com.example.helloandroid.HelloAndroid.<init>:()V
0002d4: 7010 0000 0000                         |0000: invoke-direct {v0}, Landroid/app/Activity;.<init>:()V // method@0000
0002da: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=6
      locals        : 
        0x0000 - 0x0004 reg=0 this Lcom/example/helloandroid/HelloAndroid; 

  Virtual methods   -
    #0              : (in Lcom/example/helloandroid/HelloAndroid;)
      name          : 'onCreate'
      type          : '(Landroid/os/Bundle;)V'
      access        : 0x0001 (PUBLIC)
      code          -
      registers     : 3
      ins           : 2
      outs          : 2
      insns size    : 9 16-bit code units
0002dc:                                        |[0002dc] com.example.helloandroid.HelloAndroid.onCreate:(Landroid/os/Bundle;)V
0002ec: 6f20 0100 2100                         |0000: invoke-super {v1, v2}, Landroid/app/Activity;.onCreate:(Landroid/os/Bundle;)V // method@0001
0002f2: 1500 037f                              |0003: const/high16 v0, #int 2130903040 // #7f03
0002f6: 6e20 0400 0100                         |0005: invoke-virtual {v1, v0}, Lcom/example/helloandroid/HelloAndroid;.setContentView:(I)V // method@0004
0002fc: 0e00                                   |0008: return-void
      catches       : (none)
      positions     : 
        0x0000 line=10
        0x0003 line=11
        0x0008 line=12
      locals        : 
        0x0000 - 0x0009 reg=1 this Lcom/example/helloandroid/HelloAndroid; 
        0x0000 - 0x0009 reg=2 savedInstanceState Landroid/os/Bundle; 

  source_file_idx   : 1 (HelloAndroid.java)

Class #1            -
  Class descriptor  : 'Lcom/example/helloandroid/R$attr;'
  Access flags      : 0x0011 (PUBLIC FINAL)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
  Instance fields   -
  Direct methods    -
    #0              : (in Lcom/example/helloandroid/R$attr;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
000300:                                        |[000300] com.example.helloandroid.R$attr.<init>:()V
000310: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
000316: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=11
      locals        : 
        0x0000 - 0x0004 reg=0 this Lcom/example/helloandroid/R$attr; 

  Virtual methods   -
  source_file_idx   : 15 (R.java)

Class #2            -
  Class descriptor  : 'Lcom/example/helloandroid/R$drawable;'
  Access flags      : 0x0011 (PUBLIC FINAL)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
    #0              : (in Lcom/example/helloandroid/R$drawable;)
      name          : 'icon'
      type          : 'I'
      access        : 0x0019 (PUBLIC STATIC FINAL)
  Instance fields   -
  Direct methods    -
    #0              : (in Lcom/example/helloandroid/R$drawable;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
000318:                                        |[000318] com.example.helloandroid.R$drawable.<init>:()V
000328: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
00032e: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=13
      locals        : 
        0x0000 - 0x0004 reg=0 this Lcom/example/helloandroid/R$drawable; 

  Virtual methods   -
  source_file_idx   : 15 (R.java)

Class #3            -
  Class descriptor  : 'Lcom/example/helloandroid/R$layout;'
  Access flags      : 0x0011 (PUBLIC FINAL)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
    #0              : (in Lcom/example/helloandroid/R$layout;)
      name          : 'main'
      type          : 'I'
      access        : 0x0019 (PUBLIC STATIC FINAL)
  Instance fields   -
  Direct methods    -
    #0              : (in Lcom/example/helloandroid/R$layout;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
000330:                                        |[000330] com.example.helloandroid.R$layout.<init>:()V
000340: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
000346: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=16
      locals        : 
        0x0000 - 0x0004 reg=0 this Lcom/example/helloandroid/R$layout; 

  Virtual methods   -
  source_file_idx   : 15 (R.java)

Class #4            -
  Class descriptor  : 'Lcom/example/helloandroid/R$string;'
  Access flags      : 0x0011 (PUBLIC FINAL)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
    #0              : (in Lcom/example/helloandroid/R$string;)
      name          : 'app_name'
      type          : 'I'
      access        : 0x0019 (PUBLIC STATIC FINAL)
    #1              : (in Lcom/example/helloandroid/R$string;)
      name          : 'hello'
      type          : 'I'
      access        : 0x0019 (PUBLIC STATIC FINAL)
  Instance fields   -
  Direct methods    -
    #0              : (in Lcom/example/helloandroid/R$string;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
000348:                                        |[000348] com.example.helloandroid.R$string.<init>:()V
000358: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
00035e: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=19
      locals        : 
        0x0000 - 0x0004 reg=0 this Lcom/example/helloandroid/R$string; 

  Virtual methods   -
  source_file_idx   : 15 (R.java)

Class #5            -
  Class descriptor  : 'Lcom/example/helloandroid/R;'
  Access flags      : 0x0011 (PUBLIC FINAL)
  Superclass        : 'Ljava/lang/Object;'
  Interfaces        -
  Static fields     -
  Instance fields   -
  Direct methods    -
    #0              : (in Lcom/example/helloandroid/R;)
      name          : '<init>'
      type          : '()V'
      access        : 0x10001 (PUBLIC CONSTRUCTOR)
      code          -
      registers     : 1
      ins           : 1
      outs          : 1
      insns size    : 4 16-bit code units
000360:                                        |[000360] com.example.helloandroid.R.<init>:()V
000370: 7010 0a00 0000                         |0000: invoke-direct {v0}, Ljava/lang/Object;.<init>:()V // method@000a
000376: 0e00                                   |0003: return-void
      catches       : (none)
      positions     : 
        0x0000 line=10
      locals        : 
        0x0000 - 0x0004 reg=0 this Lcom/example/helloandroid/R; 

  Virtual methods   -
  source_file_idx   : 15 (R.java)

結果、HelloAndroid.apkで使用さ れているクラスは#0~#5の6つ。
Class #0のVirtual methodsは1つで、名前はonCreate。
メ ソッド内で、super.onCreate()とsetContentView()をコールしていることがわかります。
これだけ逆 アセンブルできれば十分ですね。


반응형

'작업공간 > Security' 카테고리의 다른 글

How to Get Started with iPhone Dev  (0) 2010.03.28
[iPhone] libgcc  (4) 2010.03.25
iPhone perl Framework  (0) 2010.03.23
WaledPak-D  (0) 2009.08.03
Panda Challenge 1 풀이  (2) 2009.07.27

+ Recent posts