[操作向]DexExtractor的使用

我啥時候說啦jj發表於2017-12-27

容我先貼個目錄

最近對接某應用, 他們整合我司sdk後出了點問題, 打算看看他們程式碼, 發現咋jadx中找不到包名目錄;

jadx目錄

可以看到有個 wrapper 包名 com.secneo.apkwrapper 包名, 查了下, 是梆梆加固的(我自己用免費的梆梆加密apk,倒是沒有個包,而是多了 com.secshell.secData 包):

梆梆加固apk-免費版

之前用愛加密/騰訊樂固等加固軟體, 都會隱藏app所有程式碼, 沒想到梆梆只隱藏了app本身的程式碼,而對其依賴的第三方庫的程式碼則保持不變, 一開始看到這個目錄結構時,還以為是沒有做加固,因此想找找看可不可以嘗試脫殼,因為以前沒玩過,所以在此記錄下; P.S. 忙活到最後,發現想脫殼的apk在虛擬機器中執行不起來,鬱悶的啊?, 不過倒也不是沒有收穫就是了;

工具

搜尋了一圈,發現有個開源專案 DexExtractor 直接支援梆梆脫殼; 這個專案最早是在 看雪論壇 上釋出的;

DexExtractor 的使用

1. 將 github 專案 clone下來

後續會用到裡面的 Decode.jar;

2. 到作者網盤上下載 system.img 並解壓

這個檔案是用於 android 4.4 api 19 虛擬機器的, 所以需要在 <androidSDKHome>/system-images 中有 android-19 目錄,

若無<androidSDKHome>/system-images/android-19,則可通過 android studio的建立虛擬機器功能,一步步選擇 System-image --> Other Images --> Kitkat 19 armeab-v7a Android 4.4(非 Google APIs)

AVD

下載完後建立一臺基於此image的虛擬機器;

3. 拷貝剛才下載的 system.img<androidSDKHome>/system-images/android-19/default/armeabi-v7a/

可以備份下原始的 system.img

4. 啟動剛才建立的虛擬機器(api 19);

5. 將需要脫殼的apk拖入虛擬機器安裝執行;

注意: 要求apk帶有讀寫儲存卡的許可權,若無,請自行反編譯apk新增後重新編譯簽名後再安裝執行;

6. 開啟 as logcat 會看到如下日誌:

create file end

其中 create file /sdcard/<your_package_name>_classes_***.dex 就是作者把記憶體中執行的dex經過 base64 加密後寫到儲存卡上的,可能有多個; 將這些檔案都拷貝出來,方法:

  • adb pull /sdcard/<your_package_name>_classes_***.dex
  • 利用 android studio 3.0+ 的 Device File Explorer 來檢視 /sdcard 目錄, 直接右鍵儲存所需要的檔案到電腦上;

最後, 將拷貝出來的dex檔案統一放入一個目錄中,比如 dex_dir;

7. 利用第1步下載的 Decode.jar 進行 base64 解密

java -jar Decode.jar dex_dir
複製程式碼

執行完成後, dex_dir 目錄中的每個dex都會生成一個對應的 *.read.dex ,這就是解密後的dex; 但此時的dex無法直接通過jadx工具檢視,因為是odex,倒是可以通過ida開啟,因此需要進行轉換;

8. 下載 baksmali.jar 和 smali.jar

9. 將odex轉為jar

// 將odex檔案 "your_dex.read.dex" 轉成samli檔案,輸出到 classout 目錄中
java -jar baksmali-2.2.2.jar disassemble  -o ./classout/  your_dex.read.dex
複製程式碼

10. 將smali目錄重新打包生成dex檔案: final.dex

java -jar smali-2.2.2.jar assemble ./classout  -o  final.dex
複製程式碼

11. 利用jadx直接檢視 final.dex 檔案即可看到原始碼;

參考文章

Apk脫殼聖戰之—如何脫掉“梆梆加固”的保護殼 DexExtractor原理分析 常見app加固廠商脫殼方法研究 Android應用程式通用自動脫殼方法研究 Andorid APK反逆向解決方案---梆梆加固原理探尋

相關文章