Apk解析之 —— classes.dex
来源:互联网 发布:阿里云maven镜像配置 编辑:程序博客网 时间:2024/06/07 09:43
本篇解析classes.dex文件,参考文章:Reference
项目源码:ApkParser
Dex文件结构
type_ids
proto_ids
field_ids
method_ids 数据区 class_defs
data
link_data
一、头部信息Header结构
头部信息除了dex文件的文件信息外,还有文件里其他区域的索引。
alder32
算法校验文件除去 maigc,checksum 外余下的所有文件区域 ,用于检查文件错误 4B signature SHA-1算法出去magic,checksum,signature外余下的所有文件区域,用于唯一标识本文件 4B fileSize Dex 文件的大小 4B headerSize header 区域的大小,一般固定为0x70常量 4B endianTag 大小端标签 ,标准.dex文件格式为小端
4B 固定为0x12345678 linkSize 链接数据的大小 4B linkOff 链接数据的偏移 4B mapOff map item的偏移地址,该item属于data区里的内容,值要大于等于data_off的大小 4B stringIdsSizestringIdsOff dex中用到的所有的字符串内容的大小和偏移值 4B+4B typeIdsSize
typeIdsOff dex中的类型数据结构的大小和偏移值,比如类类型,基本类型等信息 4B+4B protoIdsSize
protoIdsOff dex中的元数据信息数据结构的大小和偏移值,描述方法的元数据信息,比如方法的返回类型,参数类型等 4B+4B filedIdsSize
filedIdsOff dex中的字段信息数据结构的大小和偏移值 4B+4B methodIdsSize
methodIdsOff dex中的方法信息数据结构的大小和偏移值 4B+4B classDefsSize
classDefsOff dex中的类信息数据结构的大小和偏移值,这个数据结构是整个dex中最复杂的数据结构 4B+4B dataSize
dataOff dex中数据区域的结构信息的大小和偏移值,这个结构中存放的是数据区域,比如我们定义的常量值等 4B+4B
二、string_ids数据结构
头部的stringIdsOff指向了实际的全局String数据区,数据区开始的位置保存了StringDataItem的索引地址数组,每个StringDataItem又包含了String的长度(LEB128编码)和String的内容。这个数据池是全局公用的。
三、type_ids数据结构
这个数据结构中存放的数据主要是描述dex中所有的类型,比如类类型,基本类型等信息。type_ids 区索引了 dex 文件里的所有数据类型 ,包括 class 类型 ,数组类型(array types)和基本类型(primitive types) 。
四、proto_ids数据结构
proto 的意思是 method prototype 代表 java 语言里的一个 method 的原型 。
原型用于描述方法的返回参数和入参的组成成分,shorty指向的字符串格式如:返回值+入参列表
// shorty指向的原型字符串,每个类型都是用单字母标识:如L表示类,I标识int,V标识void,Z表示booleanLI(I)[Landroid/support/v7/widget/Toolbar$SavedState; -> LIL()[Landroid/view/Display; -> LVL(Landroid/support/v4/media/MediaBrowserServiceCompat;)V ->VL
五、field_ids数据结构
filed_ids 区里面存放的是dex 文件引用的所有的 field
六、method_ids数据结构
method_ids 是索引区的最后一个条目 ,它索引了 dex 文件里的所有的 method.
七、class_defs数据结构
7.1 class_def_item -> class_data_item
class_data_item 里存放着本 class 使用到的各种数据
7.2 encoded_field
7.3 encoded_method
7.4 code_item
7.5 interfaces_off -> type_list
八、END
.
阅读全文
0 0
- Apk解析之 —— classes.dex
- 4.0 编译apk中无classes.dex
- apk的classes.dex的校检
- 使用dex2jar反编译APK中的classes.dex
- python获取apk内classes.dex文件
- 利用ant和dedex解析classes.dex
- Android逆向之旅---解析编译之后的classes.dex文件格式
- apk文件中的classes.dex逆向成java源码
- 系统apk安装出现 does not include classes.dex
- 4.0 编译apk中无classes.dex问题解决方法
- 批量提取出apk文件中的classes.dex文件
- Dex文件内容解析APK相关信息
- Apk解析之 —— resource.arsc
- Apk解析之 —— AndroidManifest.xml
- apk加固原理之dex加密
- APK防护之DEX文件加花
- classes.dex汉化
- Android classes.dex 反编译
- 第十五节Map和File
- SpringCloud(第 020 篇)Zuul 网关模块添加 listOfServers 属性,达到客户端负载均衡的能力
- Summation Prove (Intro. to Algo. Open Course Episode 5) in Quick Sort
- Noip提高组 2014 Day1 T2 联合权值 模拟
- NCRE——网络工程师——操作系统
- Apk解析之 —— classes.dex
- javascript获取select的value值
- 机器学习算法-PageRank(排序)
- python-环境配置
- 设计模式
- python一维插值以及subplot画图范例
- 人月神话读后感<二>
- 廖雪峰python学习笔记(2——函数)
- 计算机四级知识点(转)