詳解android應用程序的反編譯

 

畢業設計不小心選了智能手機開發方向,而平臺選擇了android,所以最近自學了不少android程序開發的知識。但是作爲一個懶散不堪,容易半途而廢的人,android所自帶的體系還是有點龐大,想要以此開發一個屬於自己的獨一無二的應用,難度對我這個小菜鳥來說實在大。所以難免生起“他山之石,可以攻玉”的想法。

畢設帶隊的老師說:代碼都自己寫的程序員不是好程序員。利用別人的代碼,從中再修改一番變成自己的,這纔是好的程序員。我不知道這話有沒有道理,反正是說到了我的心坎了。懶人自有懶人的活法,天才是少數的,而懶惰的人是多數的。自然,我是多數人。

但是要修改別人的代碼必須曉得他的代碼,所以我們需要對android應用程序進行反編譯。所幸andorid是個開放的平臺,反編譯比通常程序簡單的多,下面就說說這個簡單的過程。

基礎知識

android上安裝的應用程序後綴都是apk(Android application package),每個要安裝到android平臺的應用都要被編譯打包爲一個單獨的文件,後綴名爲.apk。而實際上這個apk格式的文件是一種變相的zip壓縮包,你可以使用winrar打開看到裏面的文件的結構。通常你可以看到這些內容:

|– AndroidManifest.xml
|– META-INF
|   |– CERT.RSA
|   |– CERT.SF
|   |– MANIFEST.MF
|– classes.dex
|– res
|   |– drawable
|   |   `– icon.png
|   |– layout
|       `– main.xml
|– resources.arsc

各個文件內容涵義不贅述了,可以看這篇文章http://www.ophonesdn.com/article/show/38

我們通常需要反編譯出的有兩部分:classes.dex和main.xml。一個是java經過google自制虛擬機dalvik編譯出的字節碼,一個是佈局文件。大點的程序佈局文件不止一個,我們這裏只說只有一個的,其他類似。

需要的工具

1、把dex文件反編譯爲jar文件的工具。(dex2jar)
2、把jar反編譯爲java的工具。(JD-GUI)
3、AXMLPrinter2
三者下載鏈接分別是:
http://code.google.com/p/dex2jar/
http://java.decompiler.free.fr/?q=jdgui
http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.zip&can=2&q=

XML文件的反編譯

apk文件中的xml文件都是經過壓縮的,所以如果直接打開會看到一些亂碼,所以需要工具AXMLPrinter2。

安裝完java環境,然後cmd進入你把apk文件解壓到的文件目錄內,使用命令(注意,AXMLPrinter2.jar文件也要):

java -jar AXMLPrinter2.jar main.xml

成功後會在cmd裏出現xml反編譯出的文件

classes.dex文件反編譯

Android模擬器中提供了一個dex文件的反編譯工具,dexdump。用法爲首先啓動Android模擬器, 把要查看的dex文件用adb push上傳的模擬器中,然後通過adb shell登錄,找到要查看的dex文件,執行dexdump xxx.dex。但是這樣得到的結果,其可讀性是極差的。

所以我們使用了兩個工具dex2jar和JD-GUI。

反編譯的步驟:

1、從APK中提取classes.dex文件,對APK文件解壓即可得到。 將其放到dex2jar的目錄下,打開cmd,運行dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar。

2、運行JD-GUI工具,打開上面的jar文件,即可看到源代碼。

在JD-GUI上可以看到一堆a b c d ……的樹形結構,這些都不是,真正要看的是activity。如圖:

5356270065_997c64d080.jpg (500×334)

其實還是很羨慕那些自己寫一堆代碼的人,昨天史玉柱在自己的微博上說:

20年前創業初期,我是本公司的唯一研發人員(公司總人數才4人),編寫文字處理軟件,我一人寫了50萬行代碼,關鍵模塊都是使用極枯燥的彙編語言。公司很快就賺了數千萬元,但那時我似乎並沒想買豪宅買寶馬,和現在一些85後研發人員有區別。究竟是時代不同了,還是因我是老闆呢?思考中。。。

可能這輩子我也寫不了50萬行的代碼,甚至十分之一都不太可能了。業內有句話說:珍愛生命,遠離IT。

出自:http://www.lvleaf.com/windson/?p=977

 

 

 

 

 

 

 

Android APK反編譯得到Java源代碼和資源文件

發現很多人都在關心apk的反編譯,上傳一個可視化的工具吧,原理和下面說的差不多,就是封裝了一下。點我下載Android反編譯工具

另外,作爲應用開發者,肯定不希望自己的代碼被反編譯的,另外寫了篇文章,講述如何通過混淆代碼放在反編譯:《如何防止Android應用被反編譯》

這段時間在學Android應用開發,在想既然是用Java開發的應該很好反編譯從而得到源代碼吧,google了一下,確實很簡單,以下是我的實踐過程。在此鄭重聲明,貼出來的目的不是爲了去破解人家的軟件,完全是一種學習的態度,不過好像通過這種方式也可以去漢化一些外國軟件。

一.反編譯Apk得到Java源代碼

首先要下載兩個工具:dex2jar和JD-GUI,前者是將apk中的classes.dex轉化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。以下是下載地址:dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

具體步驟:
  1. 首先將apk文件,將後綴改爲zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;
  2. 解壓下載的dex2jar,將classes.dex複製到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄,運行
    dex2jar.bat classes.dex

     

    生成classes.dex.dex2jar.jar

  3. 運行JD-GUI,打開上面生成的jar包,即可看到源代碼了。

二.反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件

如果是隻是漢化軟件,這將特別有用。首先還是下載工具,這次用到的是apktool,下載地址:

http://code.google.com/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip兩個包都要下。

具體步驟:
  1. 將下載的兩個包解壓到同一個文件夾下,應該會有三個文件:aapt.exe,apktool.bat,apktool.jar;
  2. 在命令行下定位到apktool.bat文件夾,輸入以下命令:
    apktool d C:\***.apk  C:\***文件夾

     

    命令行解釋:apktool d [要反編譯的apk文件 ] [輸出文件夾],特別注意:你要反編譯的文件一定要放在C盤的根目錄裏;

  3. 將反編譯完的文件重新打包成apk,很簡單,輸入apktool b c:\***文件夾(你編譯出來文件夾)即可。
  1. 出自:
http://www.maxhis.info/androiding/android-apk-decompile/

Android反編譯方法

2011-05-31 14:52 佚名 論壇 我要評論(0) 字號:T |T
一鍵收藏,隨時查看,分享好友!

反編譯主要的目的在於學習,利用反編譯進行相關的漢化或修改,還是儘量不要吧,畢竟人家寫個程序不容易啊!參考內容如下。

AD:


對於軟件開發人員來說,保護代碼安全也是比較重要的因素之一,不過目前來說Google Android平臺選擇了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其實就是一個MIME爲ZIP的壓縮包,我們修改ZIP後綴名方式可以看到內部的文件結構,類似Sun JavaMe的Jar壓縮格式一樣,不過比較去別的是Android上的二進制代碼被編譯成爲Dex的字節碼,所有的Java文件最終會編譯進該文件中去,作爲託管代碼既然虛擬機可以識別,那麼我們就可以很輕鬆的反編譯。所有的類調用、涉及到的方法都在裏面體現到,至於邏輯的執行可以通過實時調試的方法來查看,當然這需要藉助一些我們自己編寫的跟蹤程序。Google最然在Android Market上設置了權限保護app-private文件夾的安全,但是最終我們使用修改定值的系統仍然可以獲取到需要的文件。

具體方法如下:

一:所需工具(點擊各自連接進入下載頁面):

AXMLPrinter2.jar

dex2jar:

查看Jar包的GUI工具

二,開始行動

1.用AXMLPrinter2.jar查看apk中的佈局xml文件:

將apk文件(爲了方便起見放到tools目錄裏)用WinRAR等工具打開,將res/layout/main.xml解壓出來(也還是放在tools目錄裏哦)

打開main.xml文件,內容如下(一堆天文):

這時候AXMLPrinter2.jar派上用場了,打開cmd終端,一直進入到tools目錄下,輸入如下命令:

java -jar AXMLPrinter2.jar main.xml > main.txt. (如下圖所示)

2:通過dex2jar工具進行反編譯。

把apk中的class.dex拷貝到dex2jar.bat所在目錄。運行dex2jar.bat class.dex,將會在其文件夾下生成classes.dex.dex2jar.jar。 

3、可以將jar文件重新命名後拷貝到GUI文件夾下,運行JD-GUI工具(它是綠色無須安裝的),打開上面的jar文件,即可看到源代碼。

  1. <?xml version="1.0" encoding="utf-8"?>     
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
  3.      android:orientation="vertical"     
  4.      android:layout_width="fill_parent"     
  5.      android:layout_height="fill_parent"     
  6.      >     
  7. <WebView     
  8.      android:id="@+id/apk_web"     
  9.      android:layout_height="wrap_content"     
  10.      android:layout_width="fill_parent"           
  11. />     
  12. </LinearLayout>   
  13. <?xml version="1.0" encoding="utf-8"?>     
  14. <LinearLayout       xmlns:android="http://schemas.android.com/apk/res/android"     
  15.      android:orientation="1"     
  16.      android:layout_width="-1"     
  17.      android:layout_height="-1"     
  18.      >     
  19.      <WebView     
  20.          android:id="@7F050000"     
  21.          android:layout_width="-1"     
  22.          android:layout_height="-2"     
  23.          >     
  24.      </WebView>     
  25. </LinearLayout>   

 

出自 :http://mobile.51cto.com/android-265964.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章