Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> 反編譯android部署程序

反編譯android部署程序

編輯:高級開發

 因為學習android編程的需要,我們有的時候要對網絡上發布的項目進行學習,可是android程序一般是通過apk發布的,我們看不到源代碼,嘿嘿,辦法總會有的,而且還不止一個...

  方法一: apk—>dexàjaràJava (推薦)

  1.下載dex2jar,下載地址(見附件):

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

  2.下載class反編譯工具jad,

  下載地址(見附件):

  http://www.119.xdowns.com/uploadFile/2010-8/jd-gui-0.3.3.osx.i686.zip 3.使用winrar解壓縮.apk文件.我們可以看到classes.dex文件。這個就是android虛擬機Dalvik支持的字節碼文件。

  4.在cmd下進入dex2jar.bat所在路徑,輸入dex2jar.bat D:projectclasses.dex 回車。其中D:projectclasses.dex就是你的classes.dex所在的目錄。

  5.然後在classes.dex同級目錄下會生成一個classes.dex.dex2jar.jar文件

  6.用jad工具將打開這個jar文件,你就可以看到這個jar文件裡面的代碼了。而且可以直接保存為Java文件。

  方法二:(推薦)

  Apk->加密的XML->解密的XML

  apk—>dexàsmali

  此外,上面操作只能得到Java代碼,但是我們可能還需要一些XML文件,APK文件解壓縮後,發現其中的XML文件都是經過處理過的,看不到源碼。

  下面利用Google提供的apktool來獲取XML文件

  1. 下載apktool,可以去Google的官方下載(見附件),

  地址:http://code.google.com/p/android-apktool/

  apktool-1.0.0.tar.bz2和apktool-install-Windows-2.1_r01-1.zip兩個包都要下。

  2.解壓這兩個下載到的文件到某個文件夾(例如E盤根目錄)。 確保解壓縮後得到的aapt.exe,apktool.bat,apktool.jar在同一個文件夾下。

  3.將要破解的.apk文件也放入到這個文件夾中來。

  4.運行CMD,用cd命令轉到這幾個文件所在文件夾,輸入apktool,假如列出一些幫助的話就成功了(解釋d為加壓 第一個路徑為你的apk所在的位置。第二個是要輸出的位置)

  apktool d XXX.apk ABC 反編譯XXX.apk到文件夾ABC (必須確保當前目錄下沒有ABC這個文件夾,否則會報錯)

  5. 解壓後的文件夾中可以得到apk中的XML配置文件。是不是很熟悉呢。呵呵。

  其實用這個方法會得到一個smali文件夾,進去看,用記事本打開其中的一個.smali文件,通過解讀裡面的信息,就可以一窺代碼的全貌,就是有點費力。下面我們通過一個實例來對比一下.smali和.Java源代碼的對照吧:


  點擊下載:jd-gui-0.3.3.Windows.zip
  點擊下載:dex2jar-0.0.7.8-SNAPSHOT.zip
  點擊下載:apktool1.3.2.tar.bz2
  點擊下載:apktool-install-Windows-2.2_r01-3.tar.bz2

  接上頁

  ApkInstaller.smali文件:

  .class public Lcom/tutor/apkinstaller/ApkInstaller;

  .super Landroid/app/Activity;

  .source "ApkInstaller.Java"

  # instance fIElds

  .fIEld private apkWeb:Landroid/webkit/WebVIEw;

  # direct methods

  .method public constructor < init>()V

  .registers 1

  .prologue

  .line 8

  invoke-direct {p0}, Landroid/app/Activity;->< init>()V

  return-void

  .end method

  # virtual methods

  .method public onCreate(Landroid/os/Bundle;)V

  .registers 5

  .parameter "savedInstanceState"

  .prologue

  .line 13

  invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

  .line 14

  const/high16 v2, 0x7f03

  invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentVIEw(I)V

  .line 15

  const/high16 v2, 0x7f05

  invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->findVIEwById(I)Landroid/view/VIEw;

  move-result-object v2

  check-cast v2, Landroid/webkit/WebVIEw;

  iput-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebVIEw;

  .line 16

  iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebVIEw;

  invoke-virtual {v2}, Landroid/webkit/WebVIEw;->getSettings()Landroid/webkit/WebSettings;

  move-result-object v1

  .line 17

  .local v1, webSettings:Landroid/webkit/WebSettings;

  const/4 v2, 0x1

  invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V

  .line 19

  const-string v0, "http://frankIEwei.Net/apk/demos/main/index.Html#home"

  .line 20

  .local v0, apkUrl:LJava/lang/String;


  點擊下載:jd-gui-0.3.3.Windows.zip
  點擊下載:dex2jar-0.0.7.8-SNAPSHOT.zip
  點擊下載:apktool1.3.2.tar.bz2
  點擊下載:apktool-install-Windows-2.2_r01-3.tar.bz2

  接上頁

  iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebVIEw;

  invoke-virtual {v2, v0}, Landroid/webkit/WebVIEw;->loadUrl(LJava/lang/String;)V

  .line 21

  return-void

  .end method

  ApkInstaller.Java的源代碼如下:

  package com.tutor.apkinstaller;

  import android.app.Activity;

  import android.os.Bundle;

  import android.webkit.WebSettings;

  import android.webkit.WebVIEw;

  public class ApkInstaller extends Activity {

  private WebVIEw apkWeb;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentVIEw(R.layout.main);

  apkWeb = (WebView)findVIEwById(R.id.apk_web);

  WebSettings webSettings = apkWeb.getSettings();

  webSettings.setJavaScriptEnabled(true);

  String apkUrl = "http://frankIEwei.Net/apk/demos/main/index.Html#home";

  apkWeb.loadUrl(apkUrl);

  }

  }

  呵呵,通過兩者的對比是不是有所感悟呢。的確有點麻煩。所以推薦大家采用方法一來得到Java代碼,用方法二來獲取XML文件。這樣就可以獲取整個工程的代碼了。

  但有的時候方法一可能會出錯,筆者就曾經遇到過這種情況,這個時候只能用方法二了。

  此外介紹另外一種方式,這個方式得到的代碼還不如方法二清晰,但是還是介紹一下吧。

  方法三:apk—>dex->ddx

  ddx文件雖然不能看到源代碼,但是可以看出類的結構。有的時候用第一種方法可能不一定能得到源代碼,這個時候就用第二種方法來補救吧...

  Dedexer 項目主頁(見附件): http://dedexer.sourceforge.Net/

  下載地址也在這個網站上。下載後的文件為ddx1.11.jar(目前最新版本為1.11)

  1. 運行CMD 進入ddx1.11.jar的目錄,輸入如下命令: D:Windowssystem32>Java -jar ddx1.11.jar

  2. 出現如下提示

  Usage: Java -jar ddx.jar -o -D -r -d < destination> < source>


  點擊下載:jd-gui-0.3.3.Windows.zip
  點擊下載:dex2jar-0.0.7.8-SNAPSHOT.zip
  點擊下載:apktool1.3.2.tar.bz2
  點擊下載:apktool-install-Windows-2.2_r01-3.tar.bz2

  接上頁

  < destination> :指定生成的文件放置的目錄

  < source> :dex源文件.

  -D - 指定生成錯誤信息.

  -o - 指定生成日志文件(dex.log).

  3.仔細閱讀上面的信息,根據:

  Java -jar ddx1.11.jar -o -D -r -d < destination> < source>

  按此提示,輸入: Java -jar ddx1.11.jar -o -D -r -d c:dexgen c:dexclasses.dex 4.運行成功,在gen 目錄生成了ddx 文件.用文本編輯器打開,可看到類大致結構.

  附件一:是目前最新版的Java反編譯工具,超好用;

  < !--EndFragment-->


  點擊下載:jd-gui-0.3.3.Windows.zip
  點擊下載:dex2jar-0.0.7.8-SNAPSHOT.zip
  點擊下載:apktool1.3.2.tar.bz2
  點擊下載:apktool-install-Windows-2.2_r01-3.tar.bz2

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved