当前位置: 首页 > Web前端 > HTML5

应用加固技术解析:DEX文件格式详解

时间:2023-04-05 11:09:27 HTML5

Android应用的源码主要分为java和C/C++两部分。基于Android平台的虚拟机应用难以绕过的一种文件格式,其重要性不言而喻。DEXshell保护、命令虚拟化(在自己实现的虚拟机环境中运行DEX文件)等技术都包含在顶影科技的Android加固方案中。要想了解顶尖图像技术的Android加固方案是如何帮助Android应用抵御逆向和破解的,首先需要了解DEX文件长什么样子。文件结构显示文件结构定义文件头(dex_header)的详细结构。magic[8]:dex版本识别。这些字节必须出现在.dex文件的开头,以便系统按原样识别它们。该值有意包含换行符(“n”或0x0a)和空字节(“0”或0x00)以帮助检测某些形式的损坏。该值还可以将格式版本号编码为3个十进制数字;随着格式的发展,该值预计会单调增加。校验和:可用于文件其余部分的adler32校验和(除magic和此字段外的所有内容)。此外,它还可用于检测文件损坏。signature[kSha1DigestSize]:文件剩余内容的SHA-1签名(散列)(除了magic、checksum和此字段之外的所有内容);用于唯一标识文件。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:proto标识符列表中的元素个数和文件偏移量。最大元素个数为65535。field_ids_size和field_ids_off:字段标识符列表的元素个数和文件偏移量。method_ids_size和method_ids_off:方法标识符列表中的元素个数和文件偏移量。class_defs_size和class_defs_off:类定义列表中的元素个数和文件偏移量。data_size和data_off:数据段的大小和文件偏移量。字符串标识符列表(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)以DexMapItem[]的形式存在于DEX文件中,其中DexMapItem的结构如下。型号代码表如图所示。限于篇幅,小象会在第二篇继续分析DEX文件的DexAnnotationsDirectoryItem、DexClassData和DexEncodeArray结构,请继续关注。