易妖游戏网
您的当前位置:首页软件保护方法、装置、设备及存储介质[发明专利]

软件保护方法、装置、设备及存储介质[发明专利]

来源:易妖游戏网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 112199667 A(43)申请公布日 2021.01.08

(21)申请号 202011069555.3(22)申请日 2020.09.30

(71)申请人 常熟理工学院

地址 215500 江苏省苏州市常熟市南三环

路99号(72)发明人 乐德广 

(74)专利代理机构 常州佰业腾飞专利代理事务

所(普通合伙) 32231

代理人 滕诣迪(51)Int.Cl.

G06F 21/52(2013.01)

权利要求书1页 说明书7页 附图3页

(54)发明名称

软件保护方法、装置、设备及存储介质(57)摘要

本发明实施例公开了一种软件保护方法、装置、设备及存储介质,其中,所述软件保护方法,包括:为软件的原始程序块预设待新增的程序块;记录软件的2个程序块之间的路径信息;在软件的原始程序块中随机插入虚假程序块和多余程序块;将软件中的每个程序块作为一个分支路径进行程序块压扁;创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。针对现有软件保护方法难抵挡动态调试和符号执行攻击,通过新增虚假路径和多余路径模糊以及压扁分支路径模糊执行策略抵御符号执行攻击来进行软件保护。

CN 112199667 ACN 112199667 A

权 利 要 求 书

1/1页

1.一种软件保护方法,其特征在于,包括:为软件的原始程序块预设待新增的程序块;记录软件的2个程序块之间的路径信息;

在软件的原始程序块中随机插入虚假程序块和多余程序块;将软件中的每个程序块作为一个分支路径进行程序块压扁;创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。

2.根据权利要求1所述的软件保护方法,其特征在于,所述新增程序块为待新增加2种程序块,所述2种程序块分别为虚假程序块和多余程序块;

其中,所述虚假程序块是通过模糊条件表达式在两个原始程序块之间新建一个程序的分支路径;所述多余程序块是在两个原始程序块之间添加一个程序的顺序路径。

3.根据权利要求1所述的软件保护方法,其特征在于,所述将软件中的每个程序块作为一个分支路径进行程序块压扁的方法,包括:

设置每个程序块的路径变量,并使用所述路径信息中的源程序块SS作为当前程序块的路径变量值,而把所述目的程序块DS作为下一个程序块的路径变量值。

4.一种软件保护装置,其特征在于,包括:预设模块,用于为软件的原始程序块预设待新增的程序块;记录模块,用于记录软件的2个程序块之间的路径信息;插入模块,用于在软件的原始程序块中随机插入虚假程序块和多余程序块;压扁模块,用于将软件中的每个程序块作为一个分支路径进行程序块压扁;创建模块,用于创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。

5.一种软件保护设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1~3中任意一项所述软件保护方法。

6.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求1~3中任意一项所述软件保护方法。

2

CN 112199667 A

说 明 书

软件保护方法、装置、设备及存储介质

1/7页

技术领域

[0001]本发明涉及软件保护技术领域,尤指一种软件保护方法、装置、设备及存储介质。背景技术

[0002]路径模糊是指对程序的真正执行路径进行修改或隐藏,在不改变程序执行结果的前提下,模糊程序的逻辑关系,进而增加对程序逆向分析的难度,是目前使用最有效和广泛的软件保护技术之一。现有的路径模糊方法有不透明谓词和程序分支路径平展化等。其中,程序分支路径平展是通过对程序进行平展化来达到模糊程序的逻辑关系的目的。运行时程序仍以正确的顺序流经各个程序块,但是程序的结构会被彻底地破坏。而随着符号执行以及动态调试技术在程序逆向分析领域的成功应用,现有的平展路径模糊却面临符号执行的威胁,程序分支路径平展很容易被攻击者通过符号执行还原成原始程序。发明内容

[0003]本发明实施例提供了一种软件保护方法、装置、设备及存储介质,针对现有软件保护方法难抵挡动态调试和符号执行攻击,通过新增虚假路径和多余路径模糊以及压扁分支路径模糊执行策略抵御符号执行攻击来进行软件保护。[0004]本发明实施例提供了一种软件保护方法,包括:[0005]为软件的原始程序块预设待新增的程序块;[0006]记录软件的2个程序块之间的路径信息;

[0007]在软件的原始程序块中随机插入虚假程序块和多余程序块;[0008]将软件中的每个程序块作为一个分支路径进行程序块压扁;[0009]创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。[0010]进一步的,所述新增程序块为待新增加2种程序块,所述2种程序块分别为虚假程序块和多余程序块;[0011]其中,所述虚假程序块是通过模糊条件表达式在两个原始程序块之间新建一个程序的分支路径;所述多余程序块是在两个原始程序块之间添加一个程序的顺序路径。[0012]进一步的,所述将软件中的每个程序块作为一个分支路径进行程序块压扁的方法,包括:

[0013]设置每个程序块的路径变量,并使用所述路径信息中的源程序块SS作为当前程序块的路径变量值,而把所述目的程序块DS作为下一个程序块的路径变量值。[0014]本发明实施例还提供一种软件保护装置,包括:[0015]预设模块,用于为软件的原始程序块预设待新增的程序块;[0016]记录模块,用于记录软件的2个程序块之间的路径信息;[0017]插入模块,用于在软件的原始程序块中随机插入虚假程序块和多余程序块;[0018]压扁模块,用于将软件中的每个程序块作为一个分支路径进行程序块压扁;

3

CN 112199667 A[0019]

说 明 书

2/7页

创建模块,用于创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、

程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。[0020]本发明实施例还提供一种软件保护设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述软件保护方法。[0021]本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述软件保护方法。[0022]本发明实施例,其方法包括:为软件的原始程序块预设待新增的程序块;记录软件的2个程序块之间的路径信息;在软件的原始程序块中随机插入虚假程序块和多余程序块;将软件中的每个程序块作为一个分支路径进行程序块压扁;创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值;由此能保护程序路径分支信息,有效减少路径分支信息的泄露,抵抗符号执行的动态逆向分析。

[0023]本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

[0024]图1是本发明实施例的所述软件的程序块的流程示意图;

[0025]图2是本发明实施例的所述在软件的原始程序块中随机插入虚假程序块和多余程序块的流程示意图;

[0026]图3是本发明实施例的所述基于程序块路径信息压扁后的程序块流程图的流程示意图;

[0027]图4是本发明实施例的swVar经过swFunc模糊后的结构示意图;[0028]图5是本发明实施例的软件保护方法的流程图;[0029]图6是本发明实施例的软件保护装置的流程图。

具体实施方式

[0030]下文中将结合附图对本发明的实施例进行详细说明。

[0031]在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

[0032]符号执行程序分析的基础是程序在执行过程中的路径分支信息泄露问题。在平展程序执行过程中,所有路径分支的逻辑关系都是固定的,这些路径分支信息易于收集和逆向推理分析,引起路径分支的信息泄露。因此,本发明实施例在路径分支信息中引入虚假程序块和多余程序块,构建模糊路径,使分析者无法获取程序实际的执行路径,从而防范了路径信息的收集,抵抗了基于路径敏感分析的逆向工程。此外,构建分支路径模糊执行策略,路径分支结构的目标地址存储于符号执行不可控制的swFunc算法中,被隐藏的路径信息呈现良好的模糊特性,使程序执行过程具有不确定性,其行为与结构无法预测,增加逆向工程符号执行推理分析的难度。

4

CN 112199667 A[0033]

说 明 书

3/7页

针对上述情况,如图5所示,本发明实施例提出一种软件保护方法,包括:

[0034]步骤101,为软件的原始程序块预设待新增的程序块。[0035]其中,为了模糊程序块的执行路径,除了软件源程序的原始程序块(源程序的原始程序块称为O程序块)之外,本发明实施例的软件保护方法在一个实施例中,所述新增程序块为待新增加2种程序块,所述2种程序块分别为虚假程序块和多余程序块;[0036]其中,所述虚假程序块是通过模糊条件表达式在两个原始程序块之间新建一个程序的分支路径,称为B程序块;所述多余程序块是在两个原始程序块之间添加一个程序的顺序路径,称为J程序块,如表1所示:[0037]表1

[0038]

程序块类型名称程序块类型标识符原始程序块O虚假程序块B多余程序块J

[0039]步骤102,记录软件的2个程序块之间的路径信息。[0040]其中,记录软件的2个程序块之间的路径信息PATH=SS->DS。其中,SS是软件的源程序块,DS是软件的目的程序块。而如图1所示的软件流程示意图的程序块包括有S1、S2、S3和S4,则图1中软件的程序块路径信息如表2所示。[0041]表2

序号程序块路径(SS->DS)10开始->S12S1S1->S23S1S1->S34S2S2->S45S3S3->S460S4->结束

[0043]步骤103,在软件的原始程序块中随机插入虚假程序块和多余程序块。[0044]其中,根据步骤101和步骤102,在软件的原始程序块中随机插入虚假程序块和多余程序块。例如,在图1的S1->S2之间插入一个J程序块S5,在S2->S4之间插入一个J程序块S6,在S3->S4之间新增一个B程序块S7。从而构建了如图2所示的模糊路径:S1->S5,S2->S6,S3->S7。表3显示了图2软件中的程序块类型及其路径信息。[0045]表3

[0042]

5

CN 112199667 A

说 明 书

4/7页

[0046]

步骤104,将软件中的每个程序块作为一个分支路径进行程序块压扁。

[0048]其中,在一个实施例中,所述将软件中的每个程序块作为一个分支路径进行程序块压扁的方法,包括:

[0049]设置每个程序块的路径变量为swVar,并使用步骤102内的所述路径信息中的源程序块SS作为当前程序块的路径变量值,而把所述目的程序块DS作为下一个程序块的路径变量值。如图3所示,其为根据图2的示例实现的基于程序块路径信息压扁后的程序块流程图。[0050]在图3中,当程序块S1执行后,进行条件判断。如果条件为真(T),则路径变量swVar值为S2。如果条件为假(F),则路径变量swVar值为S5。然后,根据swVar执行下一个程序块。当程序块S2执行后,路径变量swVar值为S6。然后,根据swVar执行下一个程序块。当程序块S3执行后,进行条件判断。如果条件为真(T),则路径变量swVar值为S4。如果条件为假(F),则路径变量swVar值为S7。然后,根据swVar执行下一个程序块。当程序块S4执行后,程序结束。当程序块S5执行后,路径变量swVar值为S3。然后,根据swVar执行下一个程序块。当程序块S6执行后,路径变量swVar值为S4。然后,根据swVar执行下一个程序块。当程序块S7执行后,路径变量swVar值为S4。然后,根据swVar执行下一个程序块。[0051]步骤105,创建一个路径模糊执行算法,以此根据当前程序块的路径变量值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。[0052]其中,创建一个路径模糊执行算法swFunc,用于以此根据当前程序块的路径变量值(SS)、程序块路径信息(PATH)以及程序块的类型(TYPE)生成下一个待执行程序块的路径变量值。图3示例的swVar经过swFunc模糊后如图4所示,在图4中,S5、S6和S7为压扁程序块中的模糊执行分支路径。[0053]在图4中,当程序块S1执行后,进行条件判断。如果条件为真(T),则路径变量swVar值为swFunc(S1,T)。如果条件为假(F),则路径变量swVar值为swFunc(S1,F)。然后,根据swVar执行下一个程序块。当程序块S2执行后,路径变量swVar值为swFunc(S2,T)。然后,根据swVar执行下一个程序块。当程序块S3执行后,进行条件判断。如果条件为真(T),则路径变量swVar值为swFunc(S3,T)。如果条件为假(F),则路径变量swVar值为swFunc(S3,F)。然后,根据swVar执行下一个程序块。当程序块S4执行后,程序结束。当程序块S5执行后,路径变量swVar值为swFunc(S5,T)。然后,根据swVar执行下一个程序块。当程序块S6执行后,路径变量swVar值为swFunc(S6,T)。然后,根据swVar执行下一个程序块。当程序块S7执行后,路径变量swVar值为swFunc(S7,T)。然后,根据swVar执行下一个程序块。

6

[0047]

CN 112199667 A[0054]

说 明 书

5/7页

根据每个程序块的类型TYPE及路径信息PATH构建swFunc算法。swFunc算法伪代码

如下所示:

[0055]

根据swFunc算法伪代码,其算法描述如下:

[0057]算法1:分支路径模糊执行算法(swFunc)[0058]输入:程序中当前路径的源程序块(SS);路径信息(PATH)[0059]输出:程序中下一个执行路径的源程序块(S.SS)[0060]1.定义一个字符字符变量c。

[0061]2.调用目的程序块计算函数DS(SS,PATH),该函数根据swFunc传入的程序中当前路径的源程序块(SS);路径信息(PATH)得到对应的目的程序块S。

[0062]3.根据目的程序块S的类型值(S.TYPE)分析该程序块是否执行,并返回目的程序块S的S.SS值。其中,S的类型值用类型不透明谓词TypeOpaPred()来表达。S的S.SS值用程序块不透明谓词SsOpaPred()来表达。这些多态不透明谓词的实现使得程序块分析无法确定S.TYPE和S.SS的变化情况,攻击者无法重构出原始程序块图,从而保护了原始代码逻辑中的部分细节。

7

[0056]

CN 112199667 A[0063]

说 明 书

6/7页

4.如果目的程序块S的类型为O,即S.TYPE==TypeOpaPred=O(S),通过random

(‘i’,O)算法计算生成一个随机字符‘i’,并赋值给变量c。[00]5.如果c等于字符‘i’时,则直接返回目的程序块S的S.SS值,即return SsOpaPred=S.SS

(S);。

[0065]6.如果c不等于字符‘i’时,则继续调用swFunc算法返回S的目的程序块,并分析其是否执行,即returnswFunc(SsOpaPred=S.SS(S),S.PATH);。[0066]7.如果目的程序块S的类型为J,即S.TYPE==TypeOpaPred=J(S),则通过random(‘j’,J)算法计算生成一个随机字符‘j’,并赋值给变量c。[0067]8.如果c等于字符‘j’时,则直接返回目的程序块S的S.SS值,即return SsOpaPred=S.SS

(S);。

[0068]9.如果c不等于字符‘j’时,则继续调用swFunc算法返回S的目的程序块,并分析其是否执行,即returnswFunc(SsOpaPred=S.SS(S),S.PATH);。[0069]10.如果目的程序块S的类型为B,即S.TYPE==TypeOpaPred=B(S),则再次通过random(‘k’,K)算法计算生成随机字符‘k’并更新随机字符变量c。[0070]其中,random(char c,char d)算法表示根据d的概率(如表4所示)生成字符c。表4的概率值,可以根据需要,由用户来调整。[0071]表4

程序块类型标识符概率O100%B60%J40%

[0073]11.如果c等于字符‘k’时,则直接返回目的程序块S的S.SS值,即return SsOpaPred=S.SS(S);。

[0074]12.如果c不等于字符‘k’时,则继续调用swFunc算法返回S的目的程序块,并分析其是否执行,即returnswFunc(SsOpaPred=S.SS(S),S.PATH)。[0075]总之,本发明实施例的软件保护方法能够:[0076](1)通过同时引入虚假程序块和多余程序块模糊路径分支,减少软件路径分支信息的泄漏,增加通过符号执行进行路径分支信息收集的难度。[0077](2)通过分支路径模糊执行策略随机执行压扁路径可以使软件路径分支信息执行模糊化,增加利用压扁化路径分支信息进行符号执行逆向分析的难度。[0078](3)通过类型不透明谓词TypeOpaPred()模糊程序块类型,增加攻击者对程序块类型的逆向分析难度。[0079](4)通过程序块不透明谓词SsOpaPred()模糊目的程序块,增加攻击者对目的程序块块的逆向分析难度。[0080]如图6所示,本发明实施例还提供一种软件保护装置,包括:[0081]预设模块71,用于为软件的原始程序块预设待新增的程序块;[0082]记录模块72,用于记录软件的2个程序块之间的路径信息;[0083]插入模块73,用于在软件的原始程序块中随机插入虚假程序块和多余程序块;[0084]压扁模块74,用于将软件中的每个程序块作为一个分支路径进行程序块压扁;

8

[0072]

CN 112199667 A[0085]

说 明 书

7/7页

创建模块75,用于创建一个路径模糊执行算法,以此根据当前程序块的路径变量

值、程序块路径信息以及程序块的类型生成下一个待执行程序块的路径变量值。[0086]本发明实施例还提供一种软件保护设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述软件保护方法。[0087]本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述软件保护方法。[0088]其中,利用虚假路径与多余路径提出了一种路径模糊化执行的压扁路径模糊方法来隐藏程序的路径分支信息。使用模糊表达式引入虚假路径程序块压扁来抵御通过符号执行得到完整的执行路径,多余路径程序块压扁来抵御符号执行根据完整的执行路径分析出有效块之间的前后关系,并结合模糊算法随机执行虚假路径和多余路径,将符号执行推理路径分支信息的难度等价到逆向推理模糊虚假路径和多余路径的难度。该发明能模糊程序的路径分支信息,有效减少路径分支信息的泄露,抵抗基于符号执行的动态逆向分析。[00]在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,ReadOnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

[0090]本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号。

9

CN 112199667 A

说 明 书 附 图

1/3页

图1

图2

图3

10

CN 112199667 A

说 明 书 附 图

2/3页

图4

图5

11

CN 112199667 A

说 明 书 附 图

3/3页

图6

12

因篇幅问题不能全部显示,请点此查看更多更全内容