版權聲明:本文為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