本篇博客主要針對 MacOs勤讽,介紹幾種常用的反編譯工具吉懊。
1. ApkTool
APKTool 是 Google 提供的 APK 編譯工具叼耙,能夠反編譯及回編譯 apk,我們一般用來反編譯資源文件执隧,代碼反編譯之后都是 smali 文件。需要 java 支持户侥。
功能
- 還原 Apk 中所包含的 resources.arsc镀琉、classes.dex、9.png 和 xml 等資源文件
- 對 Apk 進行重新(二次)打包
- 反編譯依賴于 Framework 的 apk 文件
- 運行調(diào)試 Smali 文件
安裝
- 將下載好的 apktool 文件與 apktool.jar 文件準備好
- 將 apktool.jar 與 apktool 移動到 /usr/local/bin 目錄下(可以通過在終端中輸出命令 open /usr/local/bin 來打開這個目錄)
- 為上述兩個文件增加可執(zhí)行權限蕊唐,即在終端中輸入并執(zhí)行:
1. chmod +x apktool.jar
2. chmod +x apktool
-
在終端輸入 apktool 看是否可以運行屋摔,如果可以運行,輸出結果如下圖替梨。(如果不可以钓试,則需要在系統(tǒng)偏好設置中打開安全與隱私中點擊仍要運行apktool.jar)
使用
我們可以利用 ApkTool 反編譯 apk 獲得 AndroidManifest.xml、xml文件和圖片資源副瀑。
在終端執(zhí)行以下操作:
1. cd /你存放apk的目錄或在下面命令中使用xxx.apk文件的絕對路徑
2. apktool d xxx.apk //該命令執(zhí)行后會在同級目錄下生成一個與你編譯的apk同名的目錄
以某版本的 docs.apk 為例:APkTool 只能提取資源文件弓熏,對于 .dex 類型的文件是無法查看的,這時候需要用到 dex2jar 了糠睡。
2. dex2jar
dex2jar 是一個能操作 Android 的 dalvik(.dex) 文件格式和 Java 的 (.class) 的工具集合挽鞠。
功能
- dex-reader/writer : 用于讀寫 Dalvik Executable (.dex) 文件格式. 包含一個簡單的API (與ASM相似)
- d2j-dex2jar : 執(zhí)行 .dex 到 .class 的文件格式轉換
- smali/baksmali : 與 smali 工具功能一致,但是對中文更友好
安裝
直接解壓即可狈孔。
使用
-
先將 apk 文件進行解壓信认,可使用解壓軟件,也可將文件后綴改為 .rar 然后再通過終端 unzip xxx.rar 命令行解壓均抽。(注意:直接解壓 apk 和使用 ApkTool 反編譯 apk 都能獲得AndroidManifest.xml嫁赏,但直接解壓獲得的 AndroidManifest.xml 是亂碼的,無法直接查看到忽;同時橄教,直接解壓 apk 獲得 res 資源文件是不包含 resources.arsc 部分的清寇,而使用 ApkTool 反編譯出來的 res 是包含的。)
- 從上圖中可以看到护蝶,直接解壓后有3個 classes.dex 文件(應用了 MultiDex 所致)华烟,這就是項目的源碼。將這幾個 classes.dex 文件拷貝到解壓的 dex2jar 目錄下持灰,然后執(zhí)行在終端如下命令進行反編譯:
1. cd /你的dex2jar解壓目錄
2. sh d2j-dex2jar.sh classes.dex
3. sh d2j-dex2jar.sh classes2.dex
4. sh d2j-dex2jar.sh classes3.dex
PS:如果出現(xiàn) permission denied d2j_invoke.sh 的提示盔夜,則需要在終端里執(zhí)行:
sudo chmod +x d2j_invoke.sh // chmod +x 命令為取消權限
然后再重新執(zhí)行:
sh d2j-dex2jar.sh classes.dex
- 通過上面的步驟,我們已經(jīng)將 .dex 轉換成 .jar堤魁,接下來就可以使用 JD-GUI 或 jadx 來查看反編譯后的程序源碼了喂链。
3. JD-GUI
一款免費的 Java 反編譯工具,使用 C++ 開發(fā)
功能
- 該工具可以反編譯單個妥泉、多個 jar 包
- 擁有獨立圖形界面椭微,只要把文件拖到軟件的那個框框里面,就可以看到源碼了
使用
不需要安裝盲链,直接雙擊運行 jd-gui-1.4.0.jar 打開軟件蝇率,然后將 classes-dex2jar.jar 文件拖拽到 JD-GUI 界面上即可,然后就可以愉快地查看源碼了刽沾。4. jadx
一款跨平臺的有 GUI 界面的反編譯工具
功能
- 可以直接將 apk 文件進行反編譯
- 反編譯輸出 Java 代碼
- 圖形化的界面侧漓,拖拽式的操作锅尘,強大的搜索功能
- 導出 Gradle 工程
安裝
方式一:下載并解壓后點擊 bin 目錄下的 jadx-gui 即可打開。
方式二:由于 jadx 本身是 github 上的一個開源項目布蔗,所以可以直接 clone 源代碼藤违,打開終端執(zhí)行以下命令,進行編譯安裝何鸡。
1. git clone https://github.com/skylot/jadx.git
2. cd jadx
3. ./gradlew dist
然后將 build/jadx/bin 加入到環(huán)境變量即可纺弊。
使用
雙擊 bin 目錄下的 jadx-gui 即可打開,使用方式同 JD_GUI 一致骡男,也同樣可以通過 File->Save All 來保存反編譯后的文件再用 Android Studio 打開淆游。
除此之外,jadx 也支持直接用命令行來反編譯文件:
1. jadx -d out classes.dex #直接輸出.java文件到out目錄
2. #or
3. jadx-gui classes.dex #使用gui打開
總結
- 如果只是想得到 .xml 文件和圖片資源等,則直接使用 ApkTool 來反編譯 apk 吮炕。
- 如果想查看項目源代碼腊脱,則有以下兩種方式:
- 可以先將 apk 直接解壓,再利用 dex2jar 將文件由 .dex 轉換為 .jar龙亲,然后使用 JD-GUI 或 jadx 打開 .jar 文件即可看到源碼陕凹,可選擇保存再用其他 IDE 打開悍抑。
- 直接用 jadx 反編譯 apk 。