安卓應用反編譯(二)-APK包反編譯


第2節 APK包反編譯

被編譯器處理過的代碼和資源已經打包成了APK,有的甚至被轉化成了二進制文件。但是我們也有一些方法,把這些編譯過的內容給變回原來的樣子,這個過程叫做-反編譯。

反編譯分為兩個部分:一個是資源文件,一個是java文件。so文件是c++編譯的結果,可以認為是不可反編譯的(反編譯成匯編指令,估計大部分人也看不懂)。

2.1 反編譯資源文件

APK tool是反編譯的有力工具,據說是谷歌提供的官方的反編譯工具,可以把APK目錄解包,資源文件全部還原成編譯前的樣子,而dex文件反編譯成smail格式的文件(而不是我們希望的java原文件)。smail格式文件是安卓系統的虛擬機執行時使用的語法,我們不會去講解這部分內容。

2.1.1 工具准備

  1. APK tool的官網下載APKTool的最新版本;

  2. 在官網下載與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
  3. 將下載的jar包重命名為APKTool.jar,與腳本文件一起放到你希望存放的目錄下,例如D:\Work\apktool;

如果無法訪問官網下載,請上安豆網,下載最新的版本。

2.1.2 反編譯資源

接下來開始使用APKTool,

  1. 啟動cmd命令行窗口,進入apktool目錄;
  2. 輸入apktool d D:\Test.apk,開始反編譯Test.apkapktool 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...
  3. 編譯的結果就在cmd命令行窗口啟動的位置下,反編譯的目錄結構如下,

現在打開res目錄下的資源都被還原了,打開后就能看到原始的設計;而java源碼被反編譯成了smali格式的文件。

2.2 反編譯java源代碼

要查看java源碼,有三個方式:

  1. 把dex文件轉換成smail文件,然后用專門的工具將smail翻譯成java;
  2. 把dex文件轉換成java的通用編譯格式class文件,然后用專門的工具將class翻譯成java;
  3. 把dex文件轉換成jar文件,然后用專門的工具將jar翻譯成java;

這里我們采用第三種方法。

2.2.1 工具准備

首先准備反編譯用的工具。

  1. 在官網下載dex2jar工具,它可以把APK中的dex文件轉化成jar文件;
  2. 下載完成后,將壓縮包解壓,放到你希望存放的目錄下,例如D:\Work\dex2jar;

  3. 在官網下載JD-GUI,它可以查看jar文件的java源碼;

  4. 下載完成后,將壓縮包解壓,放到你希望存放的目錄下,例如D:\Work\jd-gui;

至此,java源碼的反編譯工具就安裝並設置完成了。
如果無法訪問官網下載,請上安豆網下載,那里將這幾個工具整體打包,方便大家使用。

2.2.2 反編譯代碼

接下來開始使用反編譯工具,

  1. APK文件后綴名改為zip,解壓,找到Android軟件安裝包中的class.dex

  2. 用dex2jar工具將classes.dex生成jar文件;啟動cmd命令行窗口,輸入d2j-dex2jar D:\classes.dex,開始反編譯classes.dexd2j-dex2jar后面需要跟上要反編譯的dex文件路徑;

    $ d2j-dex2jar D:\classes.dex
    dex2jar classes.dex -> .\classes-dex2jar.jar

    結果生成了classes-dex2jar.jar文件;

  3. 進入JD-GUI目錄,運行JD-GUI工具,打開上面的生成的jar文件,即可看到java源代碼。


/*******************************************************************/
* 版權聲明
* 本教程只在CSDN安豆網發布,其他網站出現本教程均屬侵權。

*另外,我們還推出了Arduino智能硬件相關的教程,您可以在我們的網店跟我學Arduino編程中購買相關硬件。同時也感謝大家對我們這些碼農的支持。

*最后再次感謝各位讀者對安豆的支持,謝謝:)
/*******************************************************************/


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com