一种防重打包的方法及其装置与流程

文档序号:11691227阅读:250来源:国知局
一种防重打包的方法及其装置与流程

本申请涉及计算机技术领域,尤其涉及一种防重打包的方法及其装置。



背景技术:

目前,许多恶意应用软件通过重打包的方式修改原始的安装包,在原始的安装包中嵌入广告、自动下载恶意软件以及实现root等程序。

重打包的过程如图1所示:首先,对原始安装包进行反编译,获得该原始安装包的源代码,然后,用户对该源代码进行修改,例如,添加其他代码,添加的代码可以是广告,也可以是自动下载恶意软件的程序,等等,最后,对修改后的文件进行重打包,获得重打包的安装包。

由于上述重打包的过程中对源代码进行了修改,因此,重打包的安装包的自签名,不再是原始安装包的自签名。因此,现有技术中,防重打包的方法就可以通过校验安装包的自签名,从而判断该安装包是否是被重打包,具体验证过程如图2所示:

当某安装包被安装时,该安装包中的目标文件就会被运行,同时,在该安装包中的安全动态库也会被加载,通常,为了保证信息的安全性,会将一些验证信息存储在安全动态库中,该验证信息包括:该安装包对应的原始安装包的自签名。由于操作系统提供了验证安装包自签名的接口,因此,操作系统从该目标文件中获取该安装包的自签名,以及从该安全动态库中获取原始安装包的自签名后,验证该安装包的自签名与该原始安装包的自签名是否一致,若一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

现有技术中,防重打包的方法还可以是:操作系统计算本次安装的安装包的哈希(hash)值,并对该哈希值进行校验,具体地,将该哈希值与原始安装包的哈希值进行对比,若一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

上述两种现有技术中的防重打包方法,必须建立在完全信任的操作系统下,才能有效的防止重打包的情形,但由于目前很多操作系统具有开源性,因此,用户可以对原有的操作系统进行改造,使操作系统不进行校验安装包自签名的过程,以及不进行校验安装包哈希值的过程,这样,无论用户下载的安装包是否是经过重打包的安装包,操作系统都会默认该安装包是原始安装包。

另外,上述第二种防重打包的方法中,有时待安装的安装包占用的内存会很大,这样,操作系统在计算该安装包的哈希值时,会影响操作系统的验证效率。



技术实现要素:

鉴于上述问题,本申请提供了一种防重打包的方法及其装置,用于解决现有技术中在系统通过校验安装包自签名,有时无法有效地验证该安装包是否被重打包的问题,以及解决现有技术中系统通过计算安装包的哈希值来校验安装包是否被重打包时,有时由于安装包占用内存较大,导致验证效率较低的问题。

本申请提供了一种防重打包的方法,该方法包括:

运行安装包中的目标文件并加载所述安装包中的安全动态库;

根据所述目标文件中的代码执行下述步骤:

获取所述目标文件中嵌入的数字水印信息,以及所述安全动态库中存储的验证信息;

根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包。

相应地,本申请还提供了一种防重打包的装置,该装置包括:

运行单元和执行单元,其中:

所述运行单元,运行安装包中的目标文件并加载所述安装包中的安全动态库;

所述执行单元,根据所述目标文件中的代码执行下述步骤:

获取所述目标文件中嵌入的数字水印信息,以及所述安全动态库中存储的验证信息;

根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包。

本申请提供防重打包的方法中,安装包本身包含有验证代码,当该安装包被安装时,操作系统就会根据该代码,获取该目标文件中嵌入的数字水印信息,以及获取该安装包中的安全动态库中的验证信息,并根据该数字水印信息和该验证信息,验证该安装包是否是重打包的安装包。采用本申请提供的防重打包的方法,获得的有益效果如下:

1、由于本申请中安装包本身包含有用于验证该安装包是否被重打包的代码,因此,无论对操作系统如何改造,也无法避开验证安装包的过程,解决了现有技术通过系统校验安装包自签名来验证安装包是否被重打包时,由于系统有时会绕过验证安装自签名的过程,导致无法有效地验证该安装包是否被重打包的问题。

2、由于本申请是根据数字水印信息和验证信息,验证该安装包是否被重打包,因此,相比于现有技术通过计算安装包哈希值来验证安装包是否被重打包的方法,本申请验证安装包是否被重打包的效率更高。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为现有技术提供的一种重打包的方法的流程示意图;

图2为现有技术提供的一种防重打包的方法的流程示意图;

图3为本申请实施例提供的一种防重打包的方法的流程示意图;

图4为本申请实施例提供的在目标文件中嵌入数字水印信息的流程示意图;

图5为本申请实施例提供的另一种防重打包的方法的流程示意图;

图6为本申请实施例提供的查找数字水印信息的方法的流程示意图;

图7为本申请实施例提供的再一种防重打包的方法的流程示意图;

图8为本申请实施例提供的又一种防重打包的方法的流程示意图;

图9为本申请实施例提供的一种防重打包的装置的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

以下结合附图,详细说明本申请各实施例提供的技术方案。

本申请提供了一种防重打包的方法,用于解决现有技术中在系统通过校验安装包自签名,有时无法有效地验证该安装包是否被重打包的问题,以及解决现有技术中系统通过计算安装包的哈希值来校验安装包是否被重打包时,有时由于安装包占用内存较大,导致验证效率较低的问题。该方法的具体流程如图3所示,具体包括以下步骤:

步骤301:运行安装包中的目标文件并加载所述安装包中的安全动态库。

在本步骤中,当用户下载了某个安装包,并对该安装包进行安装时,操作系统就会运行该安装包中的目标文件,并同时加载该安装包中的安全动态库。该目标文件是根据预设的代码编译后得到的目标文件,且在编译后的目标文件中嵌入了数字水印信息。该数字水印信息可以是字符串,还可以是指令,等等,该安全动态库中存储有关该安装包的验证信息,该验证信息用于验证该安装包是否是重打包的安装包。

上述在目标文件中嵌入数字水印信息的方式,可以是在目标文件的末尾嵌入该数字水印信息,或者是在目标文件的其他的位置上嵌入该数字水印信息。

上述操作系统可以是安卓系统,则目标文件可以是dex文件,该dex文件具体为安卓系统下可执行文件的类型,采用java代码编写而成,安全动态库可以是so库,采用c/c++编写而成,通常so库里保存有一些安全信息,例如,验证信息,当可执行的文件加载或运行时,由操作系统加载so库;或者,该操作系统可以是windows,则目标文件可以是exe文件,安全动态库为dll库,等等,这里不对该操作系统、目标文件以及动态安全库进行限定。

如图4所示,如果该目标文件是dex文件,在该目标文件中嵌入数字水印信息时,为了保证该目标文件数据的完整性和准确性,会根据该数字水印信息,重新计算该目标文件头部的校验总和(checksum)、签名(signature)、文件大小(filesize)等对应的值。

需要说明的是:如果该安装包是重打包的安装包,用户在对原始安装包进行重打包时,虽然用户可以修改原始安装包中原始文件的代码,但该原始安装包的安全动态库中的验证信息却不容易被修改,因此,该安装包的安全动态库中仍会保存有原始安装包的验证信息。假设该原始安装包中也嵌入了数字水印信息,则存储在安全动态库中的验证信息可以是嵌入该原始文件中的数字水印信息,具体原因如图5所示:

当对原始安装包重打包时,需要先将该原始安装包进行反编译,获得该原始安装包对应的源代码文件,由于数字水印信息是在根据预设代码编译成原始文件后,才嵌入到该原始文件中的,因此,在对原始安装包反编译的过程中,该数字水印信息a将会丢失,然后,用户对源代码文件进行修改,如图5所示,可以是添加其他代码,同时,用户为了伪装该安装包重打包的身份,还会在源代码文件中嵌入数字水印信息b,最后,对该源代码文件进行重打包,重打包后的安装包的安全动态库中仍存储有验证信息a。因此,可以将数字水印信息a可以作为原始安装包的标识,用于验证该安装包是否被重打包。

为了清楚地说明本申请实施例,下面就以在目标文件的末尾嵌入数字水印信息为例,说明本申请实施例中的各个步骤。

步骤302:根据所述目标文件中的代码执行下述步骤:

获取所述目标文件中嵌入的数字水印信息,以及所述安全动态库中存储的验证信息,并根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包。

在本步骤中,操作系统根据目标文件中的代码,获取目标文件的数字水印信息的方法如图6所示:根据目标文件的原始长度,确定数字水印信息在该目标文件中的起始地址,并根据该起始地址,从该目标文件中获取该数字水印信息,这里的目标文件的原始长度为在嵌入数字水印信息前该目标文件的长度。

当操作系统获得该数字水印信息,以及从安全动态库中获取验证信息后,根据该数字水印信息和验证信息,验证该安装包是否是重打包的安装包,具体的验证方法可以由数字水印信息的类型来决定,如表1所示:

表1

当数字水印信息为字符串时,验证该数字水印信息与验证信息是否一致,若一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

在实际应用中,如果数字水印信息为字符串,该字符串可能是固定长度的字符串,也可能是随机长度的字符串。当数字水印信息为固定长度的字符串时,直接验证该字符串与安全动态库中的验证信息是否一致;或者计算当前下载安装包对应的水印值与安全动态库中的验证信息是否一致,如图7所示为dex文件中通过计算水印值来验证安装包是否被重打包的方法,具体如下:

dex文件包括dexheader和dexbody,其中,dexheader中包含datasize和dataoff,dexbody中包含data,且datasize表示该data的大小,dataoff表示该data的偏移。假设在原始dex文件中嵌入了数字水印信息,当对该原始dex文件进行重打包时,具体是将dexbody中data部分对应的代码进行修改,修改后,不仅嵌入在原始dex文件中的数字水印信息将会丢失,而且data的大小将会发生改变,则dexheader中datasize对应的值会发生变化;对该原始dex文件进行重打包,还可以是对dexbody中除了data以外其它部分对应的代码进行修改,修改后,同样嵌入在原始dex文件中的数字水印信息将会丢失,而且dexbody中data的位置会发生偏移(如图7所示),则dexheader中dataoff对应的值会发生变化。

假设原始安装包对应水印值的计算方法为“datasize+dataoff”,即水印值为datasize对应的值加dataoff对应的值。当用户对该原始安装包重打包时,dataoff或datasize对应的值就会发生改变,则重打包的安装包对应的水印值也会发生变化,这时,操作系统只要验证重打包的安装包对应的水印值与安全动态库中的验证信息是否一致,就可以确定出该安装包是否是被重打包。这里水印值的计算方法只是示例性的说明,在实际应用中,可以根据实际情况进行设定水印值的计算方法,例如,可以是“datasize-dataoff”,或者是“datasize/dataoff”,等等。

利用上述方法验证当前下载安装包是否被重打包时,即使是在重打包的安装包中嵌入原始安装包中的数字水印信息,该安装包对应的水印值也会发生变化,因此,操作系统根据该安装包的水印值可以准确地判断出该安装包是否被重打包。

当数字水印信息为随机长度的字符串时,可以先计算该字符串的长度,然后,验证该字符串的长度是否与安全动态库中的验证信息的长度一致,若不一致,则直接确定该安装包是重打包的安装包,若一致,再验证该字符串与安全动态库中的验证信息是否一致,若仍一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

当数字水印信息为指令时,验证安全包的方法有很多种,下面示例性的说明三种验证方法:

第一种方法,与上述数字水印信息为字符串时验证安装包的方法类似,即:操作系统验证该指令与安全动态库中的验证信息是否一致,若一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

第二种方法,操作系统根据该指令执行相应操作,获得操作结果,然后,验证该操作结果与验证信息是否一致,若一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

例如,该指令可以是“查询xx地址中内容,是否与安全动态库中的验证信息一致”,操作系统根据该指令,从目标文件中的xx地址中,查询该地址对应的内容(操作结果),并验证该内容是否与安全动态库中的验证信息一致,若一致,则确定该安装包是原始安装包,若不一致,则确定该安装包是重打包的安装包。

第三种方法,操作系统根据该指令执行相应操作,获得操作结果,验证该操作结果与该验证信息中的操作结果是否一致,以及验证该指令与该验证信息中的指令是否一致,若两次验证的结果均为“一致”,则确定该安装包是原始安装包,若两次验证中任一次验证的结果为“不一致”,或者是两次验证的结果均为“不一致”,则确定该安装包是重打包的安装包。

为了清楚地说明该验证方法,这里通过一个简单的例子来说明该验证方法,假设安全动态库中验证信息中的操作结果为“2”,操作指令为“1+1”,而目标文件中的数字水印信息对应的指令为“3-1”,操作系统根据该指令执行操作后,获得的操作结果也为“2”,如果操作系统只验证该操作结果与验证信息中的操作结果是否一致,就会误认为该装包是原始安装包,但如果操作系统还验证指令与验证信息中的指令是否一致,就会准确地判断出该安装包是否被重打包。

上述目标文件中数字水印信息对应的指令可以是简单的“返回”指令,或者是其他实现与操作系统之间交互的指令,例如,该指令可以是“让操作系统验证目标文件自签名与安全动态库中的验证信息是否一致”,再例如,该指令还可以是“让操作系统验证嵌入数字水印信息前目标文件的长度,与安全动态库中的保存的验证信息是否一致”,等等,可以根据用户的需求进行设定指令。

另外,如果该安装包是重打包的安装包,还可能存在这样一种情形:该安装包对应的原始文件中嵌入了数字水印信息,由前述内容可知,在对该原始安装包重打包的过程中,将会丢失原始安装包中的数字水印信息,如果用户在对该原始文件的代码修改后,没有相应地加入数字水印信息,这时,操作系统只要根据该安装包中的代码,查询该安装包中的目标文件中是否具有该数字水印信息即可。

上述验证安装包的方法只是示例性的说明,在实际应用中,数字水印信息的类型有很多种,对应的验证方法也会有很多种,这里不作具体限定。

本申请提供防重打包的方法中,安装包本身包含有验证代码,当该安装包被安装时,如图8所示,操作系统就会根据该代码,获取该安装包中的安全动态库中的验证信息,以及获取该目标文件中嵌入的数字水印信息,并根据该数字水印信息和该验证信息,验证该安装包是否是重打包的安装包。采用本申请提供的防重打包的方法,获得的有益效果如下:

1、由于本申请中安装包本身包含有用于验证该安装包是否被重打包的代码,因此,无论对操作系统如何改造,也无法避开验证安装包的过程,解决了现有技术通过系统校验安装包自签名来验证安装包是否被重打包时,由于系统有时会绕过验证安装自签名的过程,导致无法有效地验证该安装包是否被重打包的问题。

2、由于本申请是根据数字水印信息和验证信息,验证该安装包是否被重打包,因此,相比于现有技术通过计算安装包哈希值来验证安装包是否被重打包的方法,本申请验证安装包是否被重打包的效率更高。

相应地,本申请还提供了一种防重打包的装置,同样用于解决现有技术中在系统通过校验安装包自签名,有时无法有效地验证该安装包是否被重打包的问题,以及解决现有技术中系统通过计算安装包的哈希值来校验安装包是否被重打包时,有时由于安装包占用内存较大,导致验证效率较低的问题。该装置的具体结构如图9所示,具体包括以下单元:

运行单元901和执行单元902,其中:

所述运行单元901,运行安装包中的目标文件并加载所述安装包中的安全动态库;

所述执行单元902,根据所述目标文件中的代码执行下述步骤:

获取所述目标文件中嵌入的数字水印信息,以及所述安全动态库中存储的验证信息;

根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包。

本装置实施例的工作流程是:首先,运行单元901运行安装包中的目标文件,并加载该安装包中的安全动态库,其次,执行单元902,根据该目标文件中的代码执行下述步骤:获取该目标文件中嵌入的数字水印信息,以及该安全动态库中存储的验证信息,根据该数字水印信息和验证信息,验证该安装包是否是重打包的安装包。

本装置实施例实现防重打包的方式有很多种,例如,在第一种实施方式中,所述目标文件是将预设的代码进行编译后得到的目标文件;所述数字水印信息是在编译后得到的目标文件中的末尾嵌入的。

在第二种实施方式中,获取所述目标文件中嵌入的数字水印信息,具体包括:

根据所述目标文件的原始长度,确定所述数字水印信息在所述目标文件中的起始地址,其中,所述原始长度为嵌入所述数字水印信息前所述目标文件的长度;

根据所述起始地址,从所述目标文件中获取所述数字水印信息。

在第三种实施方式中,根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包,具体包括:

验证所述数字水印信息与验证信息是否一致;

若一致,则确定所述安装包是原始安装包;

若不一致,则确定所述安装包是重打包的安装包。

在第四种实施方式中,根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包,具体包括:

当所述数字水印信息为指令时,根据所述指令执行操作,获得操作结果;

验证所述操作结果与验证信息是否一致;

若一致,则确定所述安装包是原始安装包;

若不一致,则确定所述安装包是重打包的安装包。

在第五种实施方式中,根据所述数字水印信息和验证信息,验证所述安装包是否是重打包的安装包,具体包括:

当所述数字水印信息为指令时,根据所述指令执行操作,获得操作结果;

验证所述操作结果与所述验证信息中的操作结果是否一致,以及验证所述指令与所述验证信息中的指令是否一致;

若均一致,则确定所述安装包是原始安装包;

否则,则确定所述安装包是重打包的安装包。

应用本装置实施例获得的有益效果与前述方法实施例获得的有益效果相同或类似,为避免重复,这里不再赘述。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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