基于不透明谓词和有限状态机加固源代码的方法及装置制造方法及图纸

技术编号:18712362 阅读:30 留言:0更新日期:2018-08-21 22:54
本申请公开了一种基于不透明谓词和有限状态机加固源代码的方法及装置,该方法包括:定位应用程序的源代码中的第一条件变量;在第一条件变量中添加至少一个不透明谓词,得到第二条件变量;利用第二条件变量替换第一条件变量;基于原始源代码在编译或运行时的跳转逻辑,将原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态;基于代码块的状态以及代码块中的跳转逻辑,确定代码块跳转状态机;将代码块中的跳转逻辑通过代码块跳转状态机实现,以生成应用程序加固后的源代码。该技术方案能够达到模糊、混淆源代码中的条件变量的目的,以及各个代码块中的跳转逻辑通过代码块跳转状态机实现,增加源代码的反编译难度。

Method and device for reinforcing source code based on opaque predicate and finite state machine

This application discloses a method and apparatus for source code reinforcement based on opaque predicates and finite state machine. The method includes: locating the first conditional variable in the source code of an application program; adding at least one opaque predicate in the first conditional variable to obtain the second conditional variable; and replacing the first with the second conditional variable Conditional variables; based on the jump logic of the original source code at compile or run time, the original source code is divided into several code blocks according to the jump logic code location, and different states are set for each code block; based on the state of the code block and jump logic in the code block, the jump state machine of the code block is determined; The jump logic in the code block is implemented by the code block jump state machine to generate the hardened source code of the application. The technical scheme can obscure and confuse the conditional variables in the source code, and the jump logic in each code block is realized by the code block jump state machine, which increases the difficulty of decompiling the source code.

【技术实现步骤摘要】
基于不透明谓词和有限状态机加固源代码的方法及装置
本申请涉及计算机
,尤其涉及一种基于不透明谓词和有限状态机加固源代码的方法及装置。
技术介绍
随着移动互联网、物联网、车联网等技术的高速发展,终端的数量越来越多,终端中安装的应用程序也越来越多,各种应用程序也极大的方便了人们的生活。随之而来的是,各种应用程序易被破解、被篡改,进而面临着重要信息泄露的风险。目前,应用程序未经过加固保护,攻击者可以使用工具对未经过加固保护的应用程序的可执行文件进行反汇编、反编译和动态调试等操作,可以很容易破解应用程序的实现逻辑,从而对应用程序进行算法窃取、非法篡改或者接口调用。因此,现有应用程序的安全性较低。
技术实现思路
本申请实施例提供一种基于不透明谓词和有限状态机加固源代码的方法,用于解决现有技术中应用程序的安全性较低的问题。本申请实施例提供一种基于不透明谓词和有限状态机加固源代码的装置,用于解决现有技术中应用程序的安全性较低的问题。本申请实施例采用下述技术方案:第一方面,本申请实施例提供一种基于不透明谓词和有限状态机加固源代码的方法,包括:定位应用程序的源代码中的第一条件变量;在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;利用所述第二条件变量替换所述第一条件变量;基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码。第二方面,本申请实施例提供一种基于不透明谓词和有限状态机加固源代码的装置,包括:定位模块,用于定位应用程序的源代码中的第一条件变量;添加模块,用于在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;替换模块,用于利用所述第二条件变量替换所述第一条件变量;拆分模块,用于基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;确定模块,用于基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;实现模块,用于将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码。第三方面,本专利技术实施例还提供一种移动终端,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述所述的基于不透明谓词和有限状态机加固源代码的方法的步骤。第四方面,本专利技术实施例还提供一种可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的基于不透明谓词和有限状态机加固源代码的方法的步骤。本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:本申请实施例通过定位源代码中的第一条件变量,并在定位到的第一条件变量中加入至少一个不透明谓词,得到第二条件变量,进而利用第二条件变量替换第一条件变量;再通过在基于应用程序的原始源代码在编译或运行时的跳转逻辑,将应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并未每个代码块设置不同的状态;再基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,将代码块中的跳转逻辑通过代码块跳转状态机实现,以生成应用程序加固后的源代码,能够达到模糊、混淆源代码中的条件变量的目的,以及各个代码块中的跳转逻辑通过代码块跳转状态机实现,从而实现了对各个代码块中的跳转逻辑进行隐藏,增加源代码的反编译难度,有效防止攻击者通过反编汇、反编译和动态调式等操作轻易的破解各个代码块中的跳转逻辑,进而提高了应用程序的安全性。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的基于不透明谓词和有限状态机加固源代码的方法的流程示意图;图2为本申请实施例提供的基于不透明谓词和有限状态机加固源代码的装置的结构示意图;图3为本申请实施例提供的一种电子设备的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。为解决现有技术中应用程序的安全性较低的问题,本申请实施例提供一种基于不透明谓词和有限状态机加固源代码的方法,该方法的执行主体,可以但不限于计算机、平板电脑、个人电脑(PersonalComputer,PC)、服务器等能够被配置为执行本申请实施例提供的方法中的至少一种。为便于描述,下文以该方法的执行主体是服务器为例,对该方法的实施方式进行介绍。可以理解,该方法的执行主体为服务器只是一种示例性的说明,并不应理解为对该方法的限定。图1为本申请提供的一种基于不透明谓词和有限状态机加固源代码的方法的流程示意图;如图1所示,所述方法包括下述步骤:步骤101、定位应用程序的源代码中的第一条件变量。具体实施时,定位源代码中位于分支跳转节点处的第一条件变量。其中,分支跳转节点可以是if、ifelse、switch等分支语句所在的节点。第一条件变量即为分支语句中的变量。步骤102、在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定。步骤103、利用所述第二条件变量替换所述第一条件变量。例如,源代码如下:if(condition){…}上述源代码中,第一条件变量即为“condition”,那么,在第一条件变量中添加不透明谓词,得到第二条件变量,并用第二条件变量替换第一条件变量之后,得到下述源代码:if(condition&不透明谓词){…}步骤104、基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态。其中,每个代码块以跳转逻辑结束。该应用程序可以为安装在计算机、平板电脑、个人电脑、服务器等设备上的应用程序,也可以为新研发出应用程序。该代码块,可以为以跳转逻辑开始并以跳转逻辑结束的一段代码段,该代码块的呈现形式可以由一个花括号“{}”括起来。例如:在本实施例中,为每个代码块设置不同的状态,也就是说,每个代码块对应一个状态。沿用上述示例,为代码块0配置状态0,即state=0;为代码块1配置状态1,即state=1;为代码块2配置状态2,即state=2;为代码块3配置状态3,即state=3。步骤105、基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机。其中,状态本文档来自技高网...

【技术保护点】
1.一种基于不透明谓词和有限状态机加固源代码的方法,其特征在于,包括:定位应用程序的源代码中的第一条件变量;在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;利用所述第二条件变量替换所述第一条件变量;基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码。

【技术特征摘要】
1.一种基于不透明谓词和有限状态机加固源代码的方法,其特征在于,包括:定位应用程序的源代码中的第一条件变量;在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;利用所述第二条件变量替换所述第一条件变量;基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码。2.如权利要求1所述的方法,所述代码块跳转状态机为代码块跳转函数,所述将代码块中的跳转逻辑通过所述代码块跳转状态机实现,包括:通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,其中,所述代码块跳转函数的参数包括所述代码块标识和跳转条件,所述代码块跳转函数用于在所述代码块执行到所述代码块跳转函数时,基于跳转条件跳转到目标代码块。3.如权利要求2所述的方法,所述通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,包括:在每个所述代码块的结束位置处嵌入所述代码块跳转函数;其中,所述代码块跳转函数的参数只有一个用于标识当前代码块的状态;通过调用当前代码块的结束位置处的所述代码块跳转函数,实现从当前代码块跳至所述目标代码块。4.如权利要求2所述的方法,所述通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,包括:在每个所述代码块中至少一个位置处嵌入所述代码块跳转函数;其中,所述代码块跳转函数的参数至少包括用于标识当前代码块的状态;通过调用当前代码块中的所述代码块跳转函数,实现从当前代码块跳至所述目标代码块。5.如权利要求2所述的方法,还包括:对代码块跳转状态机进行加密。6.如权利要求5所述的方法,对代码块跳转状态机进行加密,包括:根据各个所述代码块对应的各个状态之间的跳转关系,确定各个状态的跳转顺序;根据所述跳转顺序为各个状态配置序列号;根据各个状态之间的跳转关系及各个所述状态对应的序列号,建立跳转表并进行加密。7.如权利要求5所述的方法,对代码块跳转状态机进行加密,包括:建立所述代码块跳转函数的参数或所述代码块跳转函数的参数中的跳转条件与预定值的对应关系;根据所述对应关系,将所述参数或所述参数中的跳转条件替换为所述预定值。8.如权利要求5所述的方法,对代码块跳转状态机进行加密,包括:将代码块跳转函数替换为预设函数,所述代码块跳转函数与预设函数存在对应关系。9.如权利要求1所述的方法,所述不透明谓词包括恒为真的函数表达式或恒为假的函数表达式。10.如权利要求1所述的方法,所述在所述第一条件变量中添加至少一个不透明谓词,包括:在所述第一条件变量之前或之后添加所述至少一个不透明谓词,并利用预设符号分隔所述第一条件变量和所述不透明谓词。11.如权利要求1所述的方法,所述在所述第一条件变量中添加至少一个不透明谓词,包括:利用预设规则将所述第一条件变量分割为多个字符段;在所述多个字符段之间添加所述至少一个不透明谓词。12.一种基于不透明谓词和有限状态机加固源代码的装置,其特...

【专利技术属性】
技术研发人员:阚志刚陈彪王文洋李世杰尉爽生卢佐华
申请(专利权)人:北京梆梆安全科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1