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.一种基于不透明谓词和有限状态机加固源代码的方法,其特征在于,包括:定位应用程序的源代码中的第一条件变量;在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;利用所述第二条件变量替换所述第一条件变量;基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码。
【技术特征摘要】
1.一种基于不透明谓词和有限状态机加固源代码的方法,其特征在于,包括:定位应用程序的源代码中的第一条件变量;在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;利用所述第二条件变量替换所述第一条件变量;基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述应用程序的原始源代码按照跳转逻辑的代码位置,拆分成多个代码块,并为每个代码块设置不同的状态,其中,每个代码块以跳转逻辑结束;基于代码块的状态,以及代码块中的跳转逻辑,确定代码块跳转状态机,所述代码块跳转状态机用于表征各个所述代码块对应的各个状态之间的跳转关系;将代码块中的跳转逻辑通过所述代码块跳转状态机实现,以生成应用程序加固后的源代码。2.如权利要求1所述的方法,所述代码块跳转状态机为代码块跳转函数,所述将代码块中的跳转逻辑通过所述代码块跳转状态机实现,包括:通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,其中,所述代码块跳转函数的参数包括所述代码块标识和跳转条件,所述代码块跳转函数用于在所述代码块执行到所述代码块跳转函数时,基于跳转条件跳转到目标代码块。3.如权利要求2所述的方法,所述通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,包括:在每个所述代码块的结束位置处嵌入所述代码块跳转函数;其中,所述代码块跳转函数的参数只有一个用于标识当前代码块的状态;通过调用当前代码块的结束位置处的所述代码块跳转函数,实现从当前代码块跳至所述目标代码块。4.如权利要求2所述的方法,所述通过调用所述代码块跳转函数,实现所述代码块中的跳转逻辑,包括:在每个所述代码块中至少一个位置处嵌入所述代码块跳转函数;其中,所述代码块跳转函数的参数至少包括用于标识当前代码块的状态;通过调用当前代码块中的所述代码块跳转函数,实现从当前代码块跳至所述目标代码块。5.如权利要求2所述的方法,还包括:对代码块跳转状态机进行加密。6.如权利要求5所述的方法,对代码块跳转状态机进行加密,包括:根据各个所述代码块对应的各个状态之间的跳转关系,确定各个状态的跳转顺序;根据所述跳转顺序为各个状态配置序列号;根据各个状态之间的跳转关系及各个所述状态对应的序列号,建立跳转表并进行加密。7.如权利要求5所述的方法,对代码块跳转状态机进行加密,包括:建立所述代码块跳转函数的参数或所述代码块跳转函数的参数中的跳转条件与预定值的对应关系;根据所述对应关系,将所述参数或所述参数中的跳转条件替换为所述预定值。8.如权利要求5所述的方法,对代码块跳转状态机进行加密,包括:将代码块跳转函数替换为预设函数,所述代码块跳转函数与预设函数存在对应关系。9.如权利要求1所述的方法,所述不透明谓词包括恒为真的函数表达式或恒为假的函数表达式。10.如权利要求1所述的方法,所述在所述第一条件变量中添加至少一个不透明谓词,包括:在所述第一条件变量之前或之后添加所述至少一个不透明谓词,并利用预设符号分隔所述第一条件变量和所述不透明谓词。11.如权利要求1所述的方法,所述在所述第一条件变量中添加至少一个不透明谓词,包括:利用预设规则将所述第一条件变量分割为多个字符段;在所述多个字符段之间添加所述至少一个不透明谓词。12.一种基于不透明谓词和有限状态机加固源代码的装置,其特...
【专利技术属性】
技术研发人员:阚志刚,陈彪,王文洋,李世杰,尉爽生,卢佐华,
申请(专利权)人:北京梆梆安全科技有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。