被編譯器處理過的代碼和資源已經打包成了APK,有的甚至被轉化成了二進制文件。但是我們也有一些方法,把這些編譯過的內容給變回原來的樣子,這個過程叫做-反編譯。
反編譯分為兩個部分:一個是資源文件,一個是java文件。so文件是c++編譯的結果,可以認為是不可反編譯的(反編譯成匯編指令,估計大部分人也看不懂)。
APK tool是反編譯的有力工具,據說是谷歌提供的官方的反編譯工具,可以把APK目錄解包,資源文件全部還原成編譯前的樣子,而dex文件反編譯成smail格式的文件(而不是我們希望的java原文件)。smail格式文件是安卓系統的虛擬機執行時使用的語法,我們不會去講解這部分內容。
在APK tool的官網下載APKTool
的最新版本;
在官網下載與APKTool
配套的腳本文件-apktool.bat,其內容如下;
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
將下載的jar包重命名為APKTool.jar,與腳本文件一起放到你希望存放的目錄下,例如D:\Work\apktool
;
如果無法訪問官網下載,請上安豆網,下載最新的版本。
接下來開始使用APKTool,
cmd命令行窗口
,進入apktool目錄;輸入apktool d D:\Test.apk
,開始反編譯Test.apk
,apktool d
后面需要跟上要反編譯的APK文件路徑;
$ apktool d D:\Test.apk
I: Using Apktool 2.0.3 on Test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\Gym\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
編譯的結果就在cmd命令行窗口
啟動的位置下,反編譯的目錄結構如下,
現在打開res目錄下的資源都被還原了,打開后就能看到原始的設計;而java源碼被反編譯成了smali格式的文件。
要查看java源碼,有三個方式:
這里我們采用第三種方法。
首先准備反編譯用的工具。
下載完成后,將壓縮包解壓,放到你希望存放的目錄下,例如D:\Work\dex2jar
;
在官網下載JD-GUI,它可以查看jar文件的java源碼;
下載完成后,將壓縮包解壓,放到你希望存放的目錄下,例如D:\Work\jd-gui
;
至此,java源碼的反編譯工具就安裝並設置完成了。
如果無法訪問官網下載,請上安豆網下載,那里將這幾個工具整體打包,方便大家使用。
接下來開始使用反編譯工具,
APK文件后綴名改為zip,解壓,找到Android軟件安裝包中的class.dex
;
用dex2jar工具將classes.dex生成jar文件;啟動cmd命令行窗口
,輸入d2j-dex2jar D:\classes.dex
,開始反編譯classes.dex
,d2j-dex2jar
后面需要跟上要反編譯的dex文件路徑;
$ d2j-dex2jar D:\classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar
結果生成了classes-dex2jar.jar
文件;
進入JD-GUI目錄,運行JD-GUI工具,打開上面的生成的jar文件,即可看到java源代碼。
/*******************************************************************/
* 版權聲明
* 本教程只在CSDN和安豆網發布,其他網站出現本教程均屬侵權。
*另外,我們還推出了Arduino智能硬件相關的教程,您可以在我們的網店跟我學Arduino編程中購買相關硬件。同時也感謝大家對我們這些碼農的支持。
*最后再次感謝各位讀者對安豆
的支持,謝謝:)
/*******************************************************************/
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。