Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 安卓應用反編譯(二)-APK包反編譯淺析

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

編輯:關於Android編程

第二章 APK包反編譯

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

\

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

2.1 反編譯資源文件

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

2.1.1 工具准備

在APK tool的官網下載APKTool的最新版本; \

2. 在官網下載與`APKTool`配套的[腳本文件-apktool.bat](https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/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

不過該腳本有一個小小的問題-需要去掉apktool.jar前面的一個\;下載完成後用文本編輯器打開該腳本,將這一段修改成,

@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

3. 將下載的APKTool壓縮包解壓,與腳本文件一起放到你希望存放的目錄下,例如`D:\Work\apktool`;

\

4. 為了使用方便,將存放目錄加入到系統的環境變量中; `我的電腦`點擊右鍵->`屬性`->`高級系統設置`->`環境變量`,選中`Path`這一項,進行編輯;

\ 在編輯欄最後輸入apktool所在的路徑`D:\Work\apktool`;如果該項之前還有別的路徑,請用`;`分隔開; \

5. 啟動`cmd命令行窗口`,輸入`apktool -version`,如果看到類似如下內容就說明安裝成功了;

$ apktool -version
2.0.3

至此,APKTool就安裝並設置完成了。
如果無法訪問官網下載,請上安豆網,下載最新的版本。

2.2.2 反編譯資源

接下來開始使用APKTool,


1. 啟動cmd命令行窗口


2. 假設apk放在D:\Test.apk目錄,輸入apktool d D:\Test.apk,開始反編譯Test.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源碼被反編譯成了smli格式的文件。

 

##2.3 反編譯java源代碼要查看java源碼,有三個方式: 1. 把dex文件轉換成smail文件,然後用專門的工具將smail翻譯成java; 2. 把dex文件轉換成java的通用編譯格式class文件,然後用專門的工具將class翻譯成java; 3. 把dex文件轉換成jar文件,然後用專門的工具將jar翻譯成java; 這裡我們采用第三種方法。 ### 2.3.1 工具准備首先准備反編譯用的工具。

1. 在官網下載[dex2jar](http://sourceforge.net/projects/dex2jar/files/)工具,它可以把APK中的dex文件轉化成jar文件;

2. 下載完成後,將壓縮包解壓,放到你希望存放的目錄下,例如`D:\Work\dex2jar`;

\

3. 為了使用方便,將存放目錄加入到系統的環境變量中;

\

4. 在官網下載[JD-GUI](http://jd.benow.ca/),它可以查看jar文件的java源碼;

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

\ 至此,java源碼的反編譯工具就安裝並設置完成了。如果無法訪問官網下載,請上[安豆網](http://anddle.com/resource)下載,那裡將這幾個工具整體打包,方便大家使用。 ###2.3.2 反編譯代碼接下來開始使用反編譯工具,

1. 解壓APK文件,找到Android軟件安裝包中的`class.dex`;

2. 用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文件;

 


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

\    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved