反編譯apk獲得原始碼
阿新 • • 發佈:2018-12-25
花點時間折騰了一下,把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反編譯出來只能得到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
- 解決方法:下載最新版的dex2jar,重新執行命令,沒有報錯,結果如下:
- 當前目錄下多了一個檔案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