App加固技術解析:DEX文件格式的詳解

Android應用的源代碼主要分爲java與C/C++兩部分,其中java編譯後的文件是DEX文件,也是Android Dalvik虛擬機運行的程序,所以也是基於Android平臺的虛機應用很難繞過的一種文件格式,重要性不言而喻。java

在頂象技術的 Android 加固解決方案中,有着DEX 殼保護、指令虛擬化(將DEX文件運行在自實現的虛擬機環境下)等技術。要想了解頂象技術的Android 加固解決方案如何幫助 Android 應用對抗逆向和破解,首先須要瞭解DEX文件究竟是什麼樣的。編碼

文件結構展現spa

圖片描述
圖片描述

文件結構詳解code

圖片描述

結構體定義圖片

文件頭( dex_header )。字符串

magic[8]:dex版本標識。這類字節必須出如今 .dex 文件的開頭,以便系統將其原樣識別。該值會特地包含一個換行符("n" 或
0x0a)和空字節("0" 或 0x00),以便協助檢測某些形式的損壞問題。該值還能夠將格式版本號編碼爲 3
個十進制數字;隨着格式的演變,預計該值會單調遞增。 checksum:能夠用於文件剩餘內容(除 magic 和此字段以外的全部內容)的
adler32 校驗和。另外,還能夠用於檢測文件損壞狀況。 signature[kSha1DigestSize]:文件剩餘內容(除
magic、checksum 和此字段以外的全部內容)的 SHA-1 簽名(哈希);用於對文件進行惟一標識。
file_size:整個文件(包括標頭)的大小,以字節爲單位。
header_size:標頭(整個區段)的大小,以字節爲單位。這一項容許至少必定程度的向後/向前兼容性,而沒必要讓格式失效。
endian_tag:字節序標記。ENDIAN_CONSTANT ,表示小端字節序。 REVERSE_ENDIAN_CONSTANT
表示大端字節序,默認值爲 ENDIAN_CONSTANT 。 link_size 與 link_off
:連接區段的大小與文件偏移。若是此文件未進行靜態連接,則兩個值都爲0。 map_off:從文件開頭到映射項列表的文件偏移量。
string_ids_size 與 string_ids_off:字符串標識符列表中的字符串數量與文件偏移。 type_ids_size 與
type_ids_off:類型標識符列表中的元素數量及文件偏移。元素數量上限爲65535。 proto_ids_size 與
proto_ids_off:原型標識符列表中的元素數量及文件偏移。元素數量上限爲65535。 field_ids_size 與
field_ids_off:字段標識符列表中的元素數量及文件偏移。 method_ids_size 與
method_ids_off:方法標識符列表中的元素數量及文件偏移。 class_defs_size 與
class_defs_off:類定義列表中的元素數量及文件偏移。 data_size 與 data_off :data區段的大小及文件偏移。

字符串標識符列表( dex_string_ids )在DEX文件以 DexStringId[] 的形式存在,其結構以下。原型

圖片描述

類型標識符列表( dex_type_ids )在DEX文件以 DexTypeId[] 的形式存在,其結構以下。虛擬機

圖片描述

方法原型標識符列表( dex_proto_ids )在DEX文件以 DexProtoId[] 的形式存在,其中 DexProtoId 結構以下。string

圖片描述

DexTypeList 結構以下。it

圖片描述

字段標識符列表( dex_field_ids )在DEX文件以 DexFieldId[] 的形式存在,其中 DexFieldId 結構以下。

圖片描述

方法標識符列表( dex_method_ids ) 在DEX文件以 DexMethodId[] 的形式存在,其中 DexMethodId 結構以下。

圖片描述

類定義列列表( dex_class_defs )在DEX文件以 DexClassDef[] 的形式存在,其中 DexClassDef 結構以下。

圖片描述

映射項列表( dex_map_list ) 在DEX文件以 DexMapItem[] 的形式存在,其中 DexMapItem 結構以下。

圖片描述

類型代碼表如圖所示。

圖片描述

因爲篇幅限制,小象將在第二篇文章中繼續解析DEX文件的DexAnnotationsDirectoryItem 、 DexClassData 與 DexEncodeArray 結構,請繼續關注。

相關文章
相關標籤/搜索