odex 反編譯總結

odex 是 Optimized dex 的縮寫赁温,是優(yōu)化后的dex文件坛怪,通過將 apk 中的 dex 文件進行 odex 優(yōu)化,可以提升程序的啟動速度股囊,同時減小空間的占用
odex 文件依賴系統(tǒng)中已經編譯好的系統(tǒng)模塊袜匿,一般是 /system/framwork 目錄下的 jar 包,目的也是為了提高虛擬機的運行速度稚疹,可以說從 class 到 dex 是針對 Android 平臺的一種通用優(yōu)化沉帮,odex 是 dex 文件在不同手機上做的特殊優(yōu)化

為了反編譯 odex 我們需要準備以下工具

  • smali/baksmali
    baksmali-xxx.jar 將 odex 轉換為 smali 文件 (有興趣的可以了解一下 smali 語法)
    smali-xxx.jar 將 smali 文件打包成 dex 文件
  • dex2jar
    dex2jar 是將 dex 文件轉換為 jar
  • Java Decompiler
    這個工具是將 jar 里面你的 class 轉換為 java 文件,當然也可以不轉換贫堰,直接使用 jd-gui 程序打開 classes.jar 看里面的內容

這里下載的 smali 版本是 baksmali-2.1.3.jar 和 smali-2.1.3.jar穆壕,不同版本使用方法大同小異
開工,我們先建立一個工作目錄其屏,我這里是創(chuàng)建了一個 deodex 的目錄喇勋,然后把相關工具都放進去,因為反編譯 odex 需要依賴 /system/framework 目錄下的一些東西偎行,所以這里直接把整個 framewrok 目錄拉出來

$ mkdir deodex
$ cd deodex
$ adb pull /system/framework .

當然這一步不是必須的川背,如果在反編譯過程中沒有報缺失依賴文件的錯誤是不需要的
然后從系統(tǒng)目錄中拉出一個程序的 odex 如下

$ adb pull /system/app/LeEcoCircle/oat/arm/LeEcoCircle.odex .

目錄結構如下 (mac 下,目錄結構生成使用 tree 命令蛤袒,安裝:brew install tree熄云,然后在當前目錄執(zhí)行 tree 即可)

deodex
├── LeEcoCircle.odex
├── baksmali-2.1.3.jar
├── dex2jar-2.0
│   ├── ...
├── framework
│   ├── ...
├── jd-gui-osx-1.4.0
│   ├── ...
└── smali-2.1.3.jar

接下來開始反編譯,先使用如下命令

$ java -jar baksmali-2.1.3.jar -x LeEcoCircle.odex

-x 參數是指定 odex 文件
上面命令通常會報錯

Error occurred while loading boot class path files. Aborting.
org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/core.jar
...

意思是:找不到 /system/framework/core.jar 妙真,這個 jar 是在 /system/framework/arm/boot.oat 中缴允,當然 boot.oat 不只包含 core.jar ,還有 framework.jar 珍德,core-libart.jar 等一系列 jar所以我們將命令改變一下

$ java -jar baksmali-2.1.3.jar -x LeEcoCircle.odex -d framework/arm/ -c framework/arm/boot.oat

-d 參數 指定 bootclasspath 查找的目錄练般,如果不加這個參數,默認是當前目錄
-c 參數 指定 bootclasspath 中具體的 jar/oat 文件
此時锈候,命令不會報 Aborting 的錯薄料,可能會出現一些異常,某些函數不能被解析泵琳,但是還是能夠順利完成 odex 反編譯摄职,生成的 smali 文件放在了當前目錄的 out 目錄中
下一步就是將 smali 文件打包為 dex誊役,使用以下命令

$ java -jar smali-2.1.3.jar out -o classes.dex

會在當前目錄生成 classes.dex 文件,然后執(zhí)行下面命令來反編譯 dex 文件

$ cp classes.dex dex2jar-2.0
$ cd dex2jar-2.0
$ ./dex2jar.sh classes.dex 

完成后谷市,會在 dex2jar-2.0 目錄生成 classes-dex2jar.jar 接下來就可以使用 jd-gui 打開直接查看里面的內容了

上面反編譯 odex 是單 dex 的情形势木,如果這個 odex 是由多個 dex 優(yōu)化合成的產物的話,在 baksmali 命令中還需要加入 -e 參數來指定反編譯哪一個 dex歌懒,然后 -o 指定不同的輸出目錄啦桌,不同的目錄是為了生成對應的 dex 文件,如果把他們都輸出到同一個目錄及皂,在執(zhí)行 smali 命令時甫男,可能會失敗,比如:方法數超過 65k 等

參考資料
深入理解Android之Java虛擬機Dalvik 鄧凡平老師之作
convert odex file to dex file
DeodexInstructions

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末验烧,一起剝皮案震驚了整個濱河市板驳,隨后出現的幾起案子,更是在濱河造成了極大的恐慌碍拆,老刑警劉巖若治,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異感混,居然都是意外死亡端幼,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門弧满,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婆跑,“玉大人,你說我怎么就攤上這事庭呜』” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵募谎,是天一觀的道長扶关。 經常有香客問我,道長数冬,這世上最難降的妖魔是什么节槐? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮吉执,結果婚禮上疯淫,老公的妹妹穿的比我還像新娘。我一直安慰自己戳玫,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布未斑。 她就那樣靜靜地躺著咕宿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上府阀,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天缆镣,我揣著相機與錄音,去河邊找鬼试浙。 笑死董瞻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的田巴。 我是一名探鬼主播钠糊,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壹哺!你這毒婦竟也來了抄伍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤管宵,失蹤者是張志新(化名)和其女友劉穎截珍,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體箩朴,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡岗喉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了炸庞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沈堡。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖燕雁,靈堂內的尸體忽然破棺而出诞丽,到底是詐尸還是另有隱情,我是刑警寧澤拐格,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布僧免,位于F島的核電站,受9級特大地震影響捏浊,放射性物質發(fā)生泄漏懂衩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一金踪、第九天 我趴在偏房一處隱蔽的房頂上張望浊洞。 院中可真熱鬧,春花似錦胡岔、人聲如沸法希。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苫亦。三九已至毛肋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屋剑,已是汗流浹背润匙。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唉匾,地道東北人孕讳。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像巍膘,于是被迫代替她去往敵國和親厂财。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容