【反編譯系列】1、反編譯代碼(dex2jar + jd-gui)和反編譯資源(apktool)

版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html

【反編譯系列】2、反編譯代碼(jeb)

【反編譯系列】3、反編譯神器(jadx)

【反編譯系列】4、反編譯so文件(IDA_Pro)

概述

  咱們都知道,Android程序打完包以後獲得的是一個APK文件,這個文件是能夠直接安裝到任何Android手機上的,咱們反編譯其實也就是對這個APK文件進行反編譯。Android的反編譯主要又分爲兩個部分,一個是對代碼的反編譯,一個是對資源的反編譯,咱們立刻來逐個學習一下。 在開始學習以前,首先咱們須要準備一個APK文件,爲了尊重全部開發者,我就不拿任何一個市面上的軟件來演示了,而是本身寫一個Demo用來測試。 java

--摘自《Android安全攻防戰,反編譯與混淆技術徹底解析(上)》linux

  在參考郭神的文章以及後續的使用過程當中,因爲使用的工具版本不一樣,因此命令有所差異。安全

  本系列中使用的Demo項目是HelloWorld,源代碼截圖和運行效果以下:工具

效果圖:佈局

(注:反編譯不是讓各位開發者去對一個應用破解搞重裝什麼的,主要目的是爲了促進開發者學習,借鑑好的代碼,提高自我開發水平。)post

--摘自《Android APK反編譯就這麼簡單 詳解(附圖)》學習

反編譯代碼

下載軟件

dex2jar:將apk反編譯成Java源碼(將apk裏面的classes.dex轉化成jar文件)測試

下載地址:見文章末尾。ui

jd-gui:查看jar文件(將jar文件轉換成java代碼)

下載地址:http://jd.benow.ca/

安裝軟件

直接解壓便可,而後將上面的兩個軟件放到同一個目錄下。

解壓縮apk文件,獲取dex文件

經過好壓軟件打開apk文件,將class.dex拖拽出來【或者先將apk文件重命名成zip文件,而後用解壓軟件打開。】

注意:可能會有多個dex文件,那麼就須要將全部的dex文件轉換成jar文件。

將dex文件轉換成jar文件

將classes.dex複製到dex2jar-2.0目錄中

下面就是經過命令行的方式將dex文件轉換成jar文件。對於這個版本(dex2jar-2.0)來說,咱們要用到的是d2j-dex2jar.bat這個批處理文件,固然若是你是linux或mac系統的話就要用d2j-dex2jar.sh這個文件。對於舊版本(dex2jar-0.0.9.15),要用到的是dex2jar.bat這個批處理文件。

打開命令行提示符,並定位到dex2jar-2.0安裝目錄下

   

根據實際狀況,定位到dex2jar-2.0的安裝目錄(好比個人是E:\反編譯\dex2jar-2.0

輸入命令d2j-dex2jar.bat classes.dex

沒有報任何錯誤,這就說明咱們已經轉換成功了(其實即便報錯了,也能夠暫時不用管)。如今觀察dex2jar-2.0目錄,你會發現多了一個文件,以下圖所示:

查看jar文件(將jar文件轉換成java代碼)

能夠看到,classes-dex2jar.jar這個文件就是咱們藉助工具以後成功轉換出來的jar文件了。可是對於咱們而言,jar文件也不是可讀的,所以這裏還須要再借助一下jd-gui這個工具來將jar文件轉換成java代碼。

雙擊jd-gui.exe,打開jd-gui

將classes-dex2jar.jar拖拽到jd-gui軟件中打開預覽

導出代碼,藉助Android Studio打開,便於全局搜索【按需操做】

當反編譯的項目比較大的時候,那麼在jd-gui軟件中進行全局搜索某個變量名時,幾乎是不可能的。那麼一個比較好的解決方案是,經過jd-gui軟件將全部的反編譯項目的代碼導出,而後經過Android Studio打開(雖然會報錯,不過不用管),這樣就能夠藉助Android Studio的全局搜索功能進行快速搜索查找了。

File——Save All Sources

指定導出目錄以及文件名(我這邊默認處理)

根據反編譯項目的包名,經過Android Studio建立一個空白項目,而後將項目代碼複製到新建的空白項目中

包名的獲取:經過反編譯資源,獲得AndroidManifest.xml文件,查看package屬性值。

若是想要把資源也複製到新建空白項目中的話,那麼就按照反編譯資源的操做步驟進行操做。

反編譯資源

下載

apktool:這個工具用於最大幅度地還原APK文件中的9-patch圖片、佈局、字符串等等一系列的資源。

下載地址:見文章末尾。

安裝

直接解壓便可,而後跟上面的兩個軟件放到同一個目錄下。

反編譯資源

將須要反編譯的APK文件複製到該目錄下

打開命令行提示符,定位到apktool目錄

輸入命令:apktool.bat d -f helloworld.apk -o helloworld

命令中helloworld.apk指的是要反編譯的APK文件全名,helloworld爲反編譯後資源文件存放的目錄名稱,即爲:apktool.bat d –f [apk文件 ] –o [輸出文件夾]

  • -f 若是目標文件夾已存在,則強制刪除現有文件夾(默認若是目標文件夾已存在,則解碼失敗)。
  • -o 指定解碼目標文件夾的名稱(默認使用APK文件的名字來命名目標文件夾)。
  • -s 不反編譯dex文件,也就是說classes.dex文件會被保留(默認會將dex文件解碼成smali文件)。
  • -r 不反編譯資源文件,也就是說resources.arsc文件會被保留(默認會將resources.arsc解碼成具體的資源文件)。

報錯不用管,成功以後發如今文件夾下多了個helloworld文件夾,點擊即可以查看該應用的全部資源文件了。

  

文章所需軟件下載地址

 連接:https://pan.baidu.com/s/1LcPyuWJp1vzQJXaT3yFWkQ 密碼:owwa

參考資料

Android安全攻防戰,反編譯與混淆技術徹底解析(上)

Android APK反編譯就這麼簡單 詳解(附圖)

相關文章
相關標籤/搜索