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

來源:互聯網
上載者:User

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

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

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

2.1 反編譯資源檔

APK tool是反編譯的有力工具,據說是Google提供的官方的反編譯工具,可以把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 offif "%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 offif "%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 -version2.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.apkI: 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原始碼。

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.