-
-
安卓 dex 学习
-
发表于: 2021-3-1 23:08 3600
-
dex文件分为三大块
dex文件头
- 字段1 dex_magic ,表示dex文件的文件表示,特征字符串
- 字段2 checksum,表示校验和,对文件求32位的hash值(从字段3到文件末尾)
- 字段3 signature[] ,表示SHA1,对文件求hash值(从字段4到文件末尾)
- 字段4 file_size,表示文件大小
字段2和字段3 就是确保dex 完整。改变dex,需更新这两个字段 - 字段5 dex文件头大小
字段6: 数据排列方式-小端方式
1dex 文件orpe文件数据格式都是小端方式保存;网络传输都是大端方式传输,使用小端主要原因是为了保存数据类型各种表的大小以及偏移
- string_ids_size 和string_ids_off,字符串表的大小和偏移
- type_ids_size和 type_ids_off 类型表的大小和偏移
- proto_ids_size 和proto_ids_off 原型表的大小和偏移
- field_ids_size 和field_ids_off,字段表的大小和偏移
- method_ids_size和method_ids_off 方法表的大小和偏移
- class_defs_size 和 class_defs_off 类数据的大小和偏移
各种数据的数组,包括字符串、类型、方法原型、字段、方法
1dex 文件,例如,名称等字符串,用数组的方式保存到一起,使用的时候使用数组的索引。- 字符串表dex_string_ids
字符串表项,是一个字符串数据的偏移string_data_off,偏移指向的是一个string_data 结构。
string_data 结构中有两个字段:
- 字段1:代表长度,数据类型是uleb128,变长的数据类型(1-5字节)
- 字段2:存储数据,字符串以0结尾
类型表dex_type_ids
类型表表项,是一个索引值,存放的是字符串表数组下标。
类型描述符包括基本数据类型的描述符和类类型的描述符。
LHelloworld;是HelloWorld类的类描述符。原型表 (方法原型)
12原型表项存储的是函数原型的各部分描述信息。包括短类型(shorty_idx)、返回类型(return_type_idx)、参数的类型(parameters_off) 最终还是一个指向字符串表的数组下标注:字段为返回类型(return_type_idx)的值,是类型表中的索引,无双引号;短类型是字符串,有双引号,是字符串的索引字段表(类成员)
1字段表项中内容存储的是字段的信息。包括字段所在类(class_idx)、字段的类型(type_idx)、字段的名称(name_idx),class_idx是类型表中的索引,type_idx是类型表中的索引,字段名称的索引是字符串表的数组下标
- 字符串表dex_string_ids
- 方法表(类方法)1
方法表项存储的是方法的信息,包括方法所在的类(class_idx)、方法的原型(proto_idx)、方法的名称(name_idx),其中class_idx是类型表中的索引,proto_idx是原型表的索引,方法名称是字符床表数组的下标
类数据
1类数据也是一个数组,每一个元素就是一个类的相关信息。- 不重要的信息12
所在的类class_idx,父类superclass_idx,接口 interface_off,访问权限access_flags类名索引,访问flags,父类索引,接口偏移,源码索引,注解偏移,类数据偏移 数据保存在,class_data
1234567891011121314151617这个结构存放fields字段和method方法对我们重要的是类方法查找:class_data->encoded_method method->code_item code->insns_size 指令长度insns[] 指令简单分析一些指令转smali代码:需要查dalvik操作码1、62000000-> sget-objectv0,field[0]//字段表索引0sget-objectv0,out名称:out类型:java.io.PrintStream所在类:java.lang.Systemsmali: sget-objectv0,Ljava/lang/System;->out:Ljava.io.PrintStream;2、1A010000const-string v1,string[0]//字符串表索引0const-string v1,“Hello world”3、6E5306000421-invoke-virtual {v4,v0,v1,v2,v3},Test2.method5:(IIII)V;
- 不重要的信息
- 其它1
http://androidxref.com 安卓源码下载
赞赏
他的文章
- [原创]CVE-2013-4730 缓冲溢出漏洞研究 6721
- [原创]windows 调试与异常的简单梳理 4937
- 安卓 dex 学习 3601
- [原创]简单分析病毒样本-永恒之蓝WannaCry 7315
赞赏
雪币:
留言: