1. 程式人生 > >Android ROM中Odex檔案的作用介紹及破解方式

Android ROM中Odex檔案的作用介紹及破解方式

細心的網友可能發現Android的ROM中有很多odex檔案,相對於APK中的dex檔案而言這個odex有什麼作用呢? Android123提示大家,如果你仔細觀察會發現檔名時一一對應的,同時那些對應的apk檔案中沒有dex檔案。這樣做可以使其廠商保證一定的反盜版,因為沒有沒有dex檔案的apk是無法正常安裝的,而廠商直接將odex和不完整的apk檔案放到手機rom固化到/system/bin中可以讓一般使用者無法正常匯出使用。

  很多網友可能想到的是合併odex和apk變成apk中包含dex檔案的,這樣合併後最終apk檔案安裝在/data/中,而rom存放時在 /system/bin中,所以最終導致了使用者可裝在Android手機中的軟體會變少,佔用系統空間。


一、APK生成odex檔案方法:

  編譯開源GIT上的build/tools/dexpreopt/dexopt-wrapper這個,使用dexopt-wrapper即可,操作步驟

  將dexopt-wrapper放到/data/local目錄中,使用adb shell執行linux命令列,使用cd命令進入/data/local目錄,

  cd /data/local

  ./dexopt-wrapper android123.apk android123.odex

二、合併odex和 少dex的apk 為完整的apk檔案

  1. 下載 http://smali.googlecode.com/files/smali-1.2.2.jar
 和 http://smali.googlecode.com/files/baksmali-1.2.2.jar,既然是需要盜版,還需要odex所在rom中的一些引用類,一般在 /system/framework 目錄中

  2 .  通過odex生成class檔案

          java -jar baksmali-1.2.2.jar -x android123.odex

        執行完上面這行命令後,會生成一個out 資料夾裡面是android123.odex的class檔案。出現問題,根據提示可以從rom的 /system/framework 中的xxx.jar放到pc上的java環境變數中一起生成。


  3. 通過class生成classes.dex 檔案。

        java -Xmx512M -jar smali-1.2.2.jar out -o classes.dex

  4. 將classes.dex放到apk檔案

        因為apk是zip的mime編碼型別,使用winzip或winrar直接拖入到apk改名為zip的壓縮包中即可。

  5. 不要忘記了簽名,使用jdk中的arsigner和keytool打包重新簽名即可。

大家好,這裡介紹apk反編譯操作。

1:apk反編譯

2:odex轉dex

操作環境:ubuntu

A:apk反編譯

.到code.google上下載apktool.jar以及相關檔案:http://code.google.com/p/android-apktool/downloads/list
點選下載apktool-1.0.0.tar.bz2 和apktool-install-linux-2.1_r01-1.zip


Apktool 命令
./apktool d geek.apk test    反編譯 geek.apk到資料夾test

B:odex轉dex

下載下面4個檔案。

現在我們要對CardManager.odex進行反編譯,以CardManager.odex為例。

1:java -jar baksmali-1.3.2.jar -a 12 -x CardManager.odex    

//注意:這裡要有core.jar:ext.jar:framework.jar:android.policy.jar:services.jar檔案支援。這個 apk 所在的 rom 裡面的一些 jar 檔案,都在 /system/framework 裡面: core.jar, ext. jar, framework. jar, android.policy. jar, services.jar和對應的.odex檔案,把這些檔案放在CardManager.odex同一級目錄。

執行java -jar baksmali-1.3.2.jar -a 12 -x CardManager.odex   ,會生成一個out資料夾,裡面的檔案以.smali結尾,

2:生成 classes.dex檔案

執行 java -jar smali-1.3.2.jar out/ -o classes.dex

3:下載 dex2jar : dex2jar-0.0.9.8.zip