一种基于符号执行和单点逻辑的源代码加固方法及装置制造方法及图纸

技术编号:18764255 阅读:23 留言:0更新日期:2018-08-25 10:42
本申请公开了一种基于符号执行和单点逻辑的源代码加固方法及装置,可以确定待混淆的原始源代码中需要保护的目标变量;在所述原始源代码中插入至少一个中间变量,得到第一源代码;其中,所述至少一个中间变量用于访问所述目标变量;将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到加固后的第三源代码。该方法及装置可以提高源代码的防逆向分析能力。

【技术实现步骤摘要】
一种基于符号执行和单点逻辑的源代码加固方法及装置
本申请涉及软件安全
,尤其涉及一种基于符号执行和单点逻辑的源代码加固方法及装置。
技术介绍
现如今,移动互联网、物联网、车联网等技术高速发展,终端的数量越来越多,终端中安装的应用程序也越来越多,这给人们的工作和生活带来了极大的便利。应用程序运行过程中会产生一些重要的信息,这引起了攻击者的极大兴趣,使得这些重要信息存在被泄露的风险。目前,攻击者常使用符号执行模型等静态分析工具对应用程序的源代码进行逆向分析破解,获得应用程序的执行逻辑,从而非法窃取、非法篡改应用程序运行过程中产生的重要信息。针对上述风险,现有技术常通过对应用程序的源代码进行混淆,提高源代码的防逆向分析能力,降低应用程序运行过程中产生的重要信息被泄露的风险。但是,现有的控制流平坦化等源代码混淆方法依然存在被破解的风险,源代码的防逆向分析能力还有待提高。
技术实现思路
本申请实施例提供一种基于符号执行和单点逻辑的源代码加固方法及装置,以提高源代码的防逆向分析能力。第一方面,本申请实施例提供一种基于符号执行和单点逻辑的源代码加固方法,所述方法包括:确定待混淆的原始源代码中需要保护的目标变量;在所述原始源代码中插入至少一个中间变量,得到第一源代码;其中,所述至少一个中间变量用于访问所述目标变量;将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到加固后的第三源代码。第二方面,本申请实施例还提供一种基于符号执行和单点逻辑的源代码加固装置,包括:确定模块,用于确定待混淆的原始源代码中需要保护的目标变量;插入模块,用于在所述原始源代码中插入至少一个中间变量,得到第一源代码;其中,所述至少一个中间变量用于访问所述目标变量;替换模块,用于将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;第一处理模块,用于使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到加固后的第三源代码。第三方面,本申请实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的方法的步骤。第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法的步骤。本申请实施例采用的上述至少一个技术方案,可以确定待混淆的原始源代码中需要保护的目标变量;在所述原始源代码中插入至少一个中间变量,得到第一源代码;其中,所述至少一个中间变量用于访问所述目标变量;将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到加固后的第三源代码。一方面,由于将原始源代码中的部分目标变量被替换为中间变量,因此,可以达到模糊、混淆源代码中的目标表变量的目的,并相应的达到模糊、混淆目标变量与内存存储位置之间的对应关系的目的,给攻击者造成内存中原本存储目标变量的存储位置却为存储中间变量的存储位置的假象。由于攻击者感兴趣的变量是需要保护的目标变量而非中间变量,因此可以欺骗攻击者不对通过中间变量间接表示的目标变量进行分析,最终提高源代码的防逆向分析能力。另一方面,利用不透明谓词对源代码中的条件变量进行了模糊处理,因此可以增大加固后的源代码的破解难度,从而也可以提高源代码的防逆向分析能力。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固方法的一种具体实现方式的流程示意图;图2为本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固方法的另一种具体实现方式的流程示意图;图3为本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固装置的一种具体实现方式的结构示意图;图4为本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固装置的另一种具体实现方式的结构示意图;图5为本申请实施例提供的电子设备的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。为了提高源代码的防逆向分析能力。本申请实施例提供了一种基于符号执行和单点逻辑的源代码加固方法和装置,下面分别进行说明。需要说明的是,实施本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固方法及装置的执行主体,可以是客户端,也可以是服务器,本申请实施例对实施上述方法及装置的具体实施主体不做限定。下面先对本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固方法进行说明。如图1所示,本申请实施例提供的一种基于符号执行和单点逻辑的源代码加固方法,可以包括如下步骤:步骤101、确定待混淆的原始源代码中需要保护的目标变量。其中,待混淆的原始源代码可以是需要保护的目标应用程序的源代码。相应的,需要保护的目标变量,可以是待混淆的原始源代码中携带重要信息的变量,例如,假设目标应用程序为一款金融APP(Application),那么目标变量可以是该金融APP的源代码中与支付密码有关的变量。步骤102、在所述原始源代码中插入至少一个中间变量,得到第一源代码。其中,所述至少一个中间变量用于访问所述目标变量。且上述中间变量可以是指针和数组等变量中的任一种。程序的静态分析,一般是指在程序不运行的情况下,通过分析程序的源代码或者可执行代码来获得程序在运行时的信息的技术。由于程序没有被真正执行,若要获得程序在运行时的状态信息,可以建立一个模型对程序在运行时的状态进行模拟,通过对这个模型进行操作,可以获得程序的运行状态的近似表示。符号执行就是这样的一个模型。由于符号执行一般是指用符号值代替真实值模拟执行程序的过程,且在该过程中模拟了变量在内存中的存储位置。因此,相应的,在一种具体实施方式中,若插入原始源代码中的中间变量为数组,则可以通过数组在模拟内存中的溢出访问实现对目标变量的访问。例如,假设待混淆的原始源代码为:则,在目标变量x的后面插入数组a[10]后的第一源代码为:这样,就可以通过对数组a[10]的上溢出元素a[-1]进行访问,实现对目标变量x的访问。为了更清楚地理解上述溢出访问的过程,可以用下表1所示的形式来形象地说明目标变量x以及数组a[10]在模拟内存中的相对存储位置关系。表1xa[0]a[1]a[2]a[3]…a[9]在表1中,数组a[10]共包括a[0]-a[9]10个元素,并且这10个元素按序占据模拟内存中的10个存储位置,目标变量x占据a[0]之前的一个存储位置,也即目标变量x占据数组a[10]的上溢出元素a[-1]所占据的位置,因此,可以通过访问内存中a[-1]所占据的存储本文档来自技高网...

【技术保护点】
1.一种基于符号执行和单点逻辑的源代码加固方法,其特征在于,所述方法包括:确定待混淆的原始源代码中需要保护的目标变量;在所述原始源代码中插入至少一个中间变量,得到第一源代码;其中,所述至少一个中间变量用于访问所述目标变量;将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到加固后的第三源代码。

【技术特征摘要】
1.一种基于符号执行和单点逻辑的源代码加固方法,其特征在于,所述方法包括:确定待混淆的原始源代码中需要保护的目标变量;在所述原始源代码中插入至少一个中间变量,得到第一源代码;其中,所述至少一个中间变量用于访问所述目标变量;将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到加固后的第三源代码。2.根据权利要求1所述的方法,其特征在于,所述中间变量为数组,则所述在所述原始源代码中插入至少一个中间变量,包括:在所述目标变量的前面插入第一数组;所述将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,包括:将所述第一源代码中的部分所述目标变量替换为所述第一数组的下溢出元素;其中,所述下溢出元素的下标为所述第一数组中元素的最大下标与第一数值的和再加1,所述第一数值为所述第一数组与所述目标变量在内存中相隔的存储位置的数量。3.根据权利要求1所述的方法,其特征在于,所述中间变量为数组,则所述在所述原始源代码中插入至少一个中间变量,包括:在所述目标变量的后面插入第二数组;所述将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,包括:将所述第一源代码中的部分所述目标变量替换为所述第二数组的上溢出元素;其中,所述上溢出元素的下标为所述第二数组中元素的最小下标与第二数值的差再减1,所述第二数值为所述目标变量与所述第二数组在内存中相隔的存储位置的数量。4.根据权利要求1所述的方法,其特征在于,所述中间变量为数组,则所述在所述原始源代码中插入至少一个中间变量,包括:在所述目标变量的前面插入第一数组,并在所述目标变量的后面插入第二数组;所述将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,包括:将所述第一源代码中的第一部分所述目标变量替换为所述第一数组的下溢出元素,将所述第一源代码中的第二部分所述目标变量替换为所述第二数组的上溢出元素;其中,所述下溢出元素的下标为所述第一数组中元素的最大下标与第一数值的和再加1,所述第一数值为所述第一数组与所述目标变量在内存中相隔的存储位置的数量;所述上溢出元素的下标为所述第二数组中元素的最小下标与第二数值的差再减1,所述第二数值为所述目标变量与所述第二数组在内存中相隔的存储位置的数量;其中,所述第一部分和所述第二部分互不重叠,且所述第一部分和所述第二部分的并集小于所述原始源代码中的所有目标变量组成的集合。5.根据权利要求4所述的方法,其特征在于,所述第一数组和所述第二数组均与所述目标变量相邻,则所述下溢出元素的下标为所述第一数组中元素的最大下标加1;所述上溢出元素的下标为所述第二数组中元素的最小下标减1。6.根据权利要求1-5任一项所述的方法,其特征在于,所述使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,包括:确定所述第二源代码的函数中的第一条件变量;在所述第一条件变量中添加至少一个不透明谓词,得到第二条件变量,所述不透明谓词的值恒定;利用所述第二条件变量替换所述第一条件变量。7.根据权...

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

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

1