TShopping

 找回密碼
 註冊
搜索
查看: 1357|回復: 0

[教學] 如何反編譯apk檔得到源碼和XML檔

  [複製鏈接]
發表於 2014-11-4 23:39:11 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
相信很多開發者都知道反編譯APK,正常情況下,如果我們想要看看xml,看看java原始程式碼,是看不了的。用壓縮工具解壓apk得到的檔也都是二進位檔案,打開後全是亂碼。
   開發者能夠用的也僅僅是圖片資源,這往往也滿足不了開發者的需求。
   下面我就給大家詳細講解一下Android-apk的反編譯步驟:
   注意:反編譯的前提是:開發者沒有使用proguard(java代碼混淆的工具)。
   1.下載反編譯工具
   需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
   dex2jar:將apk中的classes.dex轉化成Jar文件。
   JD-GUI:反編譯工具,可以直接查看Jar包的原始程式碼。
   apktool:反編譯工具,通過反編譯APK中XML檔,直接可以查看。
   apktool-install-windows-r05-ibot:輔助windows批次處理工具。
   下載地址:
   JD-GUIhttp://jd.benow.ca/
   工具截圖:
1.png
    2.解壓縮APK包
   apk檔也是一種常見的zip,常用的壓縮軟體就可輕鬆地解壓apk檔。用壓縮軟體將apk檔中的檔解壓到一個資料夾中,得到APK中的資源包括 XML檔和classes.dex文件,classes.dex就是java檔編譯再通過dx工具打包而成的。
   解壓截圖:
2.png
   3.反編譯dex檔
   解壓apk檔後,你會發現res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex檔,無法用普通的反編譯class檔的方法來處理,dex2jar可以將dex檔轉換成普通的jar包。
   解壓下載的dex2jar,把解壓後的資料夾放到系統磁片跟目錄中並把這個目錄加到系統path變數中,就可以直接用:dex2jar.bat或dex2jar.sh轉換dex檔了。
   DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex檔所在的路徑)。
   將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。
   編譯截圖:
3.png
  生成jar文件的截圖如下:
4.png
   4.反編譯jar包
   得到jar包後,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形介面,可以反編譯單個class檔,也可以反編譯jar包,比較方便。
   打開壓縮檔JD-GUI,運行jd-gui.exe,打開上面生成的jar包,即可看到原始程式碼了。
   截圖如下:
5.png
   5.反編譯xml檔
   打開解壓的res\layout目錄,有很多xml檔,如果你想看下作者是如何設計介面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。
   具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個資料夾下,這個資料夾有三 個檔:aapt.exe,apktool.bat,apktool.jar。把這個資料夾也放到系統磁片的根目錄中並把這個目錄加到path變數中。以 HelloWord.apk為例:
   在DOS命令列中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord資料夾,此資料夾中的xml檔就是編譯好的可以正常查看的檔。
   截圖如下:
6.png
  生成的檔:
11.png
這樣就得到了可以得到編譯的源碼和XML資源。
注意:文件的路径中最好不要出现中文!
apk 還原成java source code
學習最好的方式就是模仿和實踐, 在我們對Android App的開發還不是很熟練的話, 借鑒和學習別人的程式寫法, 可以幫助我們快速地學習, 有條理的進行系統理論、框架...等的學習也是必要的.

下面的範例是把 apk 還原成 java source code, 文中所提供的方式僅僅只是為了學習之便,並無其它意圖.

apk 檔解開後的source code 如下:
7.jpg
說明: 左邊是 jad 把 class 轉成 javasource code, 右邊是我們實際的 source code, 原本寫了5行, java 優化後變成3行指令就解決.


前置工作, 要先下載3個檔案:



以下是我的操作步驟:
=============================
Step 1:
解開 apk. 我是用 7z apk 直接當作 zip 檔解開即可.


Step 2:
透過  AXMLPrinter2.jar XML 檔案還原.
8.jpg
說明: AndroidManifest.xml 可以還原, 沒有錯誤訊息, 但我試了 layout 裡的 xml, 卻失敗, 只還原了第1.

Ex:
java -jar ..\AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
Step 3:
透過 dex2jar classes.dex 還原為 jar
9.jpg
說明: d:\deApk\KgConverter\classes.dex 被還原為 d:\deApk\KgConverter\classes_dex2jar.jar, 直接透過 7z 就可以再把這一個 jar 檔解開, 就可以看到 .class 的檔案.

Ex:
C:\deApk\dex2jar-0.0.9.13\dex2jar.bat classes.dex



Step 4:
透過jad compiler 過的 .class 還原為 javasource code.
10.jpg

Ex:
C:\deApk\dex2jar-0.0.9.13\dex2jar.batclasses.dex


 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-4 19:55 , Processed in 0.063426 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表