DEX文件解析---1、dex文件头解析
一、dex文件
dex文件是Android平台上可执行文件的一种文件类型。它的文件格式可以下面这张图概括:
dex文件头一般固定为0x70个字节大小,包含标志、版本号、校验码、sha-1签名以及其他一些方法、类的数量和偏移地址等信息。如下图所示:
二、dex文件头各字段解析
dex文件头包含以下各个字段:
magic:包含了dex文件标识符以及版本,从0x00开始,长度为8个字节
checksum:dex文件校验码,偏移量为:0x08,长度为4个字节。
signature:dex sha-1签名,偏移量为0x0c,长度为20个字节
file_szie:dex文件大小,偏移量为0x20,长度为4个字节
header_size:dex文件头大小,偏移量为0x24,长度为4个字节,一般为0x70
endian_tag:dex文件判断字节序是否交换,偏移量为0x28,长度为4个字节,一般情况下为0x78563412
link_size:dex文件链接段大小,为0则表示为静态链接,偏移量为0x2c,长度为4个字节
link_off:dex文件链接段偏移位置,偏移量为0x30,长度为4个字节
map_off:dex文件中map数据段偏移位置,偏移位置为0x34,长度为4个字节
string_ids_size:dex文件包含的字符串数量,偏移量为0x38,长度为4个字节
string_ids_off:dex文件字符串开始偏移位置,偏移量为0x3c,长度为4个字节
type_ids_size:dex文件类数量,偏移量为0x40,长度为4个字节
type_ids_off:dex文件类偏移位置,偏移量为0x44,长度为4个字节
photo_ids_size:dex文件中方法原型数量,偏移量为0x48,长度为4个字节
photo_ids_off:dex文件中方法原型偏移位置,偏移量为0x4c,长度为4个字节
field_ids_size:dex文件中字段数量,偏移量为0x50,长度为4个字节
field_ids_off:dex文件中字段偏移位置,偏移量为0x54,长度为4个字节
method_ids_size:dex文件中方法数量,偏移量为0x58,长度为4个字节
method_ids_off:dex文件中方法偏移位置,偏移量为0x5c,长度为4个字节
class_defs_size:dex文件中类定义数量,偏移量为0x60,长度为4个字节
class_defs_off:dex文件中类定义偏移位置,偏移量为0x64,长度为4个字节
data_size:dex数据段大小,偏移量为0x68,长度为4个字节
data_off:dex数据段偏移位置,偏移量为0x6c,长度为4个字节
三、dex文件头代码解析示例(python)
dex使用open函数以二进制打开文件,然后使用seek函数移动文件指针,例如magic就是f.seek(0x00),然后读取相应信息的字节数即可,例如读取版本号f.seek(0x04) f.read(4),然后做相应打印操作就行,dex文件头较简单,不涉及编码等,所以解析起来感觉脑子都不用带。。。。。具体代码可以看下面或者github,下面附上代码运行图: