當前位置:
首頁 > 新聞 > Vdex Extractor:從Vdex文件反編譯和提取Android Dex位元組碼

Vdex Extractor:從Vdex文件反編譯和提取Android Dex位元組碼

Vdex Extractor


一款命令行工具,用於從Vdex文件反編譯和提取Android Dex位元組碼的工具。


編譯



克隆此存儲庫

如果要為Android設備進行交叉編譯,請安裝Android NDK


make.sh使用所需的構建目標調用bash腳本$ ./make.sh- 如果CC未從env定義,則默認使用gcc$ ./make.sh gcc - 用gcc編譯$ ./make.sh clang - 用clang編譯$ ./make.sh cross-android - 使用NDK交叉編譯(armeabi-v7a,arm64-v8a,x86和x86_64)可執行文件複製到bin目錄下,對於調試版本使用$ DEBUG=true ./make.sh


依賴關係


主機系統中應安裝以下外部庫:


zlib


macos:brew install zlib-devel帶macports的macOS: port install zlibLinux: apt install libz-dev其他Linux / Unix系統:檢查可用的包管理器或從源代碼編譯使用cygwin的Windows:zlib-devel從cygwin安裝程序安裝


用法

$ bin/vdexExtractor -h
             vdexExtractor ver. 0.5.2
   Anestis Bechtsoudis
 Copyright 2017 - 2018 by CENSUS S.A. All Rights Reserved.
-i, --input=   : 輸入目錄(遞歸搜索)或單個文件
-o, --output=  : 輸出路徑(默認與輸入相同)
-f, --file-override  : 如果文件已經存在允許覆蓋(默認:false)
--no-unquicken       : 禁用unquicken位元組碼反編譯器 (don"t de-odex)
--deps               : 轉儲經過驗證的依賴信息
--dis                : 啟用位元組碼反彙編器
--ignore-crc-error   : 反編譯Dex 忽略CRC錯誤
--new-crc=     : 提取Apk或Dex文件位置校驗和文本文件
--get-api             : 基於Vdex版本獲取Android API級別
-v, --debug=LEVEL    : 日誌級別 默認: "3" (INFO)
-l, --log-file=: 保存反彙編器或驗證依賴項輸出到日誌文件
-h, --help           : 幫助信息

位元組碼Unquickening解碼器


Vdex文件包含所有quick_info數據(舊vtable),用於恢複位元組碼優化過程中應用的dexto -dex轉換。這裡是創建一個能夠快速恢復優化位元組碼的獨立工具,不需要從AOSP構建整個libart。Vdex完全unquicken功能也作為AOSP oatdump libart工具的一部分實現。可在此處獲得。如果你想在Oreo版本中使用oatdump,你可以在這裡使用相應的補丁,或者在oatdump ++工具的fork和build(內部和AOSP_SRC_ROOT工作空間)中使用oreo-release分支。谷歌已經發布了提供的補丁以及ART運行時的Android Pie版本。

驗證迭代器的依賴關係


當第一次編譯(優化)Dex位元組碼文件時,dex2oat將執行驗證依賴項收集器,作為方法學驗證者的一部分。驗證依賴項收集器類用於記錄解析結果和類路徑中定義的類/方法/欄位的類型可賦值測試。編譯驅動程序初始化類並註冊正在編譯的所有Dex文件。在這個集合之外的Dex文件中定義的類(或者沒有關聯的Dex文件的合成類)被認為在類路徑中。所有記錄的依賴關係都存儲在生成的Vdex文件中,以及來自OatWriter類的相應Oat文件。vdexExtractor工具集成了一個Vdex依賴項walker函數,該函數能夠迭代所有依賴項信息並以人類可讀的格式轉儲它們。以下代碼段演示了示例Vdex文件的依賴項轉儲示例。




集成反彙編程序


為了調試反編譯器並協助Dex位元組碼調查任務,實現了一個輕型反彙編程序。反彙編輸出非常類似於platform/art項目的AOSP dexdump2實用程序提供的輸出。反彙編程序可以獨立於unquickening反編譯器使用。以下代碼段中說明了示例輸出。前綴的行[new]說明了位於該偏移量中的反編譯指令(前一行)的輸出。請注意,所有加速的偏移和vtable引用都已恢復為原始簽名和原型。





Dex轉換器


Android 9(Pie)版本推出了一種新型的Dex文件,即Compact Dex(Cdex)。Cdex是一種ART內部文件格式,它壓縮各種Dex數據結構(例如方法頭)並對多索引文件中的常見數據blob(例如字元串)進行重複數據刪除。來自輸入應用程序的Dex文件的重複數據刪除數據存儲在Vdex容器的共享部分中。


現在由於Vdex容器存儲的是Cdex文件而不是標準的Dex,因此vdexExtractor後端(從版本019開始)已經更新並支持它們。但是,由於該工具未實現Dex IR,因此無法在不使用外部工具的情況下將Cdex文件轉換回標準Dex。為此,編寫了「compact_dex_converter」工具,該工具使用來自AOSP art repo的libdexlayout(Dex IR)。該工具的源代碼可在此處獲得。編譯工具需要分配必要的AOSP回購併構建為AOSP模塊。為方便起見,vdexExtractor正在實現一個幫助工具(請參閱下一節中的「tools / deodex」),該工具下載一組預編譯的二進位文件並包裝所需的自動化。此外,可以從以下鏈接下載「compact_dex_converter」二進位文件:


Linux x86-64



使用共享庫:https://1drv.ms/u/s !ArDC4mvMyPrRhEsiuPjOF_ssIfOe


使用共享庫調試:https://1drv.ms/u/s!ArDC4mvMyPrRhE3Z2jdBXJIhazjc


靜態編譯:https://1drv.ms/u/s !ArDC4mvMyPrRhEq96XX-LsCACF2s


靜態編譯調試:https://1drv.ms/u/s!ArDC4mvMyPrRhEwmwM8—zdhoCB2


Linux x86-64舊CPU(沒有SSE4.2和沒有POPCNT #29)


使用共享庫:https://1drv.ms/u/s!ArDC4mvMyPrRhFP46IyBqOtihS9s


使用共享庫調試:https://1drv.ms/u/s!ArrDC4mvMyPrRhFXEGW9vrlMlTKDJ


靜態編譯:https://1drv.ms/u/s!ArDC4mvMyPrRhFIFZCF9TtEHVooc


靜態編譯的調試:https://1drv.ms/u/s!ArDC4mvMyPrRhFSMELB_H3w5Cdfe


ARM64(aarch64)



使用共享庫:https://1drv.ms/u/s!ArDC4mvMyPrRhEindMOf3aWCbQRr


使用共享庫調試:https://1drv.ms/u/s!ArDC4mvMyPrRhEnU9Ei_3MeQipGr


靜態編譯:不支持

蘋果系統



使用共享庫:https://1drv.ms/u/s!ArDC4mvMyPrRhE45gEUNolEiZ50u


使用共享庫調試:https://1drv.ms/u/s!ArDC4mvMyPrRhFG5WH_zNz0jNarZ


靜態編譯:不支持


二進位名稱中的"s"後綴代表「靜態編譯」,而「d」代表「debug」構建。它們也可以組合在一起(例如"ds" - 靜態編譯的調試版本)。


實用腳本


extract-apps-from-device.sh


從連接的Android設備中提取安裝包(用戶和系統)的ART編譯器輸出資源(oat、ART、vdex)。還支持提取APK檔案的安裝包。由於應用了DAC許可權,一些系統應用程序數據在沒有根訪問的情況下可能無法提取。


update-vdex-location-checksums.sh 使用從輸入Apk存檔文件中提取的CRCs更新Vdex文件位置校驗。有關如何使用該特性欺騙ART和繞過SafetyNet應用程序完整性檢查的更多信息,請參閱

原文



tools/deodex/run.sh幫助工具,以批量方式將(deodex) Vdex資源反編譯回標準Dex文件。該工具自動處理CompactDex文件(如Android Pie中介紹的),並使用compact_dex_converter工具轉換回StandardDex。由於轉換器是作為AOSP源代碼的一部分進行編譯的,為了方便起見,開發人員維護了一組用於Linux和maacOS的二進位文件。


*參考來源:

github

,由周大濤編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

如何通過惡意宏劫持桌面快捷方式提供後門
還記得BlueBorne嗎?一年過去了,仍有20億藍牙設備的漏洞沒有修復

TAG:FreeBuf |