2015年11月18日
解析 dex 文件结构 - map_list
什么是 map_list?
整个 dex 文件的内容清单,位于数据段内,其文件偏移由 DexHeader 中的 mapOff 字段指定。
更加具体的解释在下面的 type 段落部分。
结构
来到 mapOff 指定的偏移处,首先是 DexMapList 结构,存储了 map_list 内 map_item (DexMapItem) 的个数和内容,也就是说在 size 之后,有 size 个DexMapItem 类型的数据。
DexMapList
|
|
DexMapItem
|
|
type
在这些类型中,除了 0x0000 表示的就是 DexHeader 本身之外,0x0001 ~ 0x1000 部分与 DexHeader 中定义的类型是一致的;
而 0x1001 ~ 0x2006 部分是对 data 段的细分。
这样设计可以作为一种文件检验方式,一旦和 DexHeader 的数据有所不同就可以判定该 dex 是损坏的;而且 map_list 部分的内容更详细,以此作为整个文件的索引想必是极好的。
下面手动查找的例子可以证明。
|
|
手工查找
某 dex 文件的 map_list 部分:
|
|
前 4 字节表明接下来会有 0x00000010
个 DexMapItem 结构;
序数 | binary | type | size | offset |
---|---|---|---|---|
0x01 | 00 00 00 00 01 00 00 00 00 00 00 00 | kDexTypeHeaderItem | 0x01 | 0x0 |
0x02 | 01 00 00 00 5c 00 00 00 70 00 00 00 | kDexTypeStringIdItem | 0x5c | 0x70 |
0x03 | 02 00 00 00 19 00 00 00 e0 01 00 00 | kDexTypeTypeIdItem | 0x19 | 0x1e0 |
0x04 | 03 00 00 00 12 00 00 00 44 02 00 00 | kDexTypeProtoIdItem | 0x12 | 0x244 |
0x05 | 04 00 00 00 01 00 00 00 1c 03 00 00 | kDexTypeFieldIdItem | 0x01 | 0x3c1 |
0x06 | 05 00 00 00 2b 00 00 00 24 03 00 00 | kDexTypeMethodIdItem | 0x2b | 0x324 |
0x07 | 06 00 00 00 02 00 00 00 7c 04 00 00 | kDexTypeClassDefItem | 0x02 | 0x47c |
0x08 | 02 20 00 00 5c 00 00 00 bc 04 00 00 | kDexTypeStringDataItem | 0x5c | 0x4bc |
0x09 | 01 10 00 00 0a 00 00 00 f8 09 00 00 | kDexTypeTypeList | 0x0a | 0x9f8 |
0x0a | 04 20 00 00 01 00 00 00 4e 0a 00 00 | kDexTypeAnnotationItem | 0x01 | 0xa4e |
0x0b | 03 10 00 00 02 00 00 00 58 0a 00 00 | kDexTypeAnnotationSetItem | 0x02 | 0xa58 |
0x0c | 06 20 00 00 01 00 00 00 64 0a 00 00 | kDexTypeAnnotationsDirectoryItem | 0x01 | 0xa64 |
0x0d | 03 20 00 00 09 00 00 00 7c 0a 00 00 | kDexTypeDebugInfoItem | 0x09 | 0xa7c |
0x0e | 01 20 00 00 09 00 00 00 10 0c 00 00 | kDexTypeCodeItem | 0x09 | 0xc10 |
0x0f | 00 20 00 00 02 00 00 00 c2 0f 00 00 | kDexTypeClassDataItem | 0x02 | 0xfc2 |
0x10 | 00 10 00 00 01 00 00 00 00 10 00 00 | kDexTypeMapList | 0x01 | 0x1000 |
这里的各项值可以和上一节 解析 dex 文件结构 - DexHeader 手动查找部分中的数据进行比对,发现是相同的。
写程序解析 map_list
|
|
Reference
来源 :
http://kiya.studio
著作权归作者所有,转载请联系作者获得授权。