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

文档序号:12064135阅读:217来源:国知局
应用脱壳的方法及装置与流程

本发明涉及软件领域,具体涉及一种应用脱壳的方法及装置。



背景技术:

目前搭载在智能操作系统上的终端设备已经得到了广泛的应用。随着终端设备的发展,基于终端设备平台的安全问题也日益突出。越来越多的开发者在开发出基于终端设备平台的应用后,会使用如第三方平台提供的加固服务进行保护,对抗逆向工程和代码注入攻击等。但对监管部门和应用市场而言,其需要对应用的安全性进行分析和评估。而加固后的应用因为加固使得对应用进行程序行为分析等过程造成极大的困难。尤其是对于应用的静态分析更加困难。

对于每一个应用进行程序分析,都必须进行人工脱壳,需要极度耗费时间和精力。因此监管部门和应用市场急需一种自动脱壳的方法,以便提高脱壳和程序分析的效率和效果。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的应用脱壳的方法及装置。

根据本发明的一个方面,提供了一种应用脱壳的方法,包括:

使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;

根据加固厂商,获取对应的加固方案;

执行加固方案对应的脱壳方案,获取脱壳后的应用。

根据本发明的另一方面,提供了一种应用脱壳的装置,包括:

解析模块,用于使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;

获取模块,用于根据加固厂商,获取对应的加固方案;

脱壳模块,用于执行加固方案对应的脱壳方案,获取脱壳后的应用。

根据本发明的应用脱壳的方法及装置,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;执行加固方案对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用的加固厂商,执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用,即还原为加固前的应用。同时,也使得基于应用的后续程序分析、安全检测等效率更高、效果更好。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的应用脱壳的方法的流程示意图;

图2示出了根据本发明另一个实施例的应用脱壳的方法的流程示意图;

图3示出了根据本发明一个实施例的应用脱壳的装置的功能结构示意图;

图4示出了根据本发明一个实施例的应用脱壳的装置中脱壳模块的功能结构示意图;

图5示出了根据本发明一个实施例的应用脱壳的装置中脱壳模块的功能结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的应用脱壳的方法的流程示意图,如图1所示,该方法具体包括如下步骤:

步骤S101,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商。

其中,本文中所述的应用可以是移动应用,例如IOS应用,安卓应用,也可以是非移动应用,例如windows系统应用等。

使用自动化脚本解析已经加固后的应用代码,从中可以查找到加固厂商的标识。不同的加固厂商均具有各自不同的标识。根据标识可以确定具体的加固厂商。如可以预先设置列表,记录不同标识与加固厂商的对应关系。具体的可以记录为如加固厂商娜迦,标识libchaosvmp.so、libddog.so、libfdog.so;加固厂商爱加密,标识libexec.so、libexecmain.so;加固厂商梆梆,标识libsecexe.so、libsecmain.so、libDexHelper.so;加固厂商360,标识libprotectClass.so、libjiagu.so;加固厂商通付盾,标识libegis.so;加固厂商网秦,标识libnqshield.so;加固厂商百度,标识libbaiduprotect.so等。查找到加固厂商的标识后,根据标识与加固厂商的对应关系,获取对应的加固的应用的加固厂商。

步骤S102,根据加固厂商,获取对应的加固方案。

加固方案可以分为整体加固方案和非整体加固方案。整体加固方案为将原应用加密处理,在其上添加壳文件,并将解密脱壳的代码添加到壳文件中。非整体加固方案为应用中的各部分分别进行加固,而不是将应用整体的进行加固。

通常情况下,加固厂商所采用的加固方案一般都是固定的。通过如预设列表的方式,在列表中记录加固厂商及其采用的加固方案。根据具体的加固厂商,从预设列表中可以获取其对应的加固方案。

步骤S103,执行加固方案对应的脱壳方案,获取脱壳后的应用。

不同的加固方案需要对应不同的脱壳方案。当加固方案为整体加固方案时,脱壳方案为整体脱壳方案;加固方案为非整体加固方案时,脱壳方案为重组脱壳方案。

根据加固方案,确定具体的脱壳方案后,执行该脱壳方案,可以获取到脱壳后的应用。即对加固方案进行脱壳,还原为加固前的应用。

根据本发明的应用脱壳的方法,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;执行加固方案对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案,执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用,即还原为加固前的应用。同时,也使得基于应用的后续程序分析、安全检测等效率更高、效果更好。

图2示出了根据本发明另一个实施例的应用脱壳的方法的流程示意图,如图2所示,该方法具体包括如下步骤:

步骤S201,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商。

步骤S202,根据加固厂商,获取对应的加固方案。

以上步骤可参考图1实施例中步骤S101-S102,在此不再赘述。

步骤S203,根据加固方案确定脱壳方案。

不同的加固方案需要对应不同的脱壳方案。根据加固方案确定对应的脱壳方案。当加固方案为整体加固方案时,脱壳方案为整体脱壳方案;加固方案为非整体加固方案时,脱壳方案为重组脱壳方案。

当确定的脱壳方案为整体脱壳方案时,执行步骤S204-S206;当确定的脱壳方案为重组脱壳方案时,执行步骤S207-S214。

步骤S204,安装并启动加固后的应用。

步骤S205,修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小。

步骤S206,从内存中提取解密脱壳后的应用,存储为脱壳后的应用。

整体加固方案后的应用在运行时,将添加的壳文件作为应用运行的入口点。首先运行壳文件,在其运行过程中加载壳文件中的解密脱壳的代码。执行加载的解密脱壳的代码,解密并释放出原应用至内存空间中。而后动态加载原应用,最终执行原应用的执行逻辑。

针对整体加固方案本身的脱壳特征,制定整体脱壳方案。具体的执行过程如下:

首先安装加固后的应用,启动所安装的应用。在启动该应用后,不需再附加其他任何调试器,运行由整体加固方案其本身附带的解密脱壳流程。同时,查找到该应用的壳文件中解密脱壳的代码,修改解密脱壳的代码,如修改解密脱壳代码中调用的一些函数,在其中添加功能。使其一方面继续执行解密脱壳流程,另一方面同时从该解密脱壳流程的过程中获取解密脱壳后的应用在内存中的地址、大小等信息。在获取到这些信息后,根据这些信息,可以从内存中提取到解密脱壳后的应用,将其存储在本地磁盘或硬盘等存储设备上,即为脱壳后的应用。

步骤S207,读取应用的代码,按照应用的文件格式划分和切割应用的代码。

非整体加固方案后的应用在运行时,会释放出一个不完整但可以通过系统运行时校验的应用文件。该不完整应用文件中自带了修复模块。修复模块在运行时会注入代码,通过注入的代码可以动态监控系统运行。完成所有代码的注入后,动态加载并执行不完整应用。实时动态监控该不完整应用在运行时加载的代码,在加载每一个类的类时,修复模块根据该类的签名信息判断该类是否需要进行修复,对需要进行修复的类进行修复,使本次加载的类在真正加载前已经处于修复完成的状态,以便应用进行加载。在加载每一个类的类时,都重复执行上述过程,以保证加载的类在真正加载前已经处于修复完成的状态。即非整体加固方案后的应用在运行时,对应用的脱壳不是一次完成的,而是在每次应用加载类时,对类进行修复,获取修复完成的类。

针对非整体加固方案本身的脱壳特征,制定重组脱壳方案。首先,读取非整体加固方案后应用的代码,按照应用的文件格式划分和切割应用的代码。其中,将应用的代码划分和切割为包括头文件、数据文件、与数据文件一一对应的数据索引区及其他文件。头文件在应用运行时不会被加载,也不会被非整体加固方案进行加固,不需要对头文件进行处理。数据文件包括应用中所有数据项,数据项包括了应用要调用的类的代码、参数、数据结构等。数据索引区包括应用中所有类名称及其要调用的数据项的地址。该地址可以记录数据项在应用文件中的偏移地址或直接指向数据项在数据文件中的实际地址指示符,通过该地址,可以找到该数据项。

步骤S208,动态模拟应用运行,获取应用运行时所调用的类名称。

动态模拟应用的运行,获取应用运行时每一次所调用的类名称,即应用中每个接口的名称。

步骤S209,依次根据类名称,从数据索引区中找到类对应的数据项的地址。

步骤S210,根据地址从数据文件中提取类对应的数据项。

步骤S211,将数据项重构在预设的第二数据文件中。

步骤S212,修改数据索引区中该数据项的地址,将地址修改为该数据项在第二数据文件中的地址。

根据类名称,可以从数据索引区中找到该类对应的数据项的地址。根据地址,从数据文件中提取出类对应的数据项。将数据项重构在预设的第二数据文件中。预设的第二数据文件为新的空白数据文件。将数据项重构后,修改数据索引区中该数据项的原地址,将原地址修改为该数据项在第二数据文件中的地址。该数据项在第二数据文件中的地址为该数据项相对于应用文件的偏移地址或为指向数据项在第二数据文件中的实际地址指示符等。

可选地,若该类的签名信息中标识了该类为非整体加固方案加固后的类,将该数据项重构在预设的第二数据文件中。若该类的签名信息中没有标识该类为非整体加固方案加固后的类,可以对该类对应的数据项不进行处理。

步骤S213,判断是否遍历完应用数据索引区中每一个类所对应的数据项。

判断是否遍历完应用数据索引区中每一个类所对应的数据项。若已遍历完应用数据索引区中每一个类所对应的数据项,即已经将所有需修复的数据项均重构,执行步骤S214。否则,重复执行步骤S209-S212,直至遍历完应用数据索引区中每一个类所对应的数据项。

步骤S214,将头文件、数据文件、数据索引区与第二数据文件进行拼接,得到脱壳后的应用。

执行上述步骤S208-S213后,得到修改后的数据索引区及新生成的第二数据文件。将原头文件、数据文件与修改后的数据索引区及新生成的第二数据文件进行拼接,得到脱壳后的应用。

根据本发明的应用脱壳的方法,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;根据加固方案确定脱壳方案。执行对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案,执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用,即还原为加固前的应用。进一步,脱壳方案在基于加固方案本身脱壳的基础上,整体脱壳方案通过修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小,从内存中提取解密脱壳后的应用,存储为脱壳后的应用;重组脱壳方案将应用进行划分和切割,根据应用运行时加载的类名称,获取对应的数据项。将数据项重构在预设的第二数据文件,并修改数据索引区中数据项对应的地址。在将已划分和切割的头文件、数据文件与修改后的数据索引区及新生成的第二数据文件进行拼接,从而实现对应用的重组,得到脱壳后的应用。本发明的脱壳效果好、效率高,同时,也使得基于应用的后续程序分析、安全检测等效率更高、效果更好。

图3示出了根据本发明一个实施例的应用脱壳的装置的功能结构示意图。如图3所示,应用脱壳的装置包括如下模块:

解析模块310,用于使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商。

其中,本文中所述的应用可以是移动应用,例如IOS应用,安卓应用,也可以是非移动应用,例如windows系统应用等。

解析模块310使用自动化脚本解析已经加固后的应用代码,从中可以查找到加固厂商的标识。不同的加固厂商均具有各自不同的标识。解析模块310根据标识可以确定具体的加固厂商。如解析模块310可以预先设置列表,记录不同标识与加固厂商的对应关系。具体的解析模块310预先设置的列表可以记录为如加固厂商娜迦,标识libchaosvmp.so、libddog.so、libfdog.so;加固厂商爱加密,标识libexec.so、libexecmain.so;加固厂商梆梆,标识libsecexe.so、libsecmain.so、libDexHelper.so;加固厂商360,标识libprotectClass.so、libjiagu.so;加固厂商通付盾,标识libegis.so;加固厂商网秦,标识libnqshield.so;加固厂商百度,标识libbaiduprotect.so等。解析模块310查找到加固厂商的标识后,根据标识与加固厂商的对应关系,获取对应的加固的应用的加固厂商。

获取模块320,用于根据加固厂商,获取对应的加固方案。

加固方案可以分为整体加固方案和非整体加固方案。整体加固方案为将原应用加密处理,在其上添加壳文件,并将解密脱壳的代码添加到壳文件中。非整体加固方案为应用中的各部分分别进行加固,而不是将应用整体的进行加固。

通常情况下,加固厂商所采用的加固方案一般都是固定的。获取模块320通过如预设列表的方式,在列表中记录加固厂商及其采用的加固方案。获取模块320根据具体的加固厂商,从预设列表中可以获取其对应的加固方案。

脱壳模块330,用于执行加固方案对应的脱壳方案,获取脱壳后的应用。

不同的加固方案需要对应不同的脱壳方案。当加固方案为整体加固方案时,脱壳方案为整体脱壳方案;加固方案为非整体加固方案时,脱壳方案为重组脱壳方案。

脱壳模块330根据加固方案,确定具体的脱壳方案后,执行该脱壳方案,可以获取到脱壳后的应用。即脱壳模块330对加固方案进行脱壳,还原为加固前的应用。

进一步,根据加固方案确定对应的脱壳方案。当加固方案为整体加固方案时,脱壳方案为整体脱壳方案,脱壳模块330还包括了如图4所示的模块:

安装启动模块331,用于安装并启动加固后的应用。

修改模块332,用于修改加固方案的解壳流程中的函数,获取解壳后的应用在内存中的地址及大小。

提取模块333,用于将从内存中提取的解壳后的应用存储为脱壳后的应用。

整体加固方案后的应用在运行时,将添加的壳文件作为应用运行的入口点。首先运行壳文件,在其运行过程中加载壳文件中的解密脱壳的代码。执行加载的解密脱壳的代码,解密并释放出原应用至内存空间中。而后动态加载原应用,最终执行原应用的执行逻辑。

针对整体加固方案本身的脱壳特征,制定整体脱壳方案。具体的执行过程如下:

首先安装启动模块331安装加固后的应用,启动所安装的应用。在安装启动模块331启动该应用后,不需再附加其他任何调试器,运行由整体加固方案其本身附带的解密脱壳流程。同时,修改模块332查找到该应用的壳文件中解密脱壳的代码,修改解密脱壳的代码,如修改模块332修改解密脱壳代码中调用的一些函数,在其中添加功能。使其一方面继续执行解密脱壳流程,另一方面同时从该解密脱壳流程的过程中获取解密脱壳后的应用在内存中的地址、大小等信息。修改模块332在获取到这些信息后,提取模块333根据这些信息,可以从内存中提取到解密脱壳后的应用,将其存储在本地磁盘或硬盘等存储设备上,即为脱壳后的应用。

进一步,根据加固方案确定对应的脱壳方案。当加固方案为非整体加固方案时,脱壳方案为重组脱壳方案,脱壳模块330还包括了如图5所示的模块:

划分切割模块334,用于读取应用的代码,按照应用的文件格式划分和切割应用的代码。

重构模块336,用于动态模拟应用运行,获取应用运行时所调用的类名称;依次根据类名称,从数据索引区中找到类对应的数据项在数据文件中的地址;根据地址从数据文件中提取类对应的数据项;将数据项重构在预设的第二数据文件中;修改数据索引区中该数据项的地址,将地址修改为该数据项在第二数据文件中的地址。

循环模块337,用于重复执行重构模块336,直至遍历完应用数据索引区中每一个类所对应的数据项。

拼接模块338,用于将头文件、数据文件、数据索引区与第二数据文件进行拼接,得到脱壳后的应用。

非整体加固方案后的应用在运行时,会释放出一个不完整但可以通过系统运行时校验的应用文件。该不完整应用文件中自带了修复模块。修复模块在运行时会注入代码,通过注入的代码可以动态监控系统运行。完成所有代码的注入后,动态加载并执行不完整应用。实时动态监控该不完整应用在运行时加载的代码,在加载每一个类的类时,修复模块根据该类的签名信息判断该类是否需要进行修复,对需要进行修复的类进行修复,使本次加载的类在真正加载前已经处于修复完成的状态,以便应用进行加载。在加载每一个类的类时,都重复执行上述过程,以保证加载的类在真正加载前已经处于修复完成的状态。即非整体加固方案后的应用在运行时,对应用的脱壳不是一次完成的,而是在每次应用加载类时,对类进行修复,获取修复完成的类。

针对非整体加固方案本身的脱壳特征,制定重组脱壳方案。首先,划分切割模块334读取非整体加固方案后应用的代码,按照应用的文件格式划分和切割应用的代码。其中,划分切割模块334将应用的代码划分和切割为包括头文件、数据文件、与数据文件一一对应的数据索引区及其他文件。头文件在应用运行时不会被加载,也不会被非整体加固方案进行加固,不需要对头文件进行处理。数据文件包括应用中所有数据项,数据项包括了应用要调用的类的代码、参数、数据结构等。数据索引区包括应用中所有类名称及其要调用的数据项的地址。该地址可以记录数据项在应用文件中的偏移地址或直接指向数据项在数据文件中的实际地址指示符,通过该地址,可以找到该数据项。

类获取模块335动态模拟应用的运行,获取应用运行时每一次所调用的类名称,即应用中每个接口的名称。

重构模块336根据类名称,可以从数据索引区中找到该类对应的数据项的地址。根据地址,重构模块336从数据文件中提取出类对应的数据项。重构模块336将数据项重构在预设的第二数据文件中。预设的第二数据文件为新的空白数据文件。重构模块336将数据项重构后,修改数据索引区中该数据项的原地址,将原地址修改为该数据项在第二数据文件中的地址。该数据项在第二数据文件中的地址为该数据项相对于应用文件的偏移地址或为指向数据项在第二数据文件中的实际地址指示符等。

可选地,若该类的签名信息中标识了该类为非整体加固方案加固后的类,重构模块336将该数据项重构在预设的第二数据文件中。若该类的签名信息中没有标识该类为非整体加固方案加固后的类,重构模块336可以对该类对应的数据项不进行处理。

循环模块337判断是否遍历完应用数据索引区中每一个类所对应的数据项。若已遍历完应用数据索引区中每一个类所对应的数据项,即重构模块336已经将所有需修复的数据项均重构,执行拼接模块338。否则,重复执行重构模块336,直至遍历完应用数据索引区中每一个类所对应的数据项。

循环模块337判断遍历完应用数据索引区中每一个类所对应的数据项后,拼接模块338将原头文件、数据文件与修改后的数据索引区及新生成的第二数据文件进行拼接,得到脱壳后的应用。

根据本发明的应用脱壳的装置,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;根据加固方案确定脱壳方案。执行对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案,执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用,即还原为加固前的应用。进一步,脱壳方案在基于加固方案本身脱壳的基础上,整体脱壳方案通过修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小,从内存中提取解密脱壳后的应用,存储为脱壳后的应用;重组脱壳方案将应用进行划分和切割,根据应用运行时加载的类名称,获取对应的数据项。将数据项重构在预设的第二数据文件,并修改数据索引区中数据项对应的地址。在将已划分和切割的头文件、数据文件与修改后的数据索引区及新生成的第二数据文件进行拼接,从而实现对应用的重组,得到脱壳后的应用。本发明的脱壳效果好、效率高,同时,也使得基于应用的后续程序分析、安全检测等效率更高、效果更好。

至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应该被理解和认定为覆盖了所有这些其他变型或修改。

本领域技术人员应当理解,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。此外,本发明也不针对任何特定编程语言,应当明白,可以利用各种编程语言实现本发明描述的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

需要注意的是,尽管在上面的说明中详细描述了应用脱壳的装置的若干模块,但是这种划分仅仅是示例性的,并非是强制性的。本领域的技术人员可以理解,实际上,可以对实施例中的模块进行自适应性地改变,将实施例中的多个模块组合成一个模块,也可将一个模块划分成多个模块。

此外,尽管在附图中以特定顺序描述了本发明实施操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。可以省略某些步骤,将多个步骤合并为一个步骤执行,或者将一个步骤分成多个步骤执行。

综上所述,应用本发明所述的应用脱壳的方法及装置,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;根据加固方案确定脱壳方案。执行对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案,执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用,即还原为加固前的应用。进一步,脱壳方案在基于加固方案本身脱壳的基础上,整体脱壳方案通过修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小,从内存中提取解密脱壳后的应用,存储为脱壳后的应用;重组脱壳方案将应用进行划分和切割,根据应用运行时加载的类名称,获取对应的数据项。将数据项重构在预设的第二数据文件,并修改数据索引区中数据项对应的地址。在将已划分和切割的头文件、数据文件与修改后的数据索引区及新生成的第二数据文件进行拼接,从而实现对应用的重组,得到脱壳后的应用。本发明的脱壳效果好、效率高,同时,也使得基于应用的后续程序分析、安全检测等效率更高、效果更好。

以上对本发明的方法和具体实施方法进行了详细的介绍,并给出了相应的实施例。当然,除上述实施例外,本发明还可以有其它实施方式,凡采用等同替换或等效变换形成的技术方案,均落在本发明所要保护的范围之内。

本发明公开了:A1、一种应用脱壳的方法,其中,包括:

使用自动化脚本解析加固后的应用代码,获取所述加固的应用的加固厂商;

根据所述加固厂商,获取对应的加固方案;

执行所述加固方案对应的脱壳方案,获取脱壳后的应用。

A2、根据A1所述的方法,其中,所述脱壳方案为整体脱壳方案或重组脱壳方案。

A3、根据A2所述的方法,其中,所述加固方案为整体加固方案,所述脱壳方案为整体脱壳方案;

所述执行所述加固方案对应的脱壳方案,获取脱壳后的应用进一步包括:

安装并启动所述加固后的应用;

修改整体加固方案的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小;

从内存中提取所述解密脱壳后的应用,存储为脱壳后的应用。

A4、根据A2所述的方法,其中,所述加固方案为非整体加固方案,所述脱壳方案为重组脱壳方案;

所述执行所述加固方案对应的脱壳方案,获取脱壳后的应用进一步包括:

读取所述应用的代码,按照所述应用的文件格式划分和切割所述应用的代码;其中,将所述应用的代码划分和切割为头文件、数据文件、与所述数据文件一一对应的数据索引区;

动态模拟应用运行,获取应用运行时所调用的类名称;依次根据所述类名称,从所述数据索引区中找到所述类对应的数据项的地址;根据所述地址从所述数据文件中提取所述类对应的数据项;将所述数据项重构在预设的第二数据文件中;修改所述数据索引区中该数据项的地址,将所述地址修改为该数据项在第二数据文件中的地址;重复执行此步骤,直至遍历完应用数据索引区中每一个类所对应的数据项;

将所述头文件、数据文件、数据索引区与所述第二数据文件进行拼接,得到脱壳后的应用。

A5、根据A4所述的方法,其中,所述数据文件包括应用中所有数据项;所述数据索引区包括应用中所有类名称及其对应的数据项的地址。

A6、根据A1所述的方法,其中,所述使用自动化脚本解析加固后的应用代码,获取所述加固的应用的加固厂商进一步包括:

使用自动化脚本解析加固后的应用代码,查找加固厂商的标识,获取对应的所述加固的应用的加固厂商。

A7、根据A1-A6任一项所述的方法,其中,所述应用为移动应用或非移动应用。

本发明还公开了:B8、一种应用脱壳的装置,其中,包括:

解析模块,用于使用自动化脚本解析加固后的应用代码,获取所述加固的应用的加固厂商;

获取模块,用于根据所述加固厂商,获取对应的加固方案;

脱壳模块,用于执行所述加固方案对应的脱壳方案,获取脱壳后的应用。

B9、根据B8所述的装置,其中,所述脱壳方案为整体脱壳方案或重组脱壳方案。

B10、根据B9所述的装置,其中,所述加固方案为非整体加固方案,所述脱壳方案为重组脱壳方案;

所述脱壳模块进一步包括:

安装启动模块,用于安装并启动所述加固后的应用;

修改模块,用于修改所述加固方案的解壳流程中的函数,获取解壳后的应用在内存中的地址及大小;

提取模块,用于将从内存中提取的所述解壳后的应用存储为脱壳后的应用。

B11、根据B9所述的装置,其中,所述加固方案为非整体加固方案,所述脱壳方案为重组脱壳方案;

所述脱壳模块进一步包括:

划分切割模块,用于读取所述应用的代码,按照所述应用的文件格式划分和切割所述应用的代码;其中,将所述应用的代码划分和切割为头文件、数据文件、与所述数据文件一一对应的数据索引区;

类获取模块,用于动态模拟应用运行,获取应用运行时所调用的类名称;

重构模块,用于依次根据所述类名称,从所述数据索引区中找到所述类对应的数据项的地址;根据所述地址从所述数据文件中提取所述类对应的数据项;将所述数据项重构在预设的第二数据文件中;修改所述数据索引区中该数据项的地址,将所述地址修改为该数据项在第二数据文件中的地址;

循环模块,用于重复执行所述重构模块,直至遍历完应用数据索引区中每一个类所对应的数据项;

拼接模块,用于将所述头文件、数据文件、数据索引区与所述第二数据文件进行拼接,得到脱壳后的应用。

B12、根据B11所述的装置,其中,所述数据文件包括应用中所有数据项;所述数据索引区包括应用中所有类名称及其对应的数据项的地址。

B13、根据B8所述的装置,其中,所述解析模块进一步用于:

使用自动化脚本解析加固后的应用代码,查找加固厂商的标识,获取对应的所述加固的应用的加固厂商。

B14、根据B8-B13任一项所述的装置,其中,所述应用为移动应用或非移动应用。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1