CN106815301A - 一种dex文件的存储方法和装置 - Google Patents
一种dex文件的存储方法和装置 Download PDFInfo
- Publication number
- CN106815301A CN106815301A CN201611139089.5A CN201611139089A CN106815301A CN 106815301 A CN106815301 A CN 106815301A CN 201611139089 A CN201611139089 A CN 201611139089A CN 106815301 A CN106815301 A CN 106815301A
- Authority
- CN
- China
- Prior art keywords
- data
- internal memory
- dex files
- header
- dex
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例中公开了一种dex文件的存储方法和装置,属于应用程序安全防护技术领域。所述方法包括:解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。采用本发明实施例中所提供的方法和装置,解决了现有技术中能够从内存中提取完整dex文件的问题,有效避免了dex文件的动态反编译,提高了dex文件动态加载的安全性。
Description
技术领域
本发明涉及应用程序安全防护技术领域,具体涉及一种dex文件的存储方法和装置。
背景技术
随着Android系统的快速发展和及设备的高速增长,基于Android的平台应用需求也越来越复杂。形形色色的应用软件壮大了Android市场,也丰富了我们的生活,越来越多的人从起初的尝试到享受再到依赖,Android应用越来越广泛。与其它操作系统相比,Android系统的开源性为应用开发者提供了更多的功能接口,但这些功能接口在提高系统可扩展性的同时也为恶意软件提供了遍历,非法拷贝、反编译、内存截取等手段不断威胁着安卓系统的安全,不仅危害了使用者,也给正常应用开发者造成了严重的损害。因此,Android应用安全性一直是开发者所关注的重点问题。
对Android应用进行加固防护的主要目的均是为了防止其java字节码文件classes.dex文件被获取,在Android平台安装运行APK文件时,都必须将dex文件释放到内存,如图1中所示,为安卓dex文件的结构示意图,在dex文件加载时,根据文件头header中定义的其它结构的偏移地址和长度信息进行寻址解析(图中箭头所示),将其它结构中的数据加载分别加载到内存中,加载后的dex文件的内容是存放在内存中的一端连续的内存空间中的,因此,破解者只需要获取到classes.dex文件的起始地址,然后从起始地址开始dump(提取)文件总长度filesize大小的内容,即可提取得到完整的classes.dex文件的内容,进而可以进一步还原出APK文件的源代码,使得应用程序很容易被篡改。
发明内容
针对现有技术中存在的缺陷,本发明实施例的目的在于提供一种能够克服上述问题或者至少能够部分地解决上述问题的一种dex文件的存储方法和装置。
为实现上述目的,本发明的一个实施例中提供了一种dex文件的存储方法,该方法包括:
解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
优选的,如上所述的方法,完成文件头header中所述第一指定数据的偏移地址的修改后,还包括:
根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
优选的,如上所述的方法,所述第一指定数据包括以下几种数据中的至少一种:
字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
优选的,如上所述的方法,所述第一内存为一段连续的内存空间。
优选的,如上所述的方法,所述第一指定数据的种类大于一种,所述第一内存至少包括两段不连续的内存空间,不连续的第一内存空间的段数不大于第一指定数据的种类数。
优选的,如上所述的方法,完成解析后的dex文件的加载后,还包括:
删除所述第二内存中的dex文件的文件头header中的第二指定数据。
优选的,如上所述的方法,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
本发明的实例中还公开了一种dex文件的存储装置,该装置包括:
指定数据提取模块,用于解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
内存申请模块,用于申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
文件头修改模块,用于根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
优选的,如上所述的装置,还包括:
Dex内存加载模块,用于在完成文件头header中所述第一指定数据的偏移地址的修改后,根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
优选的,如上所述的装置,所述第一指定数据包括以下几种数据中的至少一种:
字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
优选的,如上所述的装置,所述第一内存为一段连续的内存空间。
优选的,如上所述的装置,所述内存申请模块包括:
多内存申请单元,用于在所述第一指定数据的种类大于一种时,申请至少两段不连续的内存空间,其中,不连续的第一内存空间的段数不大于第一指定数据的种类数。
优选的,如上所述的装置,还包括:
文件头数据删除模块,用于在完成解析后的dex文件的加载后,删除所述第二内存中的dex文件的文件头header中的第二指定数据。
优选的,如上所述的装置,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
本发明的有益效果在于:本发明实施例中所提供的dex文件的存储方法和装置,通过将dex文件中的数据分别存储到不同的内存空间中,解决了现有技术中通过dex内存提取工具即dexdump工具从dex文件的起始地址提取大小为dex文件总大小的数据,来提取到完整dex文件的问题,该方案由于无法提取到完整的dex内容,防止了从内存中提取dex文件,有效避免了dex文件的动态反编译,提高了dex文件动态加载的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,附图仅限于示出优选实施方式的目的,而并不认为是本发明的限制,且对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为安卓的classes.dex文件的结构示意图;
图2为本发明一个实施例中的一种dex文件的存储方法的流程示意图;
图3为本发明的一个实施例中一种dex文件的存储方法的流程示意图;
图4为本发明一个实施例中将dex文件存储到内存后的dex文件的结构示意图;
图5为本发明一个实施例中的一种dex文件的存储方法的流程示意图;
图6为本发明一个实施例中一种dex文件的存储装置的结构示意图;
图7为本发明一个实施例中一种dex文件的存储装置的结构示意图;
图8为本发明一个实施例中一种dex文件的存储装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均属于本发明保护的范围。
图2示出了本发明的一个实施例中提供的一种dex文件的存储方法的流程示意图,该方法主要可以包括以下步骤:
步骤S110:解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
步骤S120:申请不连续的第一内存空间和第二内存空间,第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;
步骤S130:根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
为了实现安卓classes.dex文件的动态加载,首先需要将dex文件进行底层的解析与加载,将dex文件的各部分内容加载到内存中,再通过底层与上层之间的通信调用,由dex类加载器完成上层的dex文件的动态加载。
dex文件的文件组成主要包括dex文件头header、索引区和数据区三个大部分,索引区即图中所示的字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids和类列表区段class_defs,数据区即数据区区段data。
为了描述方便,本实施例中,将dex文件分为了文件头header和非文件头header两大部分。
为了避免dex文件加载到内存后存放在一段连续的内存空间中,以至于能够从dex文件的起始地址提取到完整的dex文件,本实施例中,首先解析待加载的dex文件后,提取出dex文件的非文件头header中的第一指定数据,即提取索引区和/或数据区中的指定数据段,并申请空间不连续的第一内存和第二内存,其中,第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据。
为了保证后续能够实现dex文件的正常解析与加载,在完成第一内存和第二内存的申请后,根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向所述第一内存。通过该方式,在将dex文件的各部分内容加载到内存中时,便可以根据修改后的文件头header中各部分的偏移地址和数据长度信息等,完成dex向内存中的加载。
本实施例中所提供的所述dex文件的存储方法,通过为dex文件中的内容分配两块独立的内存空间,在加载时,将所述指定数据和其它数据分别加载到不同的独立内存中,使得即使通过dex文件的起始地址提取dex文件中大小filesize大小的数据,也只能够得到第二内存中的dex数据,并不能得到所述第一指定数据,因此无法得到完整的dex文件,避免了dex文件被提取和篡改。
在本发明的一个实施例中,所述第一指定数据包括以下几种数据中的至少一种:字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
即所述第一指定数据可以为非文件头header中的任意部分,第一指定数据可以根据实际需要进行选择,可以是一种或多种,如可以只是字符串列表区段string_ids,也可以是上述字段中的所有数据。
在本发明的一个实施例中,所述第一内存的个数可以为一段连续的内存空间一个,即无论指定数据是一种还是多种,所提取出的第一指定数据加载时均加载到一段块连续第一内存空间中。
在本发明的另一个实施例中,若所述第一指定数据的种类大于一种,所述第一内存可以至少包括两段不连续的内存空间,不连续的第一内存空间的段数不大于第一指定数据的种类数。
即当第一指定数据的种类为两种或者两种以上时,可以根据数据的种类数分配段数小于第一数据种类数的若干个不连续的内存空间,将第一指定数据分开存储于多段不连续的内存空间中,具体将哪种或哪几种存于哪一段内存空间中,可以根据需要设定。在本发明的一个实施例中,不连续的第一内存空间的段数等于所述第一指定数据的种类数,此时,每一个种类的数据分别对应于各自独立的一段第一内存中,进一步提高了从内存中dump完整dex文件的难度。
该实施例中,所述根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存,指的即是分别修改文件头中每种第一指定数据的偏移地址,使每种第一指定数据的偏移地址指向各自对应的第一内存。
需要的说明的是,本实施例中,所述种类是指dex文件中的区段,一个区段中的记为一个种类。如第一指定数据为字符串列表区段string_ids和数据类型列表区段type_ids,则第一指令数据为两种。
在本发明的一个实施例中,如图3所示,所述dex文件的存储方法还可以包括:
步骤S140:根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
通过该步骤,完成了dex文件中各部分内容向内存的加载。由于第一指定数据部分和其它数据部分分别加载到了不连续的第一内存空间和第二内存空间中,因此,dex文件内存提取工具即dexdump工具无法根据dex文件的起始地址和文件大小从内存中提取到完整的dex文件。
图4示出了本发明一个实施例中第一指定数据加载到内存中的结构示意图,该实施例中,所述第一指定数据包括了除文件头header区段外的所有其他区段中的全部数据,即包括了字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs和数据区区段data,此时,第一指定数据共包括了7个数据区段,因此,可以申请七块第一内存空间,每个区段的数据对应一个内存空间,完成内存空间的申请与分配后,根据分配结果修改文件头中各数据区段对应的偏移地址,使各区段的偏移地址Off分别指向各自的内存地址,如图4中所示。之后,在将dex文件加载到各自独立的内存中时,便可以根据修改后的文件头header中对应各区段的偏移地址,如对于方法原型列表区段proto_ids的数据,根据修改后的文件头中其偏移地址proto_ids Off和长度信息(图中未示出),便可以将其加载到对应的第一内存中。
采用该实施例中的方案,通过dexdump工具从classes.dex的起始地址dumpfileSize大小的内容时,除了header还在外,别的内容都已经不在了,因此,无法得到完整的dex文件,从而达到防止classes.dex被内存dump的目的。
在本发明的一个实施例中,如图5所示,所述存储方法还可以包括:
步骤S150:完成解析后的dex文件的加载后,删除所述第二内存中的dex文件的文件头header中的第二指定数据。
其中,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
本实施例中,通过在完成dex文件向内存的加载后,删除内存中文件头header中的第二指定数据,使得dex文件内存提取工具无法找到所述第二指定数据,进一步保障了内存中dex文件的安全。
对应于图2中所示的dex文件加载方法,本发明的实施例中还提供了一种dex文件的存储装置,如图6所示,该装置包括指定数据提取模块110、内存申请模块120和文件头修改模块130。
指定数据提取模块110,用于解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
内存申请模块120,用于申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
文件头修改模块130,用于根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
在本发明的一个实施例中,所述装置还可以包括Dex内存加载模块140,如图7所示。
所述Dex内存加载模块140,用于在完成文件头header中所述第一指定数据的偏移地址的修改后,根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
在实际操作中,所述第一指定数据可以为非文件头中的其它任何部分的数据,即dex文件的索引区和/或数据区的任意一个或多个数据段,即所述指定数据包括以下几种数据中的至少一种:
字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
在本发明的一个实施例中,所述第一内存为一段连续的内存空间。即不论指定数据包括几部分数据区段的数据,提取出的所有指定数据加载时均加载到一块连续的第一内存空间中。
在本发明的一个实施例中,所述内存申请模块120还可以包括多内存申请单元,所述多内存申请单元,用于在所述第一指定数据的种类大于一种时,申请至少两段不连续的内存空间,其中,不连续的第一内存空间的段数不大于第一指定数据的种类数。
该实施例中,根据第一指定数据所在的数据段的个数,申请数量不大于第一指定数据的种类数的多段不连续的第一内存,可以将不同数据段的第一指定数据分开加载到若干个不连续的第一内存空间中,通过该方案,进一步提高了从内存中提取dex文件的难度。
在本发明的一个实施例中,所述装置还可以包括文件头数据删除模块150,如图8所示。
所述文件头数据删除模块150,用于在完成解析后的dex文件的加载后,删除所述第二内存中的dex文件的文件头header中的第二指定数据。
本实施例中,通过在完成dex文件向内存的加载后,删除内存中文件头header中的第二指定数据,使得dex文件内存提取工具无法找到所述第二指定数据,进一步保障了内存中dex文件的安全。
在本发明的一个实施例中,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述装置实施方式中各部分的全部或部分可以以硬件实现,或者以在一个或多个硬件上运行的软件模块来实现,方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。本领域技术人员应该明白,本发明所述的方法和装置并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。
本发明的实例中公开了:A1、一种dex文件的存储方法,所述方法包括:
解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
A2、根据A1所述的方法,完成文件头header中所述第一指定数据的偏移地址的修改后,还包括:
根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
A3、根据A1或A2所述的方法,所述第一指定数据包括以下几种数据中的至少一种:
字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
A4、根据A3所述的方法,所述第一内存为一段连续的内存空间。
A5、根据A3所述的方法,所述第一指定数据的种类大于一种,所述第一内存至少包括两段不连续的内存空间,不连续的第一内存空间的段数不大于第一指定数据的种类数。
A6、根据A2所述的方法,完成解析后的dex文件的加载后,还包括:
删除所述第二内存中的dex文件的文件头header中的第二指定数据。
A7、根据A6所述的方法,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
本发明的实施例中还公开:B8、一种dex文件的存储装置,所述装置包括:
指定数据提取模块,用于解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
内存申请模块,用于申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
文件头修改模块,用于根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
B9、根据B8所述的装置,该装置还包括:
Dex内存加载模块,用于在完成文件头header中所述第一指定数据的偏移地址的修改后,根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
B10、根据B8或B9所述的装置,所述第一指定数据包括以下几种数据中的至少一种:
字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
B11、根据B10所述的装置,所述第一内存为一段连续的内存空间。
B12、根据B10所述的装置,所述内存申请模块包括:
多内存申请单元,用于在所述第一指定数据的种类大于一种时,申请至少两段不连续的内存空间,其中,不连续的第一内存空间的段数不大于第一指定数据的种类数。。
B13、根据B9所述的装置,该装置还包括:
文件头数据删除模块,用于在完成解析后的dex文件的加载后,删除所述第二内存中的dex文件的文件头header中的第二指定数据。
B14、根据B13所述的装置,其特征在于,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种dex文件的存储方法,其特征在于,包括:
解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
2.根据权利要求1所述的方法,其特征在于,完成文件头header中所述第一指定数据的偏移地址的修改后,还包括:
根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
3.根据权利要求1或2所述的方法,其特征在于,所述第一指定数据包括以下几种数据中的至少一种:
字符串列表区段string_ids、数据类型列表区段type_ids、方法原型列表区段proto_ids、类成员列表区段field_ids、方法列表区段method_ids、类列表区段class_defs、数据区区段data。
4.根据权利要求3所述的方法,其特征在于,所述第一内存为一段连续的内存空间。
5.根据权利要求3所述的方法,其特征在于,所述第一指定数据的种类大于一种,所述第一内存至少包括两段不连续的内存空间,不连续的第一内存空间的段数不大于第一指定数据的种类数。
6.根据权利要求2所述的方法,其特征在于,完成解析后的dex文件的加载后,还包括:
删除所述第二内存中的dex文件的文件头header中的第二指定数据。
7.根据权利要求6所述的方法,其特征在于,所述第二指定数据包括以下数据中的至少一种:
魔数字段magic、校验码字段checksum、签名字段signature、文件总长度字段fileSize、文件头长度字段header_size、字节顺序常量标识字段endian_tag、map数据基地址字段map_off。
8.一种dex文件的存储装置,其特征在于,包括:
指定数据提取模块,用于解析待加载的dex文件,提取解析后的dex文件的非文件头header中的第一指定数据;
内存申请模块,用于申请第一内存和第二内存,所述第一内存用于存储所述第一指定数据,所述第二内存用于存储dex文件中除第一指定数据之外的其他数据;所述第一内存和第二内存不连续;
文件头修改模块,用于根据所述第一内存的内存地址信息,修改dex文件的文件头header中所述第一指定数据的偏移地址,使其指向第一内存。
9.根据权利要求8所述的装置,其特征在于,还包括:
Dex内存加载模块,用于在完成文件头header中所述第一指定数据的偏移地址的修改后,根据修改后的dex文件的文件头header信息,完成解析后的dex文件的加载,将所述第一指定数据加载到第一内存中,将所述其它数据加载到第二内存中。
10.根据权利要求9所述的装置,其特征在于,还包括:
文件头数据删除模块,用于在完成解析后的dex文件的加载后,删除所述第二内存中的dex文件的文件头header中的第二指定数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611139089.5A CN106815301B (zh) | 2016-12-12 | 2016-12-12 | 一种dex文件的存储方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611139089.5A CN106815301B (zh) | 2016-12-12 | 2016-12-12 | 一种dex文件的存储方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106815301A true CN106815301A (zh) | 2017-06-09 |
CN106815301B CN106815301B (zh) | 2020-10-30 |
Family
ID=59108869
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611139089.5A Active CN106815301B (zh) | 2016-12-12 | 2016-12-12 | 一种dex文件的存储方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106815301B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315593A (zh) * | 2017-06-29 | 2017-11-03 | 广州优视网络科技有限公司 | 应用程序打包方法、装置及终端设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102236757A (zh) * | 2011-06-30 | 2011-11-09 | 北京邮电大学 | 一种适用于Android系统的软件保护方法及系统 |
CN104111832A (zh) * | 2014-07-03 | 2014-10-22 | 北京思特奇信息技术股份有限公司 | 一种安卓应用程序安装包加壳方法及系统及解壳方法 |
CN104318135A (zh) * | 2014-10-27 | 2015-01-28 | 中国科学院信息工程研究所 | 一种基于可信执行环境的Java代码安全动态载入方法 |
US20150278247A1 (en) * | 2014-03-28 | 2015-10-01 | Fujitsu Limited | Data access system and data access method |
CN105468543A (zh) * | 2014-09-11 | 2016-04-06 | 中兴通讯股份有限公司 | 一种保护敏感信息的方法及装置 |
CN105608393A (zh) * | 2016-01-19 | 2016-05-25 | 北京鼎源科技有限公司 | 一种基于Android可执行文件重组的加固方法 |
-
2016
- 2016-12-12 CN CN201611139089.5A patent/CN106815301B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102236757A (zh) * | 2011-06-30 | 2011-11-09 | 北京邮电大学 | 一种适用于Android系统的软件保护方法及系统 |
US20150278247A1 (en) * | 2014-03-28 | 2015-10-01 | Fujitsu Limited | Data access system and data access method |
CN104111832A (zh) * | 2014-07-03 | 2014-10-22 | 北京思特奇信息技术股份有限公司 | 一种安卓应用程序安装包加壳方法及系统及解壳方法 |
CN105468543A (zh) * | 2014-09-11 | 2016-04-06 | 中兴通讯股份有限公司 | 一种保护敏感信息的方法及装置 |
CN104318135A (zh) * | 2014-10-27 | 2015-01-28 | 中国科学院信息工程研究所 | 一种基于可信执行环境的Java代码安全动态载入方法 |
CN105608393A (zh) * | 2016-01-19 | 2016-05-25 | 北京鼎源科技有限公司 | 一种基于Android可执行文件重组的加固方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315593A (zh) * | 2017-06-29 | 2017-11-03 | 广州优视网络科技有限公司 | 应用程序打包方法、装置及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106815301B (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8156487B2 (en) | Efficient patching | |
AU2005201434B2 (en) | Efficient patching | |
US5359721A (en) | Non-supervisor mode cross address space dynamic linking | |
CN105843640B (zh) | 一种动态链接库的注入方法及装置 | |
CN108229107B (zh) | 一种Android平台应用程序的脱壳方法及容器 | |
US20050257207A1 (en) | Efficient patching | |
CA2399891A1 (en) | Software patch generator | |
US11513790B2 (en) | Memory optimized block-based differential update algorithm | |
CN105786538A (zh) | 基于安卓系统的软件升级方法和装置 | |
CN104714812A (zh) | 在云环境中快速部署和加载Java应用的方法和系统 | |
US11947666B2 (en) | Systems and methods for exploit prevention and malicious code neutralization using non-predictable results for JavaScript-enabled applications | |
CN106598496A (zh) | 构建虚拟磁盘及其数据处理的方法和装置 | |
CN106650428A (zh) | 用于优化应用代码的方法与设备 | |
ZA200503110B (en) | Efficient patching | |
CN106815301A (zh) | 一种dex文件的存储方法和装置 | |
CN105677579A (zh) | 缓存系统中的数据访问方法和系统 | |
CN107908954A (zh) | 一种基于地址压缩技术的动态检测gpu上内存溢出的方法 | |
EP3224756B1 (de) | Verfahren zum nachladen von software auf eine chipkarte durch einen nachladeautomaten | |
CN107528713A (zh) | 一种数据转移sdk的升级方法及装置 | |
CN104615935B (zh) | 一种面向Xen虚拟化平台的隐藏方法 | |
CN106843919A (zh) | 一种dex文件的存储方法和装置 | |
CN106845166A (zh) | 一种dex文件的存储方法和装置 | |
CN114816478A (zh) | 一种离线资源包差分方法、装置、设备及介质 | |
WO2001061486A2 (en) | Incremental bootstrap class loader | |
CN106897588A (zh) | 一种标签函数的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |