应用文件的脱壳方法及装置与流程

文档序号:16000394发布日期:2018-11-20 19:22阅读:136来源:国知局
本发明涉及计算机
技术领域
:,具体涉及一种应用文件的脱壳方法及装置。
背景技术
::目前,随着反编译和逆向等技术的成熟,APP的安全问题日益严重。采取加固方案对APP进行加固保护,能够避免APP被破解或者被二次打包等问题,例如,对APP的apk(AndroidPackage,Android安装包)文件进行加固处理。然而,一些恶意APP或者恶意代码往往也会使用加固技术对APP进行保护,以对抗木马查杀等检测,因此,为了能够检测到并查杀恶意APP或者恶意代码,往往采取首先对加固后的APP先进行脱壳处理,进而检测脱壳后的APP是否为恶意应用的方式。现有技术中,采用脱壳工具对待脱壳文件(加固后的应用文件)进行脱壳,例如DexHunter,将待脱壳文件中的DEX文件分为class_defs之前的数据、class_defs数据以及class_defs之后的数据,先将class_defs之前的无用自定义数据以及class_defs之后的数据先从内存中拷贝出来,然后主动一次性加载并初始化class_defs中的所有类文件,再将这些加载后的类文件进行内存拷贝,分别将拷贝加载出的三部分文件进行拼装,从而实现脱壳。再如,利用Indroid脱壳工具对待脱壳文件进行脱壳。但是,在实现本发明的过程中,发明人发现:首先,待脱壳文件中部分类文件所指向的真实原始文件的数据内容不在DEX文件所在的内存范围内,而被修改映射到了DEX文件连续内存以外的存储区域内,因此所得到的脱壳后的DEX文件在相应的抽取处为空。由此可见,现有技术中缺少一种能够很好地解决上述问题的方法。技术实现要素:鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的应用文件的脱壳方法及装置。根据本发明的一个方面,提供了一种应用文件的脱壳方法,该方法包括:监控待脱壳文件所运行的当前待脱壳方法,读取当前待脱壳方法对应的进程信息;根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;若是,则将当前待脱壳方法的内存数据转换为第一结构体信息;根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息;利用第一结构体信息对第二结构体信息进行修复处理,根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。根据本发明的另一方面,提供了一种应用文件的脱壳装置,该装置包括:监控模块,适于监控待脱壳文件所运行的当前待脱壳方法;读取模块,适于读取当前待脱壳方法对应的进程信息;判断模块,适于根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;转换模块,适于若判断出当前待脱壳方法对应的进程为满足预设脱壳条件的进程,则将当前待脱壳方法的内存数据转换为第一结构体信息;第二结构体信息确定模块,适于根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息;修复模块,适于利用第一结构体信息对第二结构体信息进行修复处理;脱壳模块,适于根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;存储器用于存放至少一可执行指令,可执行指令使处理器执行上述应用文件的脱壳方法对应的操作。根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述应用文件的脱壳方法对应的操作。根据本发明公开的应用文件的脱壳方法及装置,首先,监控待脱壳文件所运行的当前待脱壳方法,读取当前待脱壳方法对应的进程信息;其次,根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;若是,则将当前待脱壳方法的内存数据转换为第一结构体信息;然后,根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息;最后,利用第一结构体信息对第二结构体信息进行修复处理,根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。通过该方式,能够对加固后的应用文件进行有效脱壳,并且能够保证脱壳后所得到的DEX文件的数据的完整性,提升脱壳效果以及脱壳成功率。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本发明实施例一的应用文件的脱壳方法的流程示意图;图2示出了根据本发明实施例二的应用文件的脱壳方法的流程示意图;图3示出了根据本发明实施例三的应用文件的脱壳装置的结构示意图;图4示出了根据本发明实施例四的应用文件的脱壳装置的结构示意图;图5示出了根据本发明实施例五的一种计算设备的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示出了根据本发明实施例一的应用文件的脱壳方法的流程示意图,如图1所示,该方法包括如下步骤:步骤S101,监控待脱壳文件所运行的当前待脱壳方法,读取当前待脱壳方法对应的进程信息。其中,待脱壳文件是指经过加固处理后的应用文件,例如Android环境下的apk(AndroidPackage,Android安装包)文件,一个apk文件中至少包含一个DEX文件,一个apk文件对应一个进程。本实施例中,具体以对dalvik虚拟机模式下加固后的apk文件(待脱壳文件)进行脱壳为例进行说明,通俗地来讲,本实施例的方法也就是将apk中被加固的DEX文件中真实存在的方法提取出来,从而得到一个完整的DEX文件。另外,当待脱壳文件包含多个DEX文件时,依然可以采用本实施例所描述的方法进行脱壳。监控待脱壳文件所运行的当前待脱壳方法具体可通过在虚拟机的解释器入口处插入监控代码,利用监控代码对经过解释器的待脱壳方法进行监控的方式实现,当然,本发明对此不作限定。在监控到当前待脱壳方法之后,读取当前待脱壳方法相应的进程信息,其中,进程信息可以指进程名称。步骤S102,根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程。其中,满足预设脱壳条件的进程是指除系统自带进程或者第三方插件调用进程之外的,预先为该APP编写的与该APP的功能相关的程序所涉及的进程。可根据上述步骤S101所读取的当前待脱壳方法对应的进程信息,判断该进程是否为满足预设脱壳条件的进程。步骤S103,若判断出当前待脱壳方法对应的进程是满足预设脱壳条件的进程,则将当前待脱壳方法的内存数据转换为第一结构体信息。若判断出当前待脱壳方法对应的进程是满足预设脱壳条件的进程,则为了方便后续的查找以及修改,将当前待脱壳方法的内存数据转换为第一结构体信息,其中,内存数据为二进制内存数据。若判断出当前待脱壳方法对应的进程不是满足预设脱壳条件的进程,则对当前待脱壳方法不进行处理。也就是说,本实施例的方法中,根据当前待脱壳方法所对应的进程,判断是否对当前待脱壳方法进行脱壳,仅针对对应的进程为满足预设条件的进程的待脱壳方法进行脱壳。步骤S104,根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息。实际应用中,可调用系统函数对第一结构体信息进行处理,进而确定待脱壳文件对应的DEX文件的第二结构体信息,具体地,首先,根据第一结构体信息确定DEX文件在待脱壳文件中的内存区域,然后,调用系统函数对该内存区域内的数据进行解析,得到与DEX文件相对应的第二结构体信息。其中,第二结构体信息与DEX文件中包含的信息一一对应。步骤S105,利用第一结构体信息对第二结构体信息进行修复处理,根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。第二结构体信息是根据内存中的DEX文件得到的,由于DEX文件中的部分代码可能被修改和映射到了内存中文件连续内存以外的其他存储区域里,会出现第二结构体信息中部分字节码位置处对应的字节码为空的情况,因而需要对第二结构体信息中的部分字节码进行修复。而第一结构体信息是通过监控运行中的待脱壳方法而得到的,待脱壳方法的内存数据在内存中均是真实有效的,也即第一结构体信息在内存中是真实有效的,因此,本实施例的方法中利用第一结构体信息对第二结构体信息进行修复处理,能够保证脱壳后的DEX文件的数据完整性。对第二结构体信息进行修复之后,得到完整的DEX文件内存区域内的内存数据,将该完整的DEX文件内存区域内的内存数据写入磁盘文件,从而得到待脱壳文件脱壳后的DEX文件。根据实施例提供的应用文件的脱壳方法及装置,首先,监控待脱壳文件所运行的当前待脱壳方法,读取当前待脱壳方法对应的进程信息;其次,根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;若是,则将当前待脱壳方法的内存数据转换为第一结构体信息;然后,根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息;最后,利用第一结构体信息对第二结构体信息进行修复处理,根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。通过该方式,能够对加固后的应用文件进行有效脱壳,并且能够保证脱壳后所得到的DEX文件的数据的完整性,提升脱壳效果以及脱壳成功率。图2示出了根据本发明实施例二的应用文件的脱壳方法的流程示意图,如图2所示,该方法包括如下步骤:步骤S201,监控待脱壳文件所运行的当前待脱壳方法,读取当前待脱壳方法对应的进程信息。具体地,在解释器入口处插入监控代码,利用监控代码对经过解释器的当前待脱壳方法进行监控;其中,解释器入口为待脱壳文件进入解释器函数的初始位置。在Android源码中dalvik虚拟机的解释器入口处插入监控代码,对经过解释器的当前待脱壳方法进行监控,由于Android源码中dalvik虚拟机是解释执行的,并且监控代码的插入位置为解释器入口,因此待脱壳文件中每一个运行的方法都会经过解释器,得到的每一个运行的方法的内存数据均是真实有效的。可选地,在本实施的方法执行之前,进一步包括:将源码中虚拟机的可执行文件的解释模式修改为portable模式,portable模式适用于相应的编程运行环境中,例如C++等。通过该方式,第一,能够保证待脱壳文件中所有运行的语句都会经过解释器;第二,能够保证在源码中运行的任意APP都以portable模式运行;第三,能够保证待脱壳文件中的DEX文件可以编译为机器码的解释模式。实际应用中,还可以根据实际编程运行环境采取其他的解释模式,本发明对此不作限定。步骤S202,根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程。其中,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程具体为:判断进程是否为与应用的功能相关的程序所涉及的进程,若是,则进程为满足预设脱壳条件的进程。通过该方式直接判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程,例如,判断该进程是否为编程人员预先为该APP编写的与该APP的功能相关的程序所涉及的进程。此外,实际应用中,还可采取以下方式对当前待脱壳方法对应的进程进行判断:首先判断该进程是否是系统进程或者插件调用进程,若判断出该进程既不是系统进程也不是插件调用进程,则进一步判断该进程是否为与应用的功能相关的程序所涉及的进程。也就是说,满足预设脱壳条件的进程具体指:除系统自带进程或者第三方插件调用进程之外的,预先编写的与待脱壳文件相对应的程序所涉及的进程。实际应用中,可单独采用上述两种方式中的任意一种对当前待脱壳方法对应的进程进行判断,还可以结合上述两种方式进行判断,本发明对此不作限定。步骤S203,若判断出当前待脱壳方法对应的进程是满足预设脱壳条件的进程,则将当前待脱壳方法的内存数据转换为第一结构体信息,并将第一结构体信息进行存储。若判断出当前待脱壳方法对应的进程是满足预设脱壳条件的进程,则将该当前待脱壳方法的内存数据转换为第一结构体信息,且根据实际情况的不同,第一结构体信息可能有多个;而对于不满足预设脱壳条件的进程所对应的当前待脱壳方法,则对其内存数据不作处理。可选地,可将第一结构体信息存储在哈希表中,哈希表存储能够进行快速的查找,并且采用哈希表对第一结构体信息进行存储时,当检测到当前存储的第一结构体信息与之先前存储的第一结构体信息相同时,则不进行存储,也即哈希表存储的各个待脱壳方法之间均不相同。实际应用中,还可采取其他的方式对第一结构体信息进行存储,例如第一结构体信息存储在链表中,或者将第一结构体信息存储在二叉树中,本发明对此不作限定。步骤S204,当存储的第一结构体信息的数量大于或等于预设阈值时,根据任意一个第一结构体信息中包含的属性信息,确定DEX文件在待脱壳文件中的内存区域。步骤S204-步骤S205对应为根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息的方法,实际应用中,当存储的第一结构体信息的数量大于或等于预设阈值时,可根据任意一个第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息。相应地,可根据任意一个第一结构体信息,确定DEX文件在待脱壳文件中的内存区域。其中,预设阈值是根据待脱壳文件的大小确定的,若预设阈值过小,则后续修复过程中修复的次数较多;若预设阈值过大,则单次修复耗时较长,上述两种情况均会导致修复效率低下,因此可根据待脱壳文件的大小确定预设阈值。可选地,设定预设阈值为1000。其中,根据第一结构体信息中包含的属性信息,确定DEX文件在待脱壳文件中的内存区域的步骤具体包括:根据第一结构体信息中包含的第一属性信息确定DEX文件的长度;根据第一结构体信息中包含的第二属性信息确定DEX文件的起始位置,根据DEX文件的长度以及DEX文件的起始位置确定DEX文件在待脱壳文件中的内存区域。例如,根据Method结构体的clazz->pDvmDex属性可以确定DvmDex结构体,根据DvmDex结构体中的pDexFile->baseAddr属性可以确定DEX文件的起始位置,根据DvmDex结构体中的pDexFile->pHeader->fileSize属性可以确定DEX文件的长度,进而得到DEX文件在内存中的位置,即DEX文件在待脱壳文件中的内存区域。步骤S205,调用系统函数对内存区域内的数据进行解析,得到与DEX文件中的方法所对应的第二结构体信息。上述步骤S204所得到的DEX文件的内存区域为一整块内存,包含连续的一段数据,无法直接得到DEX文件所包含的各个方法的信息,因此需要该DEX文件的内存区域内的数据进行解析。例如,首先调用dexGetClassDef函数得到DexClassDef结构体,然后遍历DexClassDef结构体中的所有的directMethod函数和virtualMethod函数,调用dexGetMethodId、dexStringById、dexGetCode等系统函数对DexClassDef结构体进行解析,根据解析结果确定Method结构体,即与DEX文件所包含的各个方法所对应的第二结构体信息。步骤S206,分别确定第一结构体信息中的字节码以及第二结构体信息中的字节码。步骤S206-步骤S210对应为利用第一结构体信息对第二结构体信息进行修复的方法,首先,分别确定第一结构体信息所包含的字节码以及第二结构体信息所包含的字节码。步骤S207,将第一结构体信息中的字节码与第二结构体信息中的字节码进行比对,得到比对结果。第二结构体信息是根据内存中的DEX文件得到的,由于DEX文件中的部分代码可能被修改和映射到了内存中文件连续内存以外的其他存储区域里,会出现第二结构体信息中部分字节码位置处对应的字节码为空的情况,因而需要对第二结构体信息中的部分字节码进行修复。而第一结构体信息是通过监控运行中的待脱壳方法而得到的,该待脱壳方法的内存数据在内存中均是真实有效的,也即第一结构体信息在内存中是真实有效的,因此,本实施例的方法中利用第一结构体信息对第二结构体信息进行修复处理,能够保证脱壳后的DEX文件的数据完整性。具体地,首先遍历存储的第一结构体信息,将第一结构体信息中的字节码与第二结构体信息中的字节码进行比对,得到比对结果,其中,根据比对结果可以确定第二结构体信息相对于第一结构体信息所缺失的字节码。步骤S208,根据比对结果,确定第一结构体信息中第一字节码及第一字节码在第一结构体信息中的第一字节码位置,其中,第一字节码为通过步骤S207中的比对结果所确定的,具体的,第一字节码可以是第一结构体信息相对于第二结构体信息所增加的字节码部分,也就是第二结构体信息相对于第一结构体信息所缺失的字节码。根据比对结果,确定上述第一字节码,以及第一字节码在第一结构体信息中的第一字节码位置。步骤S209,确定第二结构体信息中与上述第一字节码位置相对应的第二字节码位置。根据上述步骤确定的第一字节码以及第一字节码位置,可以确定第二结构体信息中与上述第一字节码位置相对应的第二字节码位置。步骤S210,将第一字节码替换到第二字节码位置处,得到修复后的第二结构体信息,根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。该步骤将第二结构体信息相对于第一结构体信息所缺失的字节码替换到第二结构体信息中相对应的位置处,从而完成对第二结构体信息的修复,修复后的第二结构体信息也就是完整的DEX文件内存区域内的内存数据,将该完整的DEX文件内存区域内的内存数据写入文件,从而得到上述待脱壳文件脱壳之后的DEX文件。综上可知,考虑到现有技术中存在对待脱壳文件进行脱壳之后,得到的DEX文件中缺失了部分字节码的情况,该方式创新地采用了在虚拟机的解释器入口插入监控代码,以对经过该解释器的待脱壳方法进行监控,进而获取待脱壳方法所对应的进程的内存数据并转换为第一结构体信息,然后,利用第一结构体信息对DEX文件进行修复的方式。其中,将监控代码插入之解释器入口,能够保证待脱壳文件中每一个运行的方法都会经过此处,因此,能够保证得到的内存数据(第一结构体信息)均是真实有效的,并且利用第一结构体信息对DEX文件进行修复能够保证对待脱壳文件脱壳处理之后得到的DEX文件的内存数据是完整的,提升了脱壳效果以及脱壳成功率。图3示出了根据本发明实施例三的应用文件的脱壳装置的结构示意图,如图3所示,该装置包括:监控模块310、读取模块320、判断模块330、转换模块340、第二结构体信息确定模块350、修复模块360、脱壳模块370。监控模块310,适于监控待脱壳文件所运行的当前待脱壳方法;读取模块320,适于读取当前待脱壳方法对应的进程信息;判断模块330,适于根据当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;转换模块340,适于若判断出当前待脱壳方法对应的进程为满足预设脱壳条件的进程,则将当前待脱壳方法的内存数据转换为第一结构体信息;第二结构体信息确定模块350,适于根据第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息;修复模块360,适于利用第一结构体信息对第二结构体信息进行修复处理;脱壳模块370,适于根据修复后的第二结构体信息生成待脱壳文件脱壳后的DEX文件。根据本实施例提供的应用文件的脱壳装置,能够对加固后的应用文件进行有效脱壳,并且能够保证脱壳后的所得到的DEX文件的数据的完整性,提升脱壳效果以及脱壳成功率。图4示出了根据本发明实施例四的应用文件的脱壳装置的结构示意图,如图4所示,该装置在图3所示的装置的基础上,进一步包括:存储模块410、修改模块420。存储模块410,适于将第一结构体信息进行存储;则第二结构体信息确定模块350进一步适于,当存储的第一结构体信息的数量大于或等于预设阈值时,根据任意一个第一结构体信息确定待脱壳文件对应的DEX文件的第二结构体信息。在一个具体实施例中,第二结构体信息确定模块350进一步包括:内存区域确定单元351,适于根据第一结构体信息中包含的属性信息,确定DEX文件在待脱壳文件中的内存区域;解析单元352,适于调用系统函数对内存区域内的数据进行解析,得到与DEX文件中的方法所对应的第二结构体信息。内存区域确定单元351进一步适于:根据第一结构体信息中包含的第一属性信息确定DEX文件的长度;根据第一结构体信息中包含的第二属性信息确定DEX文件的起始位置;根据DEX文件的长度以及DEX文件的起始位置确定DEX文件在待脱壳文件中的内存区域。修复模块360进一步适于:分别确定第一结构体信息中的字节码以及第二结构体信息中的字节码;将第一结构体信息中的字节码与第二结构体信息中的字节码进行比对,得到比对结果;根据比对结果,确定第一结构体信息中第一字节码及第一字节码在第一结构体信息中的第一字节码位置,其中,第一字节码为第二结构体信息相对于第一结构体信息所缺失的字节码;确定第二结构体信息中与第一字节码位置相对应的第二字节码位置;将第一字节码替换到第二字节码位置处,得到修复后的第二结构体信息。监控模块310进一步适于:在解释器入口处插入监控代码,利用监控代码对经过解释器的当前待脱壳方法进行监控;其中,解释器入口为待脱壳文件进入解释器函数的初始位置。在一个具体实施例中,上述装置进一步包括:修改模块420,适于将源码中虚拟机的可执行文件的解释模式修改为portable模式。判断模块330进一步适于:判断进程是否为与应用的功能相关的程序所涉及的进程,若是,则进程为满足预设脱壳条件的进程。存储模块410进一步适于:将第一结构体信息存储在哈希表中;或者将第一结构体信息存储在链表中;或者将第一结构体信息存储在二叉树中。根据本实施例所提供的应用文件的脱壳装置,通过在虚拟机的解释器入口插入监控代码,以对经过该解释器的待脱壳方法进行监控,进而获取待脱壳方法所对应的进程的内存数据并转换为第一结构体信息,然后,利用第一结构体信息对DEX文件进行修复的方式。首先,将监控代码插入之解释器入口,能够保证待脱壳文件中每一个运行的方法都会经过此处,因此,能够保证得到的内存数据(第一结构体信息)均是真实有效的;其次,利用第一结构体信息对DEX文件进行修复能够保证对待脱壳文件脱壳处理之后得到的DEX文件的内存数据是完整的,提升了脱壳效果以及脱壳成功率。本发明实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的应用文件的脱壳方法。图5示出了根据本发明实施例五的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(CommunicationsInterface)504、存储器(memory)506、以及通信总线508。其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。处理器502,用于执行程序510,具体可以执行上述应用文件的脱壳方法实施例中的相关步骤。具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。程序510具体可以用于使得处理器502执行上述任意方法实施例中的应用文件的脱壳方法。程序510中各步骤的具体实现可以参见上述应用文件的脱壳方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。本发明公开了:A1.一种应用文件的脱壳方法,其特征在于,包括:监控待脱壳文件所运行的当前待脱壳方法,读取所述当前待脱壳方法对应的进程信息;根据所述当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;若是,则将所述当前待脱壳方法的内存数据转换为第一结构体信息;根据所述第一结构体信息确定所述待脱壳文件对应的DEX文件的第二结构体信息;利用所述第一结构体信息对所述第二结构体信息进行修复处理,根据修复后的第二结构体信息生成所述待脱壳文件脱壳后的DEX文件。A2.根据A1所述的方法,其特征在于,所述第一结构体信息为多个,则将所述当前待脱壳方法的内存数据转换为第一结构体信息的步骤之后,进一步包括:将所述第一结构体信息进行存储;则所述根据所述第一结构体信息确定所述待脱壳文件对应的DEX文件的第二结构体信息进一步包括:当存储的第一结构体信息的数量大于或等于预设阈值时,根据任意一个第一结构体信息确定所述待脱壳文件对应的DEX文件的第二结构体信息。A3.根据A1或A2所述的方法,其特征在于,所述根据所述第一结构体信息确定所述待脱壳文件对应的DEX文件的第二结构体信息进一步包括:根据所述第一结构体信息中包含的属性信息,确定所述DEX文件在所述待脱壳文件中的内存区域;调用系统函数对所述内存区域内的数据进行解析,得到与所述DEX文件中的方法所对应的第二结构体信息。A4.根据A3所述的方法,其特征在于,所述根据所述第一结构体信息中包含的属性信息,确定所述DEX文件在所述待脱壳文件中的内存区域进一步包括:根据所述第一结构体信息中包含的第一属性信息确定所述DEX文件的长度;根据所述第一结构体信息中包含的第二属性信息确定所述DEX文件的起始位置;根据所述DEX文件的长度以及DEX文件的起始位置确定所述DEX文件在所述待脱壳文件中的内存区域。A5.根据A1所述的方法,其特征在于,所述利用所述第一结构体信息对所述第二结构体信息进行修复处理进一步包括:分别确定所述第一结构体信息中的字节码以及第二结构体信息中的字节码;将所述第一结构体信息中的字节码与第二结构体信息中的字节码进行比对,得到比对结果;根据所述比对结果,确定所述第一结构体信息中第一字节码及所述第一字节码在所述第一结构体信息中的第一字节码位置,其中,所述第一字节码为所述第二结构体信息相对于所述第一结构体信息所缺失的字节码;确定所述第二结构体信息中与所述第一字节码位置相对应的第二字节码位置;将所述第一字节码替换到所述第二字节码位置处,得到修复后的第二结构体信息。A6.根据A1所述的方法,其特征在于,所述监控待脱壳文件所运行的当前待脱壳方法进一步包括:在解释器入口处插入监控代码,利用所述监控代码对经过所述解释器的当前待脱壳方法进行监控;其中,所述解释器入口为所述待脱壳文件进入解释器函数的初始位置。A7.根据A1所述的方法,其特征在于,所述方法执行之前,进一步包括:将源码中虚拟机的可执行文件的解释模式修改为portable模式。A8.根据A1所述的方法,其特征在于,所述判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程进一步包括:判断所述进程是否为与应用的功能相关的程序所涉及的进程,若是,则所述进程为满足预设脱壳条件的进程。A9.根据A2所述的方法,其特征在于,所述将所述第一结构体信息进行存储进一步包括:将所述第一结构体信息存储在哈希表中;或者将所述第一结构体信息存储在链表中;或者将所述第一结构体信息存储在二叉树中。A10.根据A2所述的方法,其特征在于,所述预设阈值是根据所述待脱壳文件的大小确定的。A11.根据A2所述的方法,其特征在于,所述预设阈值为1000。B12.一种应用文件的脱壳装置,其特征在于,包括:监控模块,适于监控待脱壳文件所运行的当前待脱壳方法;读取模块,适于读取所述当前待脱壳方法对应的进程信息;判断模块,适于根据所述当前待脱壳方法对应的进程信息,判断当前待脱壳方法对应的进程是否为满足预设脱壳条件的进程;转换模块,适于若判断出当前待脱壳方法对应的进程为满足预设脱壳条件的进程,则将所述当前待脱壳方法的内存数据转换为第一结构体信息;第二结构体信息确定模块,适于根据所述第一结构体信息确定所述待脱壳文件对应的DEX文件的第二结构体信息;修复模块,适于利用所述第一结构体信息对所述第二结构体信息进行修复处理;脱壳模块,适于根据修复后的第二结构体信息生成所述待脱壳文件脱壳后的DEX文件。B13.根据B12所述的装置,其特征在于,所述第一结构体信息为多个,则所述装置进一步包括:存储模块,适于将所述第一结构体信息进行存储;则所述第二结构体信息确定模块进一步适于,当存储的第一结构体信息的数量大于或等于预设阈值时,根据任意一个第一结构体信息确定所述待脱壳文件对应的DEX文件的第二结构体信息。B14.根据B12或B13所述的装置,其特征在于,所述第二结构体信息确定模块进一步包括:内存区域确定单元,适于根据所述第一结构体信息中包含的属性信息,确定所述DEX文件在所述待脱壳文件中的内存区域;解析单元,适于调用系统函数对所述内存区域内的数据进行解析,得到与所述DEX文件中的方法所对应的第二结构体信息。B15.根据B14所述的装置,其特征在于,所述内存区域确定单元进一步适于:根据所述第一结构体信息中包含的第一属性信息确定所述DEX文件的长度;根据所述第一结构体信息中包含的第二属性信息确定所述DEX文件的起始位置;根据所述DEX文件的长度以及DEX文件的起始位置确定所述DEX文件在所述待脱壳文件中的内存区域。B16.根据B12所述的装置,其特征在于,所述修复模块进一步适于:分别确定所述第一结构体信息中的字节码以及第二结构体信息中的字节码;将所述第一结构体信息中的字节码与第二结构体信息中的字节码进行比对,得到比对结果;根据所述比对结果,确定所述第一结构体信息中第一字节码及所述第一字节码在所述第一结构体信息中的第一字节码位置,其中,所述第一字节码为所述第二结构体信息相对于第一结构体信息所缺失的字节码;确定所述第二结构体信息中与所述第一字节码位置相对应的第二字节码位置;将所述第一字节码替换到所述第二字节码位置处,得到修复后的第二结构体信息。B17.根据B12所述的装置,其特征在于,所述监控模块进一步适于:在解释器入口处插入监控代码,利用所述监控代码对经过所述解释器的当前待脱壳方法进行监控;其中,所述解释器入口为所述待脱壳文件进入解释器函数的初始位置。B18.根据B12所述的装置,其特征在于,所述装置进一步包括:修改模块,适于将源码中虚拟机的可执行文件的解释模式修改为portable模式。B19.根据B12所述的装置,其特征在于,所述判断模块进一步适于:判断所述进程是否为与应用的功能相关的程序所涉及的进程,若是,则所述进程为满足预设脱壳条件的进程。B20.根据B13所述的装置,其特征在于,所述存储模块进一步适于:将所述第一结构体信息存储在哈希表中;或者将所述第一结构体信息存储在链表中;或者将所述第一结构体信息存储在二叉树中。B21.根据B13所述的装置,其特征在于,所述预设阈值是根据所述待脱壳文件的大小确定的。B22.根据B13所述的装置,其特征在于,所述预设阈值为1000。C23.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A11任一项所述的应用文件的脱壳方法对应的操作。D24.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行如A1-A11任一项所述的应用文件的脱壳方法对应的操作。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1