逆向学习笔记(4)-Dex文件结构

  • A+
所属分类:笔记

1. dex文件是啥?

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

2. dex文件结构

逆向学习笔记(4)-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;                     /* 数据段的文件偏移 */
};

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: