版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html
咱們都知道,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文件,將class.dex拖拽出來【或者先將apk文件重命名成zip文件,而後用解壓軟件打開。】
注意:可能會有多個dex文件,那麼就須要將全部的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目錄,你會發現多了一個文件,以下圖所示:
能夠看到,classes-dex2jar.jar這個文件就是咱們藉助工具以後成功轉換出來的jar文件了。可是對於咱們而言,jar文件也不是可讀的,所以這裏還須要再借助一下jd-gui這個工具來將jar文件轉換成java代碼。
雙擊jd-gui.exe,打開jd-gui
將classes-dex2jar.jar拖拽到jd-gui軟件中打開預覽
當反編譯的項目比較大的時候,那麼在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 [輸出文件夾]
報錯不用管,成功以後發如今文件夾下多了個helloworld文件夾,點擊即可以查看該應用的全部資源文件了。
連接:https://pan.baidu.com/s/1LcPyuWJp1vzQJXaT3yFWkQ 密碼:owwa