1. 程式人生 > >反編譯apk獲得原始碼

反編譯apk獲得原始碼

花點時間折騰了一下,把apk反編譯檢視原始碼

0.將apk拖入AndroidStudio,利用AS自帶的APK Analyzer 可直接檢視apk內的圖片,xml內容,dex結構,檔案尺寸

1.把apk檔案的字尾改為.zip,用解壓軟體解壓;開啟res目錄,得到一些圖片資源,裡邊的 xml 都是Binaray XML形式,需要再次轉化成 xml 才能檢視,Java程式碼是classes.dex格式,也無法直接檢視。

2.準備三個工具

  • apktool:將apk內的資源全部提取出來,可直接檢視xml,也可以用於在修改資源後重新打包apk
  • dex2jar:將apk反編譯成Java原始碼(將classes.dex轉化為jar檔案)
  • jd-gui:檢視dex2jar轉換後的jar檔案,即檢視Java原始碼檔案

3.使用apktool反編譯獲得圖片與XML資源:

  • 開啟apktool目錄,把apk檔案放到當前目錄,雙擊cmd.exe,執行命令apktool.bat d csdn.apk,結果如下:

  • 分析可以知道是cmd.exe找不到Java執行環境,但是我的Java環境變數是配置好了的,遂改用本地cmd,結果如下:

  • 解決方法:下載新的apktool:下載地址,檔名改為apktool.jar,把原來的apktool.jar刪除,再次執行,結果如下:

  • apktool目錄下多了一個目錄檔案,apktool反編譯出來只能得到apk的smali檔案,即組合語言版本,並不能得到原始碼

  • apktool其他命令:
// 提取資源
apktool d <apk_name>
// 提取資源並指定輸出目錄
apktool d <apk_name> -o <foleder_name>
// 重新打包apk
apktool b <folder_name>
//重新打包apk並指定輸出apk名字
apktool b <folder_name> -o <new_apk_name>

4.使用dex2jar將classes.dex轉換成jar檔案

  • apk解壓後中的classes.dex複製到dex2jar.bat所在的目錄下,開啟cmd,來到這個目錄下,執行命令d2j-dex2jar.bat classes.dex

​​​​​​​

  • 當前目錄下多了一個檔案classes-dex2jar.jar

  • dex2jar其他命令:
// 將 dex 檔案轉成 jar 檔案
d2j-dex2jar <dex_name> -o <jar_name>
//將apk檔案轉成jar檔案
sh d2j-dex2jar.sh -f <apk_name>

5.使用jd-gui檢視jar包中的Java程式碼

  • jd-gui 視覺化反編譯檢視 .jar 檔案
  • 參考的第二篇文章說jd-gui只能適配java8,否則無法正常開啟執行,但我的Java環境是Java10,執行看起來正常

參考文章:

http://www.runoob.com/w3cnote/android-tutorial-decompile-apk-get-code-resources.html

https://www.jianshu.com/p/2bbe7112f940