Andoird Apps Reverse Engineering IV: DEX - Dalvik VM excutes

.dex文件作爲Dalvik VM的可執行文件,是我們分析的核心。我們先來看看對於一個apk它的打包過程是如何的。上節我們說了大致流程,現在我們來看下詳細流程

安裝過程是如何的(略)。

現在我們來詳細看看一個dex文件的組成。

string_ids 到class_def皆爲索引,真實的數據存放在data區,link_data爲靜態鏈接數據區(目前爲空,預留)。

其中DexHeader定義如下:



我們可以看到其中包含了mapOff,它指明瞭DexMapList在dex文件中的位置(offset)。Dalvik VM解析出的dex文件內容最終都將被映射到DexMapList這個數據結構中去。其聲明如下:

struct DexMapList {
    u4 size;
    DexMapItem list[1];
};

size表示接下來將有多少個DexMapItem,其聲明如下
struct DexMapItem {
u2 type;
u2 unused; // 用於對齊
u4 size;
u4 offset;
};
type可能的類型如下:


其中ProtoId表示general method類型的索引,用於後面的TypeMethodId進一步的索引。在ubuntu下可以用bless hex editor來對dex進行閱讀。

對於個多細節就不在這裏敷述了,有興趣的讀者請去查閱非蟲的書。


Odex - Optimized DEX

Andoird 的apk文件爲zip壓縮包格式,Dalvik VM每次加載app時需要從apk中提取classes.dex文件,會耗費很多CPU資源。而採用odex方式優化的dex文件已經包含了加載dex所必須的依賴庫文件列表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章