您的当前位置:首页正文

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

2024-11-26 来源:个人技术集锦

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

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

文件结构展示


文件结构详解

结构体定义

文件头( dex_header )。

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

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

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

DexTypeList 结构如下。

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

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

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

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

类型代码表如图所示。

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

显示全文