Dex文件结构

1. dex文件是啥?

dex文件也即Android的可执行文件,包含应用程序的全部操作指令以及运行时数据,在Android逆向工程中对app的逆向也就是分析dex文件,因为dex里面包含了所有app代码,利用反编译工具可以获取java源码,理解并修改dex文件,就能更好的实现apk破解和防破解。注:.class运行在PC上的java虚拟机,.dex运行在Android上的Davlik虚拟机。

2. dex文件结构

数据名称说明
Headerdex文件头部,记录整个dex文件的相关属性
String_ids字符串数据索引,记录了每个字符串在数据区的偏移量
Type_ids类似数据索引,记录了每个类型的字符串索引
Proto_ids原型数据索引,记录了方法声明的字符串,返回类型字符串,参数列表
Field_ids字段数据索引,记录了所属类,类型以及方法名
Method_ids类方法索引,记录方法所属类名,方法声明以及方法名等信息
Class_defs类定义数据索引,记录指定类各类信息,包括接口,超类,类数据偏移量
Data数据区,保存了各个类的真实数据
Link_data连接数据区

3. Header

字段说明
magic魔数字段,值为"dex\n035\0"
checksum校验码,检验dex文件完整性
signaturesha-1签名
file_sizedex文件总长度
header_size文件头长度
endian_tag标示字节顺序的常量
link_size链接段的大小,如果为0就是静态链接
link_off链接段的开始位置
map_offmap数据基址

DexHeader定义如下:

struct DexHeader {
    u1 magic[8];                    /* DEX版本标识 */
    u4 checksum;                    /* adler32检验 */
    u1 signature [kSHAlDigestlen];    /* SHA-1散列值 */
    u4 fileSize;                    /* 整个文件的大小 */
    u4 headerSize;                  /* DexHeader结构的大小 */
    u4 endianTag;                   /* 字节序标记 */
    u4 linkSize;                    /* 链接段的大小 */
    u4 linkOff;                     /* 链接段的偏移量 */
    u4 mapOff;                      /* DexMaplist的文件偏移 */
    u4 stringidsSize;                /* DexStringId的个数 */
    u4 stringidsOff;                /* DexstringId的文件偏移 */
    u4 typeIdsSize;                 /* DexTypeId的个数 */
    u4 typeIdsOff;                  /* DexTypeId的文件偏移 */
    u4 protoIdsSize;                /* DexProtoId的个数 */
    u4 protoIdsOff;                 /* DexProtoId的文件偏移 */
    u4 fieldIdsSize;                /* DexFieldId的个数 */
    u4 fieldIdsOff;                 /* DexFieldId的文件偏移 */
    u4 methodIdsSize;               /* DexMethodId的个数 */
    u4 methodIdsOff;                /* DexMethodId的文件偏移 */
    u4 classDefsSize;               /* DexClassDef的个数 */
    u4 classDefsOff;                /* DexClassDef的文件偏移 */
    u4 dataSize;                    /* 数据段的大小 */
    u4 dataOff;                     /* 数据段的文件偏移 */
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿航的博客

我比你有钱,请不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值