顶象App加固技术解析:DEX文件格式的详解

栏目: IOS · Android · 发布时间: 6年前

内容简介:Android应用的源代码主要分为java与C/C++两部分,其中java编译后的文件是DEX文件,也是Android Dalvik虚拟机运行的程序,因此也是基于Android平台的虚机应用很难绕过的一种文件格式,重要性不言而喻。在顶象技术的 Android 加固解决方案中,有着DEX 壳保护、指令虚拟化(将DEX文件运行在自实现的虚拟机环境下)等技术。要想了解顶象技术的Android 加固解决方案如何帮助 Android 应用对抗逆向和破解,首先需要了解DEX文件到底是什么样的。DEX文件格式

Android应用的源代码主要分为 java 与C/C++两部分,其中java编译后的文件是DEX文件,也是Android Dalvik虚拟机运行的程序,因此也是基于Android平台的虚机应用很难绕过的一种文件格式,重要性不言而喻。

顶象App加固技术解析:DEX文件格式的详解

在顶象技术的 Android 加固解决方案中,有着DEX 壳保护、指令虚拟化(将DEX文件运行在自实现的虚拟机环境下)等技术。要想了解顶象技术的Android 加固解决方案如何帮助 Android 应用对抗逆向和破解,首先需要了解DEX文件到底是什么样的。

文件结构展示

顶象App加固技术解析:DEX文件格式的详解

DEX文件格式

顶象App加固技术解析:DEX文件格式的详解

DEX文件在010中的表现

文件结构详解

顶象App加固技术解析:DEX文件格式的详解

结构体定义

文件头( dex_header )。

  • magic[8]:dex版本标识。这类字节必须出现在 .dex 文件的开头,以便系统将其原样识别。该值会特意包含一个换行符("\n" 或 0x0a)和空字节("\0" 或 0x00),以便协助检测某些形式的损坏问题。该值还可以将格式版本号编码为 3 个十进制数字;随着格式的演变,预计该值会单调递增。
  • checksum:可以用于文件剩余内容(除 magic 和此字段之外的所有内容)的 adler32 校验和。另外,还可以用于检测文件损坏情况。
  • signature[kSha1DigestSize]:文件剩余内容(除 magic、checksum 和此字段之外的所有内容)的 SHA-1 签名(哈希);用于对文件进行唯一标识。
  • file_size:整个文件(包括标头)的大小,以字节为单位。
  • header_size:标头(整个区段)的大小,以字节为单位。这一项允许至少一定程度的向后/向前兼容性,而不必让格式失效。
  • endian_tag:字节序标记。ENDIAN_CONSTANT ,表示小端字节序。
  • REVERSE_ENDIAN_CONSTANT 表示大端字节序,默认值为 
  • ENDIAN_CONSTANT 。
  • link_size 与 link_off :链接区段的大小与文件偏移。如果此文件未进行静态链接,则两个值都为0。
  • map_off:从文件开头到映射项列表的文件偏移量。
  • string_ids_size 与 string_ids_off:字符串标识符列表中的字符串数量与文件偏移。
  • type_ids_size 与 type_ids_off:类型标识符列表中的元素数量及文件偏移。元素数量上限为65535。
  • proto_ids_size 与 proto_ids_off:原型标识符列表中的元素数量及文件偏移。元素数量上限为65535。
  • field_ids_size 与 field_ids_off:字段标识符列表中的元素数量及文件偏移。
  • method_ids_size 与 method_ids_off:方法标识符列表中的元素数量及文件偏移。
  • class_defs_size 与 class_defs_off:类定义列表中的元素数量及文件偏移。
  • data_size 与 data_off :data区段的大小及文件偏移。

字符串标识符列表( dex_string_ids )在DEX文件以 DexStringId[] 的形式存在,其结构如下。

顶象App加固技术解析:DEX文件格式的详解

类型标识符列表( dex_type_ids )在DEX文件以 DexTypeId[] 的形式存在,其结构如下。

顶象App加固技术解析:DEX文件格式的详解

方法原型标识符列表( dex_proto_ids )在DEX文件以 DexProtoId[] 的形式存在,其中 DexProtoId 结构如下。

顶象App加固技术解析:DEX文件格式的详解

DexTypeList 结构如下。

顶象App加固技术解析:DEX文件格式的详解

字段标识符列表( dex_field_ids )在DEX文件以 DexFieldId[] 的形式存在,其中 DexFieldId 结构如下。

顶象App加固技术解析:DEX文件格式的详解

方法标识符列表( dex_method_ids ) 在DEX文件以 DexMethodId[] 的形式存在,其中 DexMethodId 结构如下。

顶象App加固技术解析:DEX文件格式的详解

类定义列列表( dex_class_defs )在DEX文件以 DexClassDef[] 的形式存在,其中 DexClassDef 结构如下。

顶象App加固技术解析:DEX文件格式的详解

映射项列表( dex_map_list ) 在DEX文件以 DexMapItem[] 的形式存在,其中 DexMapItem 结构如下。

顶象App加固技术解析:DEX文件格式的详解

类型代码表如图所示。

顶象App加固技术解析:DEX文件格式的详解

由于篇幅限制,小象将在第二篇文章中继续解析DEX文件的DexAnnotationsDirectoryItem 、 DexClassData 与 DexEncodeArray 结构,请继续关注。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First Design Patterns

Head First Design Patterns

Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson / O'Reilly Media / 2004-11-1 / USD 49.99

You're not alone. At any given moment, somewhere in the world someone struggles with the same software design problems you have. You know you don't want to reinvent the wheel (or worse, a flat tire),......一起来看看 《Head First Design Patterns》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具