逆向工程-反編譯APK

編輯紀錄:
2020/09/24
補齊dex2jar詳細步驟、加入jd-gui

環境&材料

  • 一台 Kali Linux
  • 一個 APK

1. 解壓縮Apk檔

1
$ unzip OOXX.apk

得到 classes.dex
classes

2. Dex to Jar

下載

https://sourceforge.net/projects/dex2jar/

解壓縮

解壓縮後,要讓裡面的程式都「可執行」

1
2
3
unzip dex2jar-2.0.zip
cd dex2jar-2.0/
chmod +x d*

unzip

執行

轉檔成jar格式

1
$ ./d2j-dex2jar.sh classes.dex

得到classes-dex2jar.jar

classes-dex2jar

3. Jar to Java

有 gui 和 cmd 兩種版本,依需求取用
gui 可以 trace code 可能方便一些

jd-gui

下載

http://java-decompiler.github.io/
jd-gui

執行

kali 預先有安裝 java 了,省略安裝步驟

1
java -jar jd-gui-1.6.6.jar

開啟剛反編譯完的 classes-dex2jar.jar
open-file

就能看到java程式碼
result

jd-cmd

https://github.com/kwart/jd-cmd

下載

1
$ git clone https://github.com/kwart/jd-cmd.git

安裝

下載後,可以在資料夾中找找到hackingOnJdCmd.md,裡面有安裝步驟

  1. 首先要安裝Maven工具
    1
    $ sudo apt-get install maven

    https://www.facebook.com/teacherchi/posts/830539233634000
    Maven 是一個「軟體開發流程」的「自動化工具」,一般人會撰寫時下一些指令、編譯時下另外一些指令、測試/除錯/版本維護又是下另外一些指令。
    Maven 可以讓你把每個流程輸入的指令,分門別類地記錄下來(當然,第一次還是要你用手工把它 Key 進去)。等於它有能力「模仿」你、把你每個流程打入的指令無限次「重現」。以後你只要一聲令下,就能把這一大堆指令,一口氣執行完畢。更棒的是,呼叫 Maven 時,可以從外部下一些小指令,客製化這些「每個流程要輸入的指令」的執行順序。因為軟體開發流程的「撰寫 –> 編譯 –> 測試 –> 除錯 –> 原始碼版本維護 –> …」並非永遠依照固定順序執行、一成不變的。正因 Maven 可以彈性調整組合軟體開發過程中那一大堆鬼畫符般的指令,讓你不必背誦,它才會那麼受歡迎。
    Maven之於Java,相當於Makefile之於C

  2. 安裝jd-cmd
    1
    2
    $ cd jd-cmd
    $ mvn clean package

使用

  1. 測試
    1
    $ java -jar jd-cli/target/jd-cli.jar
  2. 建立一個存放反編譯結果的資料夾
    1
    $ mkdir ~/dex2jarTest/apk/OOXX/decompile 
  3. 反編譯!
    1
    2
    $ java -jar jd-cli/target/jd-cli.jar [.jar路徑] -od [輸出路徑]
    $ java -jar jd-cli/target/jd-cli.jar ~/dex2jarTest/apk/OOXX/classes-dex2jar.jar -od ~/dex2jarTest/apk/OOXX/decompile/
    接著在decompile資料夾裡就可以看到反編譯完的結果囉~