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


版權聲明:本文為HaiyuKing原創文章,轉載請注明出處!

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

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

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

概述

  我們都知道,Android程序打完包之后得到的是一個APK文件,這個文件是可以直接安裝到任何Android手機上的,我們反編譯其實也就是對這個APK文件進行反編譯。Android的反編譯主要又分為兩個部分,一個是對代碼的反編譯,一個是對資源的反編譯,我們馬上來逐個學習一下。 在開始學習之前,首先我們需要准備一個APK文件,為了尊重所有開發者,我就不拿任何一個市面上的軟件來演示了,而是自己寫一個Demo用來測試。

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

  在參考郭神的文章以及后續的使用過程中,由於使用的工具版本不同,所以命令有所差別。

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

效果圖:

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

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

反編譯代碼

下載軟件

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

下載地址:見文章末尾。

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反編譯就這么簡單 詳解(附圖)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM