今天的越寫悅快樂之系列文章爲大家帶來如何使用ApkTool反編譯APK。今天偶然的機會在簡書上看到了Android反編譯的文章,就瞭解一下反編譯的原理和相關工具的使用方法,正好因爲項目需要去查看一個Android應用使用的技術,那就把這些知識點整理成文,希望對你學習逆向工程有一點幫助。閒話少說,前方高能預警,請專注操作每一步。
:warning: 請注意本文使用的反編譯工具僅用於學習之用,請勿將其用於商業用途。
開發環境
- Window 10.0.17763
- Java 8.0.191
- Android Build Tool 28.0.3
- Windows Command
APK是什麼
APK文件是Android應用簽名打包後的產物,也是Android設備安裝應用的文件,我們有分享過如何在Android Studio中進行應用打包,比如我們使用上一次打包的APK文件app-release.apk
來驗證我們的反編譯工具,打包完成後我們可以將APK文件拖拽到Android Studio中進行分析。
我們從上圖可以粗略地知道dex
文件在打包之後的佔比、APK包的大小、res
資源目錄加載了那些資源。這些信息有助於我們在進行應用優化和性能提升方面提供有力的依據。
工具下載
我們可以從參考鏈接中找到releases
標籤頁中選擇最新的穩定版本,下載完成後我們可以看到如下文件。
工具安裝
由於下載好的dextool
和jd-gui
都是編譯好的壓縮包,所以我們直接解壓就可以使用,那麼對於apktool
的的安裝我們需要有如下操作。
重命名
apktool_2.4.0.jar
爲apktool.jar
- 去掉版本號從官網下載
apktool
包裝命令,並保存爲apktool.bat
文件將
apktool.jar
和apktool.bat
文件複製到C:/Windows
目錄下輸入
Windows + R
打開運行窗口,輸入cmd
,然後輸入apktool
,如果輸出以下信息,則說明apktool
安裝成功
如何使用
使用apktool
解壓APK
- 切換到APK文件所在目錄
- 在命令行窗口執行
apktool d -f app-release.apk
- 查看解壓後的目錄
使用dex2jar
將dex
反編譯爲jar
- 解壓
dex-tool-2.0
- 手動修改
app-release.apk
文件後綴爲.zip
,並解壓找到其中的classes.dex
文件 - 複製
classes.dex
文件到dex-tool-2.0
下 - 在命令行窗口執行
d2j-dex2jar classes.dex
執行完成後會在當前目錄下生成classes-dex2.jar
文件
使用jd-gui
查看源代碼
- 解壓
jd-gui-windows-1.4.2.zip
- 雙擊
jd-gui.exe
彈出Java Decompiler
窗口 - 選擇上一步生成的
classes-dex2.jar
文件,即可查看源代碼
擴展方法
我們也可以使用GDA來分析APK文件。
GJoy Dex Analysizer(GDA),是一款強大而輕便的交互式反編譯器,也是一款綜合性逆向分析利器。它支持分析apk、dex、odex、oat等類型文件,支持使用Python腳本進行方法簽名製作與識別。
參考
個人總結及收穫
今天有幸爲大家分享瞭如何使用apktool
反編譯APK,鑑於Android設備使用的虛擬機與Java虛擬機的異同,我們知道了打包完成後會生成以dex
爲後綴的字節碼文件,Android虛擬機會加載字節碼文件並讀取字節碼頭部信息,加載相關資源,隨後啓動應用進程,渲染頁面成功後就可以看到我們開發的應用了。當然具體的加載過程肯定不像我說的這麼簡單,我相信好奇的你肯定有機會去探索應用的加載流程和原理,有時間我也會分享一些相關的知識點爲大家解惑。希望大家保持學習的熱情,鞏固自己的基礎知識,開發出更加出色穩定的應用,也能爲客戶創造更大的價值。若是我的文章對你有所啓發,那將是我莫大的榮幸,期待我們下次的不期而遇。