DEX、ODEX、OAT文件&Dalvik和ART虛擬機


https://www.jianshu.com/p/389911e2cdfb

https://www.jianshu.com/p/a468e714aca7

 

ODEX是安卓上的應用程序apk中提取出來的可運行文件,即將APK中的classes.dex文件通過dex優化過程將其優化生成一個·odex文件單獨存放,原APK中的classes.dex文件會保留。

優化是依據當前ROM的特性進行的,會減少很多冗余信息,和當前ROM強相關,優化后,文件減小很多。加載快,運行快。優化發生在手機從出產狀態到第一次啟動的過程。


這樣做可以加快軟件的啟動速度,預先提取,減少對RAM的占用,因為沒有odex的話,系統要從apk包中提取dex再運行。(只有dex,也是只有在第一次程序運行時,啟動會慢些;因為要解壓得到dex文件,解壓出來的dex文件會存儲下來,系統應用和普通應用存儲位置不同。而后再加載到內存。后面再啟動時,會直接將存儲的dex文件加載到內存中)。

 

odex , vdex ,art 文件區別

1.vdex(Android O開始加入的)

package 直接轉化的 可執行二進制碼 文件:

1.第一次開機就會生成在/system/app/<packagename>/oat/ 下;

2.在系統運行過程中,虛擬機將其 從 “/system/app” 下  copy  到 “/data/davilk-cache/” 下

 

2.odex 

odex 是從vdex 這個文件中 提取了部分模塊生成的一個新的 可執行二進制碼 文件 , odex 從vdex 中提取后,vdex 的大小就減少了。

1.第一次開機就會生成在/system/app/<packagename>/oat/ 下

2.在系統運行過程中,虛擬機將其 從 “/system/app” 下  copy  到 “/data/davilk-cache/” 下

3.odex + vdex = apk 的全部源碼 (vdex 並不是獨立於odex 的文件 odex + vdex 才代表一個apk )

 

3.art

odex 進行優化 生成的 可執行二進制碼 文件,主要是apk 啟動的熱點函數相關地址的記錄,方便尋址相關; 

1.第一次開機不會生成在/system/app/<packagename>/oat/ 下,以后也不會;

2.odex 文件在運行時,虛擬機會計算函數調用頻率,進行函數地址的修改;

3.最后在/data/davilk-cache/ 由虛擬機生成;

4.生成art 文件后,/system/app 下的odex 和 vdex 會無效,即使你刪除,apk也會正常運行

5.push 一個新的apk file 覆蓋之前/system/app 下apk file ,會觸發PKMS 掃描時下發force_dex flag ,強行生成新的vdex 文件 ,覆蓋之前的vdex 文件,由於某種機制,這個新vdex 文件會copy到/data/dalvik-cache/下,於是art 文件也變化了。

 

反編譯vdex文件

華為mate10使用了最新的android o,並進行了預編譯,然后baksmali現在還不支持androido,導致反編譯困難,於是自己動手diy
1、adb pull /system/framework,把整個框架的代碼pull 出來,特別是arm64目錄下的vdex文件
2、從vdex文件扣出dex文件,並構成jar文件,這一步可以使用16進制編輯器,找到dex\n035開頭的magic,並把往后的內容導出成一個classes.dex文件,然后並壓縮到jary誰的中,注意,boot-framework.vdex里,包括兩個dex文件
3、adb pull /system/app/iaware/oat/arm64/base.vdex,pull出預編譯后的vdex代碼,並扣出dex文件
4、下載baksmali源碼,編譯並調試執行baksmali d –x base.vdex –d <2中生成的framework的.jar目錄>
5、哪里錯了改哪里,還要把華為的bootclasspath替換掉原本的bootclasspath,或者直接使用https://github.com/lcweik/smali
6、再執行一下baksmali d –x base.vdex –d<2中生成的framework的.jar目錄>,全部都反編譯出來了,保存在out目錄,再 smali a out –o base.dex,就行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM