天天看點

Android 反編譯Android 反編譯

文章目錄

  • Android 反編譯
    • Apk檔案結構圖
    • 反編譯相關工具
    • 反編譯步驟
      • 1.ApkTool拆包,得到AndroidManifest和res等資源
      • 2.dex2jar反編譯dex檔案,得到java源代碼
      • 3.jd-gui檢視Java源代碼

Android 反編譯

Apk檔案結構圖

1. 原理

反編譯的是Apk檔案,是以需要知道Android打包的過程原理,以及Apk檔案目錄,以及檔案是怎麼生成的。

推薦兩篇文章

  • 淺析Android打包流程
  • Android建構過程分析

首先看一下基本的Apk結構目錄

Android 反編譯Android 反編譯
  1. asses檔案:原始資資源檔案,存放原始的網頁,音頻等。
  2. lib:相關第三方的so檔案。
  3. META-INF:簽名文。
  4. r檔案:一般解壓後應該是res檔案,包含布局,圖檔等資訊。
  5. AndroidManifest.xml:全局配置檔案。
  6. classes.dex類似檔案:源碼編譯成class檔案,在轉成jar檔案,在yasuo壓縮成dex檔案。dex檔案可以直接運作在Android虛拟機上。
  7. resources.arsc:資源檔案和資源id的映射關系。

經過解壓後的檔案是經過打包處理的,無法閱讀。

是以需要相關工具進行反編譯,得到AndroidManifest.xml檔案,res檔案,java源碼。

反編譯相關工具

  • apktool:https://ibotpeaches.github.io/Apktool/
  • dex2jar:https://github.com/pxb1988/dex2jar
  • jd-jui:http://jd.benow.ca/

反編譯步驟

1.ApkTool拆包,得到AndroidManifest和res等資源

Android 反編譯Android 反編譯

進入目前目錄,運作指令

apktool d guanwangbtn.apk 
           

回車,會在目前面目錄生成一個guanwangbtn的檔案夾。

Android 反編譯Android 反編譯

這是我們可以得到可閱讀的AndroidManifest.xml檔案,assets檔案夾,res檔案夾,smali類似檔案夾。

  1. smali檔案是反編譯出來的代碼,目錄結構和源代碼的package一模一樣,隻是語言使用的是smali語言。
  2. original檔案夾是原始的AndroidManifest.xml檔案。

2.dex2jar反編譯dex檔案,得到java源代碼

如果還想得到源代碼,工具dex2jar。

  • 功能:将dex格式檔案轉成jar檔案。
  1. 将壓縮得到的dex檔案放進dex2jar-2.0檔案夾中。
  2. 目前目錄,運作指令

    d2j-dex2jar.bat classes.dex

  3. 目錄會多出一個jar檔案
    Android 反編譯Android 反編譯

3.jd-gui檢視Java源代碼

下載下傳工具,直接點選打開,classes-dex2jar.jar拖入界面打開。

Android 反編譯Android 反編譯
Android 反編譯Android 反編譯