dex和odex相互轉換


一、dex和odex

dex是安卓dalvik虛擬機的可執行文件,可以在導出的apk文件里用解壓縮軟件直接打開。odex是經過優化過的dex。odex一種是從apk程序中提取出來的,與apk文件存放在同一目錄,文件后綴為odex,這類odex文件多是Android ROM的系統程序;另一種緩存文件,這類odex仍以dex為后綴,存放在cache/dalvik-cache目錄下。存放文件名格式為“apk路徑@apk名@class.dex”,例如“system@app@Calculator@class.dex”,表示/system/app目錄下的Calculator.apk程序的odex文件。

二、dex轉換為odex

使用dexopt-wrapper可以將dex轉換為odex。dexopt-wrapper在安卓2.3以前的源碼中可以找到。將dex-wrapper編譯后放到手機中。

adb push dexopt-wrapper /data/local
adb shell chmod 777 /data/local/dexopt-wrapper

 

隨意從apk文件中提取一個dex文件,將其改名為classex.dex,zip將其壓縮后改名為HelloDex.zip

adb push HelloDex.zip /data/local
adb shell
cd /data/local
./dexopt-wrapper HelloDex.zip HelloDex.odex

如果執行無錯誤會有如下輸出

./dexopt-wrapper HelloDex.zip HelloDex.odex
--- BEGIN 'HelloDex.zip' (bootstrap=0) ---
--- waiting for verify+opt, pid=721
--- would reduce privs here
--- END 'HelloDex.zip' (success) ---

當前目錄會有HelloDex.odex文件。現在將其導出方便以后操作。

adb pull /data/local/HelloDex.odex d:\

三、odex轉換為dex

odex轉換為dex的原理就是先將odex轉為smali文件,然后將smali文件轉為dex文件。需要下載smali.jar和baksmali.jar。

java -jar baksmali.jar -x HelloDex.odex

 

可能會有如下錯誤:image

將手機中的/system/framework文件夾導出。放入odex目錄下的framework文件夾內。

 

執行命令

java -jar baksmali.jar -x HelloDex.odex -d framework  //-d 表示指定framework目錄

 

如果無錯誤會無任何輸出,工作目錄最終如下,out目錄為導出的smali保存目錄。

image

接下來將smali轉換為dex

執行命令

java -jar smali.jar out -o OutHelloDex.dex  //將out目錄轉換為OutHelloDex.dex文件

 

如果無錯誤無任何輸出。當前目錄下會生成OutHelloDex.dex文件。

四、相關下載

所有下載


免責聲明!

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



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