文件保护方法、装置、计算设备及计算机存储介质与流程

文档序号:14725688发布日期:2018-06-19 06:51阅读:144来源:国知局

本发明涉及互联网技术领域,具体涉及一种文件保护方法、装置、计算设备及计算机存储介质。



背景技术:

随着科技的不断发展,使用智能终端的用户爆炸式地增长,许多安装在智能终端上的应用程序逐渐地成为用户在日常生活中不可或缺的一部分。因而,如何保证用户所使用的应用程序安全已成为使用应用程序时面临的最大问题。在现有技术中,一般可通过对应用程序进行加固的方式来实现对智能终端中应用程序的保护,通过这种方式能够在一定程度上防止应用程序的代码被反编译分析,保障了应用程序的安全。具体地,可对程序文件进行混淆处理,例如可以为程序文件的原代码添加混淆代码。然而当要对程序文件进行混淆处理时,需要预先得到该程序文件的原代码,如果混淆处理是由其他人进行的,则相当于将程序文件的原代码直接暴露给了其他人,这将存在着非常大的安全风险;另外,现有技术中对程序文件的原代码进行混淆处理的方式比较单一,很容易被破解。因此,现有技术中的文件保护方式存在着破解难度低、容易被反编译分析的问题。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的文件保护方法、装置、计算设备及计算机存储介质。

根据本发明的一个方面,提供了一种文件保护方法,该方法包括:

生成与原程序文件中待保护指令相对应的第一抽象语法树;

保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树;

对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树;

恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树;

生成与第三抽象语法树相对应的程序文件。

根据本发明的另一方面,提供了一种文件保护装置,该装置包括:

第一生成模块,用于生成与原程序文件中待保护指令相对应的第一抽象语法树;

环境保存模块,用于保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树;

处理模块,用于对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树;

环境恢复模块,用于恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树;

第二生成模块,用于生成与第三抽象语法树相对应的程序文件。

根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;

存储器用于存放至少一可执行指令,可执行指令使处理器执行上述文件保护方法对应的操作。

根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述文件保护方法对应的操作。

根据本发明提供的技术方案,生成与原程序文件中待保护指令相对应的第一抽象语法树,保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树,接着对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树,然后恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树,生成与第三抽象语法树相对应的程序文件。本发明提供的技术方案能够生成与原程序文件中待保护指令相对应的抽象语法树,并对抽象语法树中的待处理指令进行混淆处理,得到处理后的程序文件,增加了反编译难度,有效地防止程序文件中的指令被他人恶意获取,保障了程序文件的安全。

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

附图说明

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

图1示出了本发明提供的文件保护方法实施例一的流程示意图;

图2示出了本发明提供的文件保护方法实施例二的流程示意图;

图3示出了本发明提供的文件保护装置实施例一的结构框图;

图4示出了本发明提供的文件保护装置实施例二的结构框图;

图5示出了本发明提供的计算设备实施例的结构示意图。

具体实施方式

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

本发明可以对应用程序中的程序文件进行保护,程序文件为可执行文件,其类型可以为so文件、Linux平台可执行文件、ios平台可执行文件、osx平台可执行文件、安卓平台可执行文件等,本发明对此不作限定。

图1示出了本发明提供的文件保护方法实施例一的流程示意图,如图1所示,该方法包括如下步骤:

步骤S100,生成与原程序文件中待保护指令相对应的第一抽象语法树。

其中,原程序文件是指应用程序中原有的程序文件,该原程序文件中包括有多条指令,为了防止被他人恶意获取,需要对原程序文件中的部分或全部指令进行保护。在本发明中将原程序文件中需要保护的指令称为待保护指令。在步骤S100中,可对原程序文件的文件内容进行解析处理,生成与原程序文件中待保护指令相对应的抽象语法树。该抽象语法树是待保护指令的抽象语法结构的树状表现形式。之所以称语法是“抽象”的,是因为抽象语法树中的语法并不会表现出真实语法中出现的每个细节,抽象语法树上的每个节点都表示一种结构。

为了便于对不同处理阶段的抽象语法树进行区分,在本发明中,将所生成的与原程序文件中待保护指令相对应的、未经保存环境和混淆处理的抽象语法树称为第一抽象语法树,并且在下文中,将保存环境后的抽象语法树称为第二抽象语法树,将混淆处理后的抽象语法树称为第三抽象语法树。

步骤S101,保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树。

其中,第一抽象语法树中的指令与原程序文件中的待保护指令是相对应的,第一抽象语法树中的指令和原程序文件中的待保护指令实质上是通过不同的表现形式来表示相同的指令内容。为了与原程序文件中的待保护指令进行区分,在本发明中,将第一抽象语法树中需要进行混淆处理的指令称为第一抽象语法树中的待处理指令。

为了使处理前后的运行环境能够保持一致,在对第一抽象语法树中的至少一条待处理指令进行混淆处理之前,需要保存第一抽象语法树中的至少一条待处理指令的运行环境。具体地,可确定第一抽象语法树中的至少一条待处理指令所在的寄存器,然后保存寄存器中的变量值,例如,可将寄存器中的变量值保存到计算机等计算设备的内存中。

步骤S102,对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树。

在步骤S102中,对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树。其中,本领域技术人员可根据实际需要从第二抽象语法树中选择一条或多条需要进行混淆处理的待处理指令,也可以对第二抽象语法树中所有的待处理指令都进行混淆处理,此处不做限定。

步骤S103,恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树。

为了使混淆处理前后的运行环境能够保持一致,便于用户能够顺利地运行应用程序,在对第二抽象语法树中的至少一条待处理指令进行混淆处理后,还需要恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树。具体地,可恢复至少一条待处理指令所在的寄存器,以使寄存器中的变量值能够被使用、被改变。

步骤S104,生成与第三抽象语法树相对应的程序文件。

具体地,在得到了恢复环境后的第三抽象语法树之后,可对恢复环境后的第三抽象语法树进行编译处理,从而生成与第三抽象语法树相对应的程序文件。其中,与第三抽象语法树相对应的程序文件可以为二进制文件。由于与第三抽象语法树相对应的程序文件是根据混淆处理后的第三抽象语法树生成的,因此所生成的与第三抽象语法树相对应的程序文件具有较高的破解难度,当他人对该程序文件进行反编译处理时,需要多次识别混淆处理,增加了反编译难度,有效地保障了程序文件的安全。

根据本实施例提供的文件保护方法,生成与原程序文件中待保护指令相对应的第一抽象语法树,保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树,接着对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树,然后恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树,生成与第三抽象语法树相对应的程序文件。本发明提供的技术方案能够生成与原程序文件中待保护指令相对应的抽象语法树,并对抽象语法树中的待处理指令进行混淆处理,得到处理后的程序文件,增加了反编译难度,有效地防止程序文件中的指令被他人恶意获取,保障了程序文件的安全。

图2示出了本发明提供的文件保护方法实施例二的流程示意图,如图2所示,该方法包括如下步骤:

步骤S200,对原程序文件中的待保护指令进行反编译处理,得到反编译结果。

具体地,可利用反编译工具对原程序文件中的待保护指令进行反编译处理,得到反编译结果。本领域技术人员可根据实际需要选择反编译工具,此处不做限定。

步骤S201,根据反编译结果,生成与待保护指令相对应的第一抽象语法树。

在得到了反编译结果之后,可根据反编译结果,生成待保护指令的抽象语法结构的树状表现形式,即生成与待保护指令相对应的第一抽象语法树。

步骤S202,从第一抽象语法树中确定得到至少一条待处理指令。

其中,第一抽象语法树中包括多条指令,可按照指令类型或者随机函数等从第一抽象语法树中的指令中确定出至少一条待处理指令。可以理解的是,也可将第一抽象语法树中所有的指令都确定为待处理指令。

步骤S203,保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树。

为了使处理前后的运行环境能够保持一致,在对第一抽象语法树中的至少一条待处理指令进行混淆处理之前,需要保存第一抽象语法树中的至少一条待处理指令的运行环境。具体地,可确定第一抽象语法树中的至少一条待处理指令所在的寄存器,然后保存寄存器中的变量值,例如,可将寄存器中的变量值保存到计算机等计算设备的内存中。

步骤S204,对第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加混淆指令,以改变与待处理指令对应的变量值和/或寄存器中的变量值,得到混淆处理后的第三抽象语法树。

在一个实施例中,对第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加混淆指令,由于混淆指令的添加,使得在同一指令处理逻辑中,与待处理指令对应的变量值发生改变,从而起到混淆的作用,用以迷惑程序破译者。例如,指令1和指令2均处于同一指令处理逻辑中,其中,指令1为待处理指令,那么在该实施例中,可以先保存指令1的运行环境,并确定指令1使用的是哪个寄存器,保存至少包含指令1所使用的寄存器中的变量值,在保存完上述寄存器中变量值的情况下,对当前寄存器中的变量添加混淆指令,在添加混淆指令之后,恢复指令1的运行环境,从而保证即使添加了上述混淆指令来混淆程序破译者之后,指令2中的变量值也并不发生任何改变,从而起到混淆的作用。其中,在本发明中,将由具有预设关联关系的多条指令组合而成所实现的逻辑称为指令处理逻辑。具体地,混淆指令可以是对与待处理指令对应的变量值进行运算处理的指令,上述运算处理包括但不限于:算术运算(例如加、减、乘、除等)、位移运算以及异或运算等。

在另一个实施例中,针对第二抽象语法树中的至少一条待处理指令中的每一条待处理指令,为该待处理指令添加混淆指令。可以对除待处理指令所对应寄存器之外的其他寄存器进行相应的环境保存处理和环境恢复处理,在进行环境保存处理之后,对除待处理指令所对应寄存器之外的其他寄存器添加混淆指令,以改变除待处理指令所对应寄存器之外的其他寄存器中的变量值。例如:指令1和指令2均处于同一指令处理逻辑中,其中,指令1为待处理指令,那么在该实施例中,可以先保存指令1的运行环境,并确定指令1使用的是哪个寄存器,保存至少包含指令1所使用的寄存器中的变量值,在保存完上述寄存器中变量值的情况下,保存除指令1对应寄存器之外的其他寄存器中的变量值,并对其他寄存器中的变量添加混淆指令,在添加混淆指令之后,恢复除指令1对应寄存器之外的其他寄存器中的变量值,并恢复指令1的运行环境,从而保证即使添加了上述混淆指令来混淆程序破译者之后,指令2中的变量值也并不发生任何改变,从而起到混淆的作用。具体地,混淆指令可以是对其他寄存器中的变量值进行运算处理的指令,上述运算处理包括但不限于:算术运算(例如加、减、乘、除等)、位移运算以及异或运算等。

在对每一条待处理指令都进行上述混淆处理之后,根据混淆处理后的待处理指令得到混淆处理后的第三抽象语法树。

另外,为了增加反编译难度,在步骤S204之后,该方法还可包括:针对第三抽象语法树中的至少一条待处理指令中的每一条待处理指令,生成与待处理指令相对应的私钥以及与私钥相映射的加密代码;利用私钥与加密代码,对待处理指令进行加密处理,得到与待处理指令相对应的指令加密密文的步骤。

具体地,针对至少一条待处理指令中的每一条待处理指令都生成对应的私钥以及与私钥相映射的加密代码。其中,所生成的私钥可以为随机数等加密密钥,本领域技术人员可根据实际需要对私钥进行设置,此处不做限定。可选地,针对不同的待处理指令,所生成的私钥和加密代码可以是不同的,从而有助于增加反编译难度。例如,针对待处理指令1,生成的与待处理指令1相对应的私钥以及与私钥相映射的加密代码分别为私钥1和加密代码1;针对待处理指令2,生成的与待处理指令2相对应的私钥以及与私钥相映射的加密代码分别为私钥2和加密代码2,其中,私钥1不同于私钥2,加密代码1也不同于加密代码2。

针对至少一条待处理指令中的每一条待处理指令都利用相对应的私钥与加密代码,对该待处理指令进行加密处理,从而得到与该待处理指令相对应的指令加密密文。具体地,可将私钥输入至与私钥相映射的加密代码中,然后再对待处理指令进行加密处理,得到与待处理指令相对应的指令加密密文。在本发明中,通过私钥将待处理指令与加密处理后的指令加密密文相对应。例如,针对待处理指令1所生成的私钥和加密代码分别私钥1和加密代码1,针对待处理指令2所生成的私钥和加密代码分别私钥2和加密代码2,那么利用私钥1和加密代码1,对待处理指令1进行加密处理,得到与待处理指令1相对应的指令加密密文1;利用私钥2和加密代码2,对待处理指令2进行加密处理,得到与待处理指令2相对应的指令加密密文2。

进一步地,在进行上述加密处理后,为了便于用户能够顺利地运行应用程序,可针对至少一条待处理指令中的每一条待处理指令,生成与私钥相对应的公钥以及与公钥相映射的解密代码,其中,公钥和解密代码用于对指令加密密文进行解密处理,在这种情况下,由于每一条待处理指令都具有对应的公钥和解密代码,因此存在多个公钥和解密代码,可能会对应用程序的运行速度造成一定影响,但是正是由于存在多个公钥和解密代码,需要进行多次解密处理,因此有效地增加了反编译难度。

在一种可选的实施方式中,公钥和解密代码也可以是根据所有的私钥和加密代码生成的,在这种情况下,只需一个解密代码即可。

具体地,可利用公钥对解密代码进行处理后所得到的代码,对指令加密密文进行解密处理得到明文形式的指令,从而可以保证用户能够顺利地运行应用程序,不影响用户正常使用应用程序。

步骤S205,恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树。

为了使混淆处理前后的运行环境能够保持一致,便于用户能够顺利地运行应用程序,在步骤S205中,可恢复至少一条待处理指令所在的寄存器,以使寄存器中的变量值能够被使用、被改变,从而实现了对第三抽象语法树中的至少一条待处理指令的运行环境的恢复。

步骤S206,生成与第三抽象语法树相对应的程序文件。

具体地,可对恢复环境后的第三抽象语法树进行编译处理,从而生成与第三抽象语法树相对应的程序文件。由于该程序文件是根据混淆、加密处理后的第三抽象语法树生成的,因此该程序文件具有较高的破解难度,当他人对该程序文件进行反编译处理时,需要多次识别混淆处理和多次解密处理,极大地增加了反编译难度,有效地保障了程序文件的安全。

步骤S207,对与第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑进行修复处理。

由于与第三抽象语法树相对应的程序文件与原程序文件相比,内容发生了变化(例如代码长度发生变化),导致与第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑发生了变化,其中,控制转移指令包括但不限于:jcc指令、jmp指令、ret指令以及call指令等,因此,需要对与第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑进行修复处理。

具体地,检测与第三抽象语法树相对应的程序文件中是否存在控制转移指令。若检测得到与第三抽象语法树相对应的程序文件中不存在控制转移指令,则可不对执行逻辑进行修复处理。若检测得到与第三抽象语法树相对应的程序文件中存在控制转移指令,则对与第三抽象语法树相对应的程序文件中的控制转移指令进行分析,得到控制转移指令的本身地址和与控制转移指令相对应的本身跳转地址,并将本身跳转地址确定为控制转移指令目标虚地址,接着计算控制转移指令目标虚地址和控制转移指令的本身地址之间的偏移量,其中,该偏移量可为控制转移指令目标虚地址和控制转移指令的本身地址之间的差值,然后将偏移量作为控制转移指令的操作数,从而完成了对控制转移指令的执行逻辑的修复处理。

以与第三抽象语法树相对应的程序文件中所存在的控制转移指令为jmp指令为例,假设通过对该jmp指令分析可知,该jmp指令的本身地址为10,该jmp指令的本身跳转地址为30,即其控制转移指令目标虚地址为30,那么该jmp指令的控制转移指令目标虚地址和控制转移指令的本身地址之间的偏移量为20,因此将20作为该jmp指令的操作数,从而完成了对该jmp指令的执行逻辑的修复处理,使得该jmp指令能够按照原来的执行逻辑进行跳转。

可选地,本发明在对待处理指令进行混淆处理时,还可对第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加控制转移指令。通过所添加的控制转移指令,起到混淆的作用。具体地,可为待处理指令添加一条或多条控制转移指令,其中,所添加的控制转移指令可以是jmp指令、call指令等,本领域技术人员可根据实际需要对所添加的控制转移指令进行设置,此处不做限定。在一个实施例中,通过为待处理指令添加控制转移指令,可使得在同一指令处理逻辑中进行跳转;在另一个实施例中,通过为待处理指令添加控制转移指令,可使得在不同指令处理逻辑中进行跳转,从而起到混淆的作用,增加反编译难度。

本发明实施例提供的文件保护方法,能够生成与原程序文件中待保护指令相对应的抽象语法树,并对抽象语法树中的每一条待处理指令都分别进行混淆处理,可选地,还可对待处理指令进行加密处理,因此当他人对处理后的程序文件进行反编译处理时,需要多次识别混淆处理和多次解密处理,极大地增加了反编译难度,有效地防止程序文件中的指令被他人恶意获取,保障了程序文件的安全;另外,该技术方案还对处理后的程序文件中的控制转移指令的执行逻辑进行修复处理,有效地保证了处理前后的控制转移指令的执行逻辑不变。

图3示出了本发明提供的文件保护装置实施例一的结构框图,如图3所示,该装置包括:第一生成模块310、环境保存模块320、处理模块330、环境恢复模块340和第二生成模块350。

第一生成模块310用于:生成与原程序文件中待保护指令相对应的第一抽象语法树。

环境保存模块320用于,保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树。

处理模块330用于:对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树。

环境恢复模块340用于:恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树。

第二生成模块350用于:生成与第三抽象语法树相对应的程序文件。

根据本实施例提供的文件保护装置,第一生成模块生成与原程序文件中待保护指令相对应的第一抽象语法树,环境保存模块保存第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树,处理模块对第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树,环境恢复模块恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树,第二生成模块生成与第三抽象语法树相对应的程序文件。本发明提供的技术方案能够生成与原程序文件中待保护指令相对应的抽象语法树,并对抽象语法树中的待处理指令进行混淆处理,得到处理后的程序文件,增加了反编译难度,有效地防止程序文件中的指令被他人恶意获取,保障了程序文件的安全。

图4示出了本发明提供的文件保护装置实施例二的结构框图,如图4所示,该装置包括:第一生成模块410、确定模块420、环境保存模块430、处理模块440、环境恢复模块450、第二生成模块460和逻辑修复模块470。

第一生成模块410用于:对原程序文件中的待保护指令进行反编译处理,得到反编译结果;根据反编译结果,生成与待保护指令相对应的第一抽象语法树。

确定模块420用于:从第一抽象语法树中确定得到至少一条待处理指令。

环境保存模块430用于:确定至少一条待处理指令所在的寄存器;保存寄存器中的变量值,得到保存环境后的第二抽象语法树。

处理模块440用于:对第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加混淆指令,以改变与待处理指令对应的变量值和/或寄存器中的变量值,得到混淆处理后的第三抽象语法树。

处理模块440进一步适于:对第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加控制转移指令。

为了增加反编译难度,处理模块440进一步适于:针对第三抽象语法树中的至少一条待处理指令中的每一条待处理指令,生成与待处理指令相对应的私钥以及与私钥相映射的加密代码;利用私钥与加密代码,对待处理指令进行加密处理,得到与待处理指令相对应的指令加密密文。

在进行上述加密处理后,为了便于用户能够顺利地运行应用程序,处理模块440进一步用于:生成与私钥相对应的公钥以及与公钥相映射的解密代码,其中,公钥和解密代码用于对指令加密密文进行解密处理。

环境恢复模块450用于:恢复第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树。

第二生成模块460用于:生成与第三抽象语法树相对应的程序文件。

逻辑修复模块470用于:对与第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑进行修复处理。

具体地,逻辑修复模块470进一步用于:检测与第三抽象语法树相对应的程序文件中是否存在控制转移指令;若是,则对与第三抽象语法树相对应的程序文件中的控制转移指令进行分析,得到控制转移指令的本身地址和与控制转移指令相对应的本身跳转地址,并将本身跳转地址确定为控制转移指令目标虚地址;计算控制转移指令目标虚地址和控制转移指令的本身地址之间的偏移量;将偏移量作为控制转移指令的操作数。

根据本发明实施例提供的文件保护装置,能够生成与原程序文件中待保护指令相对应的抽象语法树,并对抽象语法树中的每一条待处理指令都分别进行混淆处理,可选地,还可对待处理指令进行加密处理,因此当他人对处理后的程序文件进行反编译处理时,需要多次识别混淆处理和多次解密处理,极大地增加了反编译难度,有效地防止程序文件中的指令被他人恶意获取,保障了程序文件的安全;另外,该技术方案还对处理后的程序文件中的控制转移指令的执行逻辑进行修复处理,有效地保证了处理前后的控制转移指令的执行逻辑不变。

本发明还提供了一种非易失性计算机存储介质,计算机存储介质存储有至少一可执行指令,该可执行指令可执行上述任意方法实施例中的文件保护方法。

图5示出了本发明提供的计算设备实施例的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。

如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。

其中:

处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。

通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。

处理器502,用于执行程序510,具体可以执行上述文件保护方法实施例中的相关步骤。

具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。

处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。

存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

程序510具体可以用于使得处理器502执行上述任意方法实施例中的文件保护方法。程序510中各步骤的具体实现可以参见上述文件保护实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了:A1.一种文件保护方法,其特征在于,包括:

生成与原程序文件中待保护指令相对应的第一抽象语法树;

保存所述第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树;

对所述第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树;

恢复所述第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树;

生成与所述第三抽象语法树相对应的程序文件。

A2.根据A1所述的文件保护方法,其特征在于,所述生成与原程序文件中待保护指令相对应的第一抽象语法树进一步包括:

对所述原程序文件中的待保护指令进行反编译处理,得到反编译结果;

根据所述反编译结果,生成与待保护指令相对应的第一抽象语法树。

A3.根据A1所述的文件保护方法,其特征在于,所述保存所述第一抽象语法树中的至少一条待处理指令的运行环境进一步包括:

确定所述第一抽象语法树中的至少一条待处理指令所在的寄存器;

保存所述寄存器中的变量值。

A4.根据A3所述的文件保护方法,其特征在于,所述对所述第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树进一步包括:

对所述第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加混淆指令,以改变与所述待处理指令对应的变量值和/或所述寄存器中的变量值,得到混淆处理后的第三抽象语法树。

A5.根据A1-A4任一项所述的文件保护方法,其特征在于,所述对所述第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树进一步包括:

对所述第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加控制转移指令。

A6.根据A1-A4任一项所述的文件保护方法,其特征在于,在对所述第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树之后,所述方法还包括:

针对所述第三抽象语法树中的至少一条待处理指令中的每一条待处理指令,生成与所述待处理指令相对应的私钥以及与所述私钥相映射的加密代码;利用所述私钥与所述加密代码,对所述待处理指令进行加密处理,得到与所述待处理指令相对应的指令加密密文。

A7.根据A6所述的文件保护方法,其特征在于,在所述生成与所述待处理指令相对应的私钥以及与所述私钥相映射的加密代码之后,所述方法还包括:

生成与所述私钥相对应的公钥以及与所述公钥相映射的解密代码,其中,所述公钥和所述解密代码用于对所述指令加密密文进行解密处理。

A8.根据A1-A4任一项所述的文件保护方法,其特征在于,在生成与所述第三抽象语法树相对应的程序文件之后,所述方法进一步包括:

对与所述第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑进行修复处理。

A9.根据A8所述的文件保护方法,其特征在于,所述对与所述第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑进行修复处理进一步包括:

检测与所述第三抽象语法树相对应的程序文件中是否存在控制转移指令;

若是,则对与所述第三抽象语法树相对应的程序文件中的控制转移指令进行分析,得到所述控制转移指令的本身地址和与所述控制转移指令相对应的本身跳转地址,并将所述本身跳转地址确定为控制转移指令目标虚地址;

计算所述控制转移指令目标虚地址和所述控制转移指令的本身地址之间的偏移量;

将所述偏移量作为所述控制转移指令的操作数。

本发明还公开了:B10.一种文件保护装置,其特征在于,包括:

第一生成模块,用于生成与原程序文件中待保护指令相对应的第一抽象语法树;

环境保存模块,用于保存所述第一抽象语法树中的至少一条待处理指令的运行环境,得到保存环境后的第二抽象语法树;

处理模块,用于对所述第二抽象语法树中的至少一条待处理指令进行混淆处理,得到混淆处理后的第三抽象语法树;

环境恢复模块,用于恢复所述第三抽象语法树中的至少一条待处理指令的运行环境,得到恢复环境后的第三抽象语法树;

第二生成模块,用于生成与所述第三抽象语法树相对应的程序文件。

B11.根据B10所述的文件保护装置,其特征在于,所述第一生成模块进一步用于:

对所述原程序文件中的待保护指令进行反编译处理,得到反编译结果;

根据所述反编译结果,生成与待保护指令相对应的第一抽象语法树。

B12.根据B10所述的文件保护装置,其特征在于,所述环境保存模块进一步用于:

确定所述第一抽象语法树中的至少一条待处理指令所在的寄存器;

保存所述寄存器中的变量值。

B13.根据B12所述的文件保护装置,其特征在于,所述处理模块进一步适于:

对所述第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加混淆指令,以改变与所述待处理指令对应的变量值和/或所述寄存器中的变量值,得到混淆处理后的第三抽象语法树。

B14.根据B10-B13任一项所述的文件保护装置,其特征在于,所述处理模块进一步适于:

对所述第二抽象语法树中的至少一条待处理指令中的每一条待处理指令添加控制转移指令。

B15.根据B10-B13任一项所述的文件保护装置,其特征在于,所述处理模块进一步适于:

针对所述第三抽象语法树中的至少一条待处理指令中的每一条待处理指令,生成与所述待处理指令相对应的私钥以及与所述私钥相映射的加密代码;利用所述私钥与所述加密代码,对所述待处理指令进行加密处理,得到与所述待处理指令相对应的指令加密密文。

B16.根据B15所述的文件保护装置,其特征在于,所述处理模块进一步用于:

生成与所述私钥相对应的公钥以及与所述公钥相映射的解密代码,其中,所述公钥和所述解密代码用于对所述指令加密密文进行解密处理。

B17.根据B10-B13任一项所述的文件保护装置,其特征在于,所述装置还包括:逻辑修复模块,用于对与所述第三抽象语法树相对应的程序文件中的控制转移指令的执行逻辑进行修复处理。

B18.根据B17所述的文件保护装置,其特征在于,所述逻辑修复模块进一步用于:

检测与所述第三抽象语法树相对应的程序文件中是否存在控制转移指令;

若是,则对与所述第三抽象语法树相对应的程序文件中的控制转移指令进行分析,得到所述控制转移指令的本身地址和与所述控制转移指令相对应的本身跳转地址,并将所述本身跳转地址确定为控制转移指令目标虚地址;

计算所述控制转移指令目标虚地址和所述控制转移指令的本身地址之间的偏移量;

将所述偏移量作为所述控制转移指令的操作数。

本发明还公开了:C19.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A9中任一项所述的文件保护方法对应的操作。

本发明还公开了:D20.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行如A1-A9中任一项所述的文件保护方法对应的操作。

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