CN106843919B - 一种dex文件的存储方法和装置 - Google Patents

一种dex文件的存储方法和装置 Download PDF

Info

Publication number
CN106843919B
CN106843919B CN201611138839.7A CN201611138839A CN106843919B CN 106843919 B CN106843919 B CN 106843919B CN 201611138839 A CN201611138839 A CN 201611138839A CN 106843919 B CN106843919 B CN 106843919B
Authority
CN
China
Prior art keywords
class
data
dex file
android application
application program
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.)
Active
Application number
CN201611138839.7A
Other languages
English (en)
Other versions
CN106843919A (zh
Inventor
刘敏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201611138839.7A priority Critical patent/CN106843919B/zh
Publication of CN106843919A publication Critical patent/CN106843919A/zh
Application granted granted Critical
Publication of CN106843919B publication Critical patent/CN106843919B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)

Abstract

本发明实施例中公开了一种dex文件的存储方法和装置,属于应用程序安全防护技术领域。所述方法包括:运行安卓应用程序,解析并加载安卓应用程序的dex文件;检测所述dex文件中定义的类是否已经被加载到内存空间中;当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item。采用本发明实施例中所提供的方法和装置,解决了现有技术中能够从内存中提取完整dex文件的问题,保护了dex文件,有效避免了dex文件被动态反编译,提高了dex文件动态加载的安全性。

Description

一种dex文件的存储方法和装置
技术领域
本发明涉及应用程序安全防护技术领域,具体涉及一种dex文件的存储方法和装置。
背景技术
随着Android系统的快速发展和及设备的高速增长,基于Android的平台应用需求也越来越复杂。形形色色的应用软件壮大了Android市场,也丰富了我们的生活,越来越多的人从起初的尝试到享受再到依赖,Android应用越来越广泛。与其它操作系统相比,Android系统的开源性为应用开发者提供了更多的功能接口,但这些功能接口在提高系统可扩展性的同时也为恶意软件提供了遍历,非法拷贝、反编译、内存截取等手段不断威胁着安卓系统的安全,不仅危害了使用者,也给正常应用开发者造成了严重的损害。因此,Android应用安全性一直是开发者所关注的重点问题。
对Android应用进行加固防护的主要目的均是为了防止其java字节码文件classes.dex文件被获取,在Android平台安装运行APK文件时,都必须将dex文件释放到内存,在dex文件加载时,根据文件头header中定义的其它结构的偏移地址和长度信息进行寻址解析,将其它结构中的数据加载分别加载到内存中,加载后的dex文件的内容是存放在内存中的一端连续的内存空间中的,因此,破解者只需要获取到classes.dex文件的起始地址,然后从起始地址开始dump(提取/提取)文件总长度filesize大小的内容,即可提取得到完整的classes.dex文件的内容,进而可以进一步还原出APK文件的源代码,使得安卓应用程序很容易被篡改。
发明内容
针对现有技术中存在的缺陷,本发明实施例的目的在于提供一种能够克服上述问题或者至少能够部分地解决上述问题的一种dex文件的存储方法和装置。
为实现上述目的,本发明的一个实施例中提供了一种dex文件的存储方法,包括:
运行安卓应用程序,解析并加载安卓应用程序的dex文件;
检测所述dex文件中定义的类是否已经被加载到内存空间中;
当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item。
优选的,如上所述的方法,所述运行安卓应用程序前,包括:
接收安卓应用程序启动指令,启动类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存空间中。
优选的,如上所述的方法,接收安卓应用程序启动指令前,还包括:创建所述类检测线程;
在删除所述类的类数据信息class_data_item后,关闭所述类检测线程。
优选的,如上所述的方法,所述dex文件中定义的类包括安卓应用程序的dex文件中的定义的至少一个类。
优选的,如上所述的方法,删除所述dex文件中所述类的类数据信息class_data_item,包括:
根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item并删除。
优选的,如上所述的方法,删除所述dex文件中所述类的类数据信息class_data_item后,还包括:
将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
优选的,如上所述的方法,所述检测所述dex文件中定义的类是否已经被加载到内存空间中,包括:
通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
优选的,如上所述的方法,所述类的缓存标识为所述类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
本发明的实施例中还公开了:一种dex文件的存储装置,包括:
dex文件解析加载模块,用于运行安卓应用程序,解析并加载安卓应用程序的dex文件;
类加载状态检测模块,用于检测所述dex文件中定义的类是否已经被加载到内存空间中;
类数据删除模块,用于当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item。
优选的,如上所述的装置,该装置还包括:
类检测线程启动模块,用于在运行安卓应用程序前,接收安卓应用程序启动指令,启动类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存中。
优选的,如上所述的装置,还包括:
类检测线程创建模块,用于在接收安卓应用程序启动指令前,创建所述类检测线程;
类检测线程关闭模块,用于在删除所述类的类数据信息class_data_item后,关闭所述类检测线程。
优选的,如上所述的装置,所述dex文件中定义的类class包括安卓应用程序的dex文件中定义的至少一个类。
优选的,如上所述的装置,所述类数据删除模块包括:
类数据查找单元,用于根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item;
类数据删除单元,用于删除查找到的类数据信息class_data_item。
优选的,如上所述的装置,还包括:
类偏移修改模块,用于在删除所述dex文件中所述类的类数据信息class_data_item后,将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
优选的,如上所述的装置,所述类数据删除模块包括:
类缓存判断单元,用于通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
优选的,如上所述的装置,所述类的缓存标识为类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
本发明的有益效果在于:本发明实施例中所提供的dex文件的存储方法和装置,在安卓应用程序APP启动时,通过对应用程序的dex文件中定义的类的内存加载状态进行检测,在检测到所述类已经被加载到内存后,删除dex文件结构中所述类的类数据信息,从而避免了在程序运行时,能够通过dexdump等dex文件内存提取工具从内存中提取到完整的dex文件的问题,达到了保护dex文件的目的,该方法和装置,有效避免了dex文件的内存提取,避免了被动态反编译,提高了dex文件动态加载的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,附图仅限于示出优选实施方式的目的,而并不认为是本发明的限制,且对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一个实施例中一种dex文件的存储方法的流程示意图;
图2为本发明的一个实施例中dex文件的类列表区段class_defs的部分结构示意图;
图3为本发明的一个实施例中一种dex文件的存储方法的流程示意图;
图4为本发明的一个实施例中一种dex文件的存储方法的流程示意图;
图5为本发明的一个实施例中一种dex文件的存储装置的结构示意图;
图6为本发明的一个实施例中一种dex文件的存储装置的结构示意图;
图7为本发明一个实施例中的类数据删除模块的结构示意图;
图8为本发明一个实施例中的类数据删除模块的结构示意图;
图9为本发明的一个实施例中一种dex文件的存储装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均属于本发明保护的范围。
图1示出了本发明的一个实施例中提供的一种防止从内存中提取dex文件方法的流程示意图,该方法主要可以包括以下步骤:
步骤S110:运行安卓应用程序,解析并加载安卓应用程序的dex文件;
步骤S120:检测所述dex文件中定义的类是否已经被加载到内存空间中;
步骤S130:当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息。
本实施例中,在运行安卓应用程序运行时,由Dalvik虚拟机进行所需要启动的应用程序的dex文件的底层解析与加载,将dex文件的各部分内容加载到内存中,在dex文件的解析与加载过程中,当检测dex文件中定义的类已经被加载到了内存空间中时,则删除dex文件中该类的类数据信息class_data_item。其中,定义的类被加载到内存空间指的即使该类的类数据信息class_data_item已经被存储到内存空间中。
在实际操作中,由于dex文件中定义的类class已经被加载存储到了内存空间中,因此,删除dex文件中的类数据信息class_data_item是不会影响应用程序的正常运行的。
本实施例中,所述dex文件中定义的类包括安卓应用程序的dex文件中定义的至少一个类。
classes.dex文件(本发明实施例中简称为dex文件)是Android平台上可执行文件的类型,dex文件的类列表区段class_defs中存放着classdefinitions即类class的定义,类列表区段class_defs的数据格式为class_def_item,class_def_item结构中的class_idx描述了具体类class类型。本实施例中所述dex文件中定义的类class即是class_idx中描述的至少一个类class。
本实施例中提供的所述dex文件的存储方法,通过将已经加载到内存中的dex文件中的类class的类数据信息class_data_item进行抹除,使得即使采用dexdump工具从内存中的提取dex文件,由于至少一个类class的数据信息class_data_item不存在,因此,无法从内存中dump到完成dex文件,有效避免了dex文件的内存提取。
在本发明的一个实施例中,步骤S130中,所述删除所述dex文件中所述类的类数据信息,包括:
根据dex文件的类列表区段class_defs中所述类class的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类class的类数据信息class_data_item并删除。
class_data_off是上述class_def_item结构中的一个类的偏移地址,指向的内容是对应的类class所需要使用到的数据,位置在dex文件的数据区段data中,格式为class_data_item,class_data_item中描述的是类class所要使用到的数据信息。因此,对于所述类class,根据其类数据偏移地址class_data_off即可在数据区段data找到该类的类数据信息。
如图2所示,为dex文件中类列表区段class_defs的部分结构示意图,图中第二个矩形框中的内容即为某个类的类数据信息class_data_item的结构示意图,本实施例中,所述删除内存中dex文件的中某一个类的类数据信息即是删除图2中第二个矩形框中的内容。
需要说明的是,图2中的英文内容均是安卓dex文件中的通用数据结构,对本领域技术人员来说都是清楚的,在此不再对其中的内容进行一一说明。
在本发明的一个实施例中,步骤S120中,所述检测所述dex文件中定义的类是否已经被加载到内存空间中,包括:
通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
在将dex文件中定义的类class加载到内存后,即将类的类数据信息class_data_item加载到内存中后,会将类所存储在的内存地址作为一个元素添加到安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中,以建立安卓操作系统的底层与上层的通信调用,由dex类加载器Dexclassloader根据dex元素数组dexElements中的元素完成上层dex文件的动态加载。因此,可以通过检测类的缓存标识在dex元素数组dexElements中是否存在,来判断类是否加载完成,当某个定义的类的缓存标识存在时,则表明该类已经加载到了内存空间中。
在本发明的一个实施例中,所述类的缓存标识可以为类的变量值cookie,所述变量值cookie即为完成底层加载后的类所在的内存地址。
图3示出了本发明的一个实施例中提供的一种防止从内存中提取dex文件方法的流程示意图,该方法主要可以包括以下步骤:
步骤S310:创建类检测线程,
本实施例中,首先创建一类检测线程,所述类检测线程用于在安卓应用程序APP的启动过程中,检测安卓应用程序APP的dex文件中定义的类是否已经被加载到内存空间中。
需要说明的是,所述创建类检测线程的步骤,只需要执行一次,完成一次类检测线程的创建后,在后续安卓应用程序启动时,自动启动该线程即可。
步骤S320:接收安卓应用程序启动指令,启动所述类检测线程;
在接收到安卓应用程序AAP的启动指令时,首先启动所述类检测线程,其中,所述安卓应用程序启动指令,即用户在终端设备上的点击或其它应用程序的启动动作,在接收到用户对所需要启动的应用程序的启动指令后,首先启动上述类检测线程,即在应用程序启动之前,先启动类检测线程,以实现对应用程序运行过程中dex文件中定义的类class的加载状态进行检测。
步骤S330:运行安卓应用程序,解析加载安卓应用程序的dex文件;
步骤S340:当类检测线程检测所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息;
在所述类检测线程启动后,进入安卓应用程序运行过程,由Dalvik虚拟机进行所需要启动的应用程序的dex文件的底层解析与加载,将dex文件的各部分内容加载到内存中,在dex文件的解析与加载过程中,所述类检测程序检测dex文件的定义的类class是否已经被加载到内存空间中,当检测到所述类class的类数据信息class_data_item已经被加载完成后,则删除内存中所述dex文件中的所述类class的类数据信息class_data_item。
步骤S350:关闭所述类检测线程。
将内存中的所述dex文件中所述类的类数据信息class_data_item删除后,关闭所述类检测线程。当所述类为两个或两个以上时,则在分别删除完dex文件中所述两个或两个以上的类的类数据信息class_data_item后,关闭类检测线程。
在本发明的一个实施例中,如图4所示,在删除所述dex文件中所述类的类数据信息class_data_item后,所述存储方法还可以包括:
步骤S140:将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
本实施例中,通过将所述类class的类偏移地址class_data_off的值修改为0,进一步删除了该类class的相关信息。class_data_off的值为0表明在数据区中不存在相应的类数据信息,对于图2中所示的结构,将类数据偏移地址class_data_off的值修改为0即是将图2中第一个矩形框中的class_data_off修改成0。
对应于图1中所示的方法,本发明的一个实施例中还提供了一种dex文件的存储装置,如图5所示,该装置可以包括dex文件解析加载模块110、类加载状态检测模块120和类数据删除模块130。其中:
dex文件解析加载模块110,用于运行安卓应用程序,解析并加载安卓应用程序的dex文件;
类加载状态检测模块120,用于检测所述dex文件中定义的类是否已经被加载到内存空间中;
类数据删除模块130,用于当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item。
其中,所述dex文件中定义的类包括安卓应用程序的dex文件中的至少一个类。
本实施例中所述的dex文件的存储装置,通过在完成dex文件中定义的类的内存加载存储后,将dex文件中定义的类的类数据信息进行删除,使得dexdump等内存提取工具无法从内存中提取到完整的dex文件,保证了dex文件的动态加载的安全。
在本发明的一个实施例中,所述存储装置还可以包括类检测线程创建模块140、类检测线程启动模块150和类检测线程关闭模块160,如图6所示。其中:
类检测线程创建模块140,用于在接收安卓应用程序启动指令前,创建类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存空间中;
类检测线程启动模块150,用于在接收运行安卓应用程序启动指令前,接收安卓应用程序启动指令,启动所述类检测线程;
类检测线程关闭模块160,用于在删除内存中的所述dex文件中所述类的类数据信息class_data_item后,关闭所述类检测线程。
在本发明的一个实施例中,如图7所示,所述类数据删除模块130包括类数据查找单元132和类数据删除单元133。其中:
类数据查找单元132,用于根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item;
类数据删除单元133,用于删除查找到的类数据信息class_data_item。
在本发明的一个实施例中,如图8所示,所述类数据删除模块130包括类缓存判断单元131。其中:
类缓存判断单元131,用于通过监测检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
在本发明的一个实施例中,所述类的缓存标识可以为类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
在本发明的一个实施例中,如图9所示,所述装置还可以类偏移修改模块170。其中:
类偏移修改模块170,用于在删除内存中的dex文件中所述类的类数据信息class_data_item后,将类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
本实施例中,通过类偏移地址修改模块180进一步删除了所述类class的相关信息。
本发明实施例中所提供的dex文件的存储方法和装置,在安卓应用程序APP的运行过程中,通过对dex文件中定义的类的内存加载状态进行检测,在检测到所述类已经加载到内存即在内存中缓存好之后,即删除dex文件结构中所述类的类数据信息,从而避免了在程序运行时,能够通过dexdump等dex文件内存提取工具从内存中提取到完整的dex文件的问题,达到保护dex文件的目的。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述装置实施方式中各部分的全部或部分可以以硬件实现,或者以在一个或多个硬件上运行的软件模块来实现,方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。本领域技术人员应该明白,本发明所述的方法和装置并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。
本发明的实例中公开了:A1、一种dex文件的存储方法,包括:
运行安卓应用程序,解析并加载安卓应用程序的dex文件;
检测所述dex文件中定义的类是否已经被加载到内存空间中;
当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item。
A2、根据A1所述的方法,所述运行安卓应用程序前,包括:
接收安卓应用程序启动指令,启动类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存空间中。
A3、根据A2所述的方法,接收安卓应用程序启动指令前,还包括:创建所述类检测线程;
在删除所述类的类数据信息class_data_item后,关闭所述类检测线程。
A4、根据权利要求1至3之一所述的方法,其特征在于,所述dex文件中定义的类包括安卓应用程序的dex文件中的定义的至少一个类。
A5、根据A1至A3之一所述的方法,删除所述dex文件中所述类的类数据信息class_data_item,包括:
根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item并删除。
A6、根据A1至A3之一所述的方法,删除所述dex文件中所述类的类数据信息class_data_item后,还包括:
将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
A7、根据A1至A3之一所述的方法,所述检测所述dex文件中定义的类是否已经被加载到内存空间中,包括:
通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
A8、根据A7所述的方法,所述类的缓存标识为所述类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
本发明实施例中公开了:B9、一种dex文件的存储装置,包括:
dex文件解析加载模块,用于运行安卓应用程序,解析并加载安卓应用程序的dex文件;
类加载状态检测模块,用于检测所述dex文件中定义的类是否已经被加载到内存空间中;
类数据删除模块,用于当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item。
B10、根据B9所述的装置,该装置还包括:
类检测线程启动模块,用于在运行安卓应用程序前,接收安卓应用程序启动指令,启动类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存中。
B11、根据B10所述的装置,还包括:
类检测线程创建模块,用于在接收安卓应用程序启动指令前,创建所述类检测线程;
类检测线程关闭模块,用于在删除所述类的类数据信息class_data_item后,关闭所述类检测线程。
B12、根据B9至B11之一所述的装置,所述dex文件中定义的类class包括安卓应用程序的dex文件中定义的至少一个类。
B13、根据B9至B11之一所述的装置,所述类数据删除模块包括:
类数据查找单元,用于根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item;
类数据删除单元,用于删除查找到的类数据信息class_data_item。
B14、根据B9至B11之一所述的装置,还包括:
类偏移修改模块,用于在删除所述dex文件中所述类的类数据信息class_data_item后,将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
B15、根据B9至B11之一所述的装置,所述类数据删除模块包括:
类缓存判断单元,用于通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
B16、根据B15所述的装置,所述类的缓存标识为类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (14)

1.一种dex文件的存储方法,其特征在于,包括:
运行安卓应用程序,解析并加载安卓应用程序的dex文件;
检测所述dex文件中定义的类是否已经被加载到内存空间中;
当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item;
其中,删除所述dex文件中所述类的类数据信息class_data_item,包括:根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item并删除。
2.根据权利要求1所述的方法,其特征在于,所述运行安卓应用程序前,包括:
接收安卓应用程序启动指令,启动类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存空间中。
3.根据权利要求2所述的方法,其特征在于,接收安卓应用程序启动指令前,还包括:创建所述类检测线程;
在删除所述类的类数据信息class_data_item后,关闭所述类检测线程。
4.根据权利要求1至3之一所述的方法,其特征在于,所述dex文件中定义的类包括安卓应用程序的dex文件中的定义的至少一个类。
5.根据权利要求1至3之一所述的方法,其特征在于,删除所述dex文件中所述类的类数据信息class_data_item后,还包括:
将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
6.根据权利要求1至3之一所述的方法,其特征在于,所述检测所述dex文件中定义的类是否已经被加载到内存空间中,包括:
通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
7.根据权利要求6所述的方法,其特征在于:所述类的缓存标识为所述类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
8.一种dex文件的存储装置,其特征在于,包括:
dex文件解析加载模块,用于运行安卓应用程序,解析并加载安卓应用程序的dex文件;
类加载状态检测模块,用于检测所述dex文件中定义的类是否已经被加载到内存空间中;
类数据删除模块,用于当检测到所述类已经被加载到内存空间中时,删除所述dex文件中所述类的类数据信息class_data_item;
所述类数据删除模块包括:
类数据查找单元,用于根据dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off,查找到dex文件数据区段data中该类的类数据信息class_data_item;
类数据删除单元,用于删除查找到的类数据信息class_data_item。
9.根据权利要求8所述的装置,其特征在于,该装置还包括:
类检测线程启动模块,用于在运行安卓应用程序前,接收安卓应用程序启动指令,启动类检测线程;所述类检测线程用于在安卓应用程序启动过程中,检测安卓应用程序的dex文件中定义的类是否已经被加载到内存中。
10.根据权利要求9所述的装置,其特征在于,还包括:
类检测线程创建模块,用于在接收安卓应用程序启动指令前,创建所述类检测线程;
类检测线程关闭模块,用于在删除所述类的类数据信息class_data_item后,关闭所述类检测线程。
11.根据权利要求8至10之一所述的装置,其特征在于,所述dex文件中定义的类class包括安卓应用程序的dex文件中定义的至少一个类。
12.根据权利要求8至10之一所述的装置,其特征在于,还包括:
类偏移修改模块,用于在删除所述dex文件中所述类的类数据信息class_data_item后,将所述dex文件的类列表区段class_defs中所述类的类数据偏移地址class_data_off的值修改为0。
13.根据权利要求8至10之一所述的装置,其特征在于,所述类数据删除模块包括:
类缓存判断单元,用于通过检测安卓操作系统中的dex文件路径列表DexPathList的dex元素数组dexElements中是否存在所述类的缓存标识,判断所述类是否已经被加载到内存空间中。
14.根据权利要求13所述的装置,其特征在于:所述类的缓存标识为类的变量值cookie,所述变量值cookie为加载后的类所在的内存地址。
CN201611138839.7A 2016-12-12 2016-12-12 一种dex文件的存储方法和装置 Active CN106843919B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611138839.7A CN106843919B (zh) 2016-12-12 2016-12-12 一种dex文件的存储方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611138839.7A CN106843919B (zh) 2016-12-12 2016-12-12 一种dex文件的存储方法和装置

Publications (2)

Publication Number Publication Date
CN106843919A CN106843919A (zh) 2017-06-13
CN106843919B true CN106843919B (zh) 2021-02-23

Family

ID=59139730

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611138839.7A Active CN106843919B (zh) 2016-12-12 2016-12-12 一种dex文件的存储方法和装置

Country Status (1)

Country Link
CN (1) CN106843919B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109358973B (zh) * 2018-09-29 2020-12-22 网易(杭州)网络有限公司 信息处理方法、系统、介质和计算设备
CN111274057B (zh) * 2020-01-13 2021-07-06 北京字节跳动网络技术有限公司 一种内存泄露链路的处理方法、装置、介质和电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102236757A (zh) * 2011-06-30 2011-11-09 北京邮电大学 一种适用于Android系统的软件保护方法及系统
CN103914637A (zh) * 2013-01-07 2014-07-09 北京洋浦伟业科技发展有限公司 一种安卓平台的可执行程序加密方法
CN104318155A (zh) * 2014-11-18 2015-01-28 刘鹏 一种防逆向apk文件的动态加载方法
CN104573424A (zh) * 2013-10-23 2015-04-29 中国银联股份有限公司 一种应用程序保护系统和方法
CN104834838A (zh) * 2015-04-29 2015-08-12 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
CN105046116A (zh) * 2015-06-25 2015-11-11 上海斐讯数据通信技术有限公司 Android系统中保护dex文件不被反编译的方法
CN105844160A (zh) * 2016-06-21 2016-08-10 北京金山安全软件有限公司 驱动程序隐藏方法、装置和设备
EP3057019A1 (en) * 2015-02-13 2016-08-17 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103413076B (zh) * 2013-08-27 2016-03-02 北京理工大学 一种Android应用程序分块保护的方法
CN104317625A (zh) * 2014-11-09 2015-01-28 刘鹏 一种apk文件的动态加载方法
CN106203120B (zh) * 2016-07-15 2019-03-05 北京邮电大学 一种针对Android加固应用的多点Hook逆向方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102236757A (zh) * 2011-06-30 2011-11-09 北京邮电大学 一种适用于Android系统的软件保护方法及系统
CN103914637A (zh) * 2013-01-07 2014-07-09 北京洋浦伟业科技发展有限公司 一种安卓平台的可执行程序加密方法
CN104573424A (zh) * 2013-10-23 2015-04-29 中国银联股份有限公司 一种应用程序保护系统和方法
CN104318155A (zh) * 2014-11-18 2015-01-28 刘鹏 一种防逆向apk文件的动态加载方法
EP3057019A1 (en) * 2015-02-13 2016-08-17 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected
CN104834838A (zh) * 2015-04-29 2015-08-12 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
CN105046116A (zh) * 2015-06-25 2015-11-11 上海斐讯数据通信技术有限公司 Android系统中保护dex文件不被反编译的方法
CN105844160A (zh) * 2016-06-21 2016-08-10 北京金山安全软件有限公司 驱动程序隐藏方法、装置和设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"APK安装过程及原理详解";Android哥哥;《https://blog.csdn.net/hdhd588/article/details/6739281》;20110901;第1页 *
"一种Android应用加固方案";朱洪军;《计算机应用与软件》;20161115;第33卷(第11期);第297-300页 *

Also Published As

Publication number Publication date
CN106843919A (zh) 2017-06-13

Similar Documents

Publication Publication Date Title
US11188650B2 (en) Detection of malware using feature hashing
CN104008340B (zh) 病毒查杀方法及装置
US9298921B2 (en) Methods for detecting malicious programs using a multilayered heuristics approach
US20170346843A1 (en) Behavior processing method and device based on application program
US20090038011A1 (en) System and method of identifying and removing malware on a computer system
US20100306851A1 (en) Method and apparatus for preventing a vulnerability of a web browser from being exploited
CN107783776B (zh) 固件升级包的处理方法及装置、电子设备
US20140053267A1 (en) Method for identifying malicious executables
US7607122B2 (en) Post build process to record stack and call tree information
WO2013026320A1 (zh) 一种网页挂马检测方法及系统
US9330260B1 (en) Detecting auto-start malware by checking its aggressive load point behaviors
CN106843919B (zh) 一种dex文件的存储方法和装置
CN103713945B (zh) 游戏的识别方法和装置
US8938807B1 (en) Malware removal without virus pattern
CN105550573B (zh) 拦截捆绑软件的方法和装置
US20210165904A1 (en) Data loss prevention
CN114282212A (zh) 流氓软件识别方法、装置、电子设备及存储介质
CN114371859A (zh) 应用软件rasp程序更新方法、服务器、电子设备及存储介质
CN109472135B (zh) 一种检测进程注入的方法、装置及存储介质
KR101595936B1 (ko) 백신과 컴퓨터 최적화 기능을 구비한 컴퓨터 최적화 방법, 최적화 서버 및 컴퓨터 판독 가능한 기록매체
US20130247182A1 (en) System, method, and computer program product for identifying hidden or modified data objects
US20170171224A1 (en) Method and System for Determining Initial Execution of an Attack
JP4643201B2 (ja) バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
CN106934288B (zh) 一种root病毒清理方法、装置及电子设备
CN104834861B (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