一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码混淆的校验方法、电子设备和存储介质与流程

2022-02-22 07:59:18 来源:中国专利 TAG:


1.本发明涉及代码静态分析技术领域,具体的说,是一种代码混淆的校验方法、电子设备和存储介质,用于对混淆代码进行校验。


背景技术:

2.为了对完成构件、调试和部署应用程序的所有工作之后的代码进行保护,经常会用到代码混淆操作。常见的代码混淆方式,如将代码中的各种元素,如变量、函数、类的名字改写成无意义的名字。比如改写成单个字母或是简短的无意义的字母组合,甚至改写成“_”这样的符号,使得阅读的人无法根据名字猜测其用途。或者使用宏定义。避免被逆向处函数名、对应的功能等。或者使用代码混淆器,进行死代码注入、变换数据流、变换控制流等方式,进行代码混淆。然而,改写元素的方式和使用宏定义的方式,很容易破解;使用代码混淆的方式,很可能将原始代码的功能破坏,甚至会引入其他代码漏洞的风险。
3.现有专利一申请号为cn201810519622.3,发明名称为:基于bi-lstm和文本相似性的漏洞检测方法,该方案的主要实现方案为:
4.1.通过敏感函数对文本文件切片得到代码段;
5.2.对代码段通过分词算法处理得到单词从而生成用于组成文本向量的字典;
6.3.通过字典将文本转化为词向量字典作为训练样本对bi-lstm模型进行训练,从而得到漏洞的文本性特征以及模型参数;
7.4.通过最终得到的lstm模型进行待测源码的漏洞判断。
8.现有专利二申请号为cn202011256543.1,发明名称为:一种基于深度学习的自动化漏洞挖掘方法,该方案的主要实现方案为:
9.1.生成漏洞数据库;
10.2.生成深度学习模型;
11.3.确定该应用程序所包括的待检测对象,以待检测对象为目标设置测试参数,得到测试对象;
12.4.向应用程序发送针对测试对象的测试请求,依据响应结果来进行测试;
13.5.确定源代码数据类型;
14.6.对代码的静态特征进行静态分析和学习;
15.7.通过动态分析对静态分析的分析结果进行校正;
16.8.进行漏洞挖掘;
17.9.根据挖掘结果判断是否存在漏洞;
18.10.完善深度学习模型。
19.上述方案尚存缺陷:
20.1、上述专利一采用的漏洞代码库为从cve数据库中搜集得到的cve-119,cve-120缓冲区溢出代码,漏洞类型有限。
21.2、上述专利一采用的模型检测出的漏洞是否为可利用漏洞,由人工判定完成。
22.3、上述专利一采用与100个漏洞文件进行相似度判断再通过投票的形式判断是否为漏洞文件,容易出现漏报误报,且难以判断具体的漏洞类型。
23.4、上述专利一存在较多人工复核的工作。
24.5、上述专利二没有将代码表征为向量,而是对代码经过静态分析与动态分析得到的结果送入深度学习模型,这样会导致代码层面语义信息的丢失。
25.为增大混淆后的代码的不可读性、模糊性,同时又保证正常功能不受影响,整体项目不引入外在的代码漏洞风险,本专利提出一种代码混淆的校验方法、电子设备和存储介质。


技术实现要素:

26.针对上述的现有技术的代码混淆方法易偏离原有代码功能、引入其他代码漏洞的风险,本发明的目的在于提供一种代码混淆的校验方法、电子设备和存储介质,使用语义的代码混淆方法,对经过代码混淆后的程序进行代码功能检测,判断代码混淆后的程序是否与原始代码在功能上保持一致,具有避免引入代码漏洞的效果。
27.本发明通过下述技术方案实现:
28.一种代码混淆的校验方法,包括以下步骤:
29.步骤s1:获取具有原始代码和/或混淆代码的完整功能的代码段;
30.步骤s2:将所述代码段以抽象语法树的形式构建为代码元素块;
31.步骤s3:将所述代码元素块中相互具有控制依赖、数据依赖的语句集合并生成代码片段;
32.步骤s4:将所述代码片段编码为代码向量,获得原始代码的代码向量和混淆代码的代码向量;
33.步骤s5:判断混淆代码是否与原始代码具有相同功能;
34.所述步骤s5具体是指,向bgru分类器ⅰ中输入原始代码的代码向量进行训练,并输出原始代码所具有的功能对应的标签a;bgru分类器ⅰ中输入混淆代码的代码向量进行检测,并输出混淆代码所具有的功能对应的标签b;在bgru分类器ⅰ中对比原始代码所具有的功能对应的标签a和混淆代码所具有的功能的对应的标签b,若相同则输出混淆代码的代码向量;若不同则输出该段混淆代码对应的原始代码进入代码混淆器重新生成混淆代码后,再依次按照步骤s1~步骤s4进行处理;
35.步骤s6:判断混淆代码是否存在漏洞;
36.所述步骤s6具体是指,向bgru分类器ⅱ中输入漏洞代码的代码向量进行训练,漏洞代码的漏洞类型作为bgru分类器ⅱ的输出;bgru分类器ⅱ获取步骤s5中输出的混淆代码的代码向量,并对混淆代码的代码向量进行漏洞检测,检测无漏洞则输出检测结果;检测有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器重新生成混淆代码后,再依次按照步骤s1~步骤s5进行处理;同时bgru分类器ⅱ将有漏洞的混淆代码的代码向量的漏洞类型,与漏洞代码的漏洞类型进行对比并输出混淆代码的漏洞类型;若不属于,bgru分类器ⅱ输出漏洞结果“unknow”。
37.为了更好地实现本发明,进一步地,所述步骤s2中,所述抽象语法树包括根节点、叶子节点和中间节点;所述根节点为所述代码段中的函数、所述叶子节点为所述代码段中
的变量、所述中间节点为所述代码段中的语句或连续的变量。
38.为了更好地实现本发明,进一步地,所述步骤s4中,所述的编码过程具体是指包括:先删除所述代码片段中的不合法字符,再将所述代码的片段中的函数和变量名进行映射标准化;再将所述代码片段中的每个单词嵌入成固定长度的向量,并将所述代码片段的各个单词的向量集合为代码向量。
39.一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时,实现如权利要求1至3任一项所述代码混淆的校验方法的步骤。
40.一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上述权利要求1至3任一项所述代码混淆的校验方法的步骤。
41.本发明与现有技术相比,具有以下优点及有益效果:
42.本发明能够对混淆代码进行校验,防止混淆代码与原始代码功能不一致,同时,能够防止混淆代码引入代码漏洞。
附图说明
43.下面将结合附图对技术方案进行清楚、完整地描述,显然所描述的实施例是本发明一部分实施例,而不是全部的实施例。
44.图1为本发明提供的一种代码混淆的校验方法的逻辑框图;
45.图2为本发明步骤s5的流程示意图;
46.图3为本发明步骤s6的流程结构示意图。
具体实施方式
47.以下结合实施例的具体实施方式,对本发明创造的上述内容再做进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段作出的各种替换或变更,均应包括在本发明的范围内。
48.实施例1:
49.本实施例的一种代码混淆的校验方法,如图1-图3所示,获取代码向量过程中,受到图像处理中候选区域概念的启发,采用代码语句的集合作为候选区域,并使用滑动窗口,对原始代码和/或混淆代码的代码段进行代码元素块的提取;从代码元素块中获取具有相互数据依赖和控制依赖的代码语句的集合,形成代码片段,代码片段进一步编码形成的代码向量。由混淆代码生成的代码向量需要满足两个条件才能证明混淆代码符合要求,其中条件一为:混淆代码与原始代码的功能相同;条件二为:混淆代码与原始代码相比较没有引入新的漏洞。
50.具体实施包括以下步骤:
51.步骤s1:获取具有原始代码和混淆代码的完整功能的代码段;
52.步骤s2:将所述代码段以抽象语法树的形式构建为代码元素块;
53.步骤s3:将所述代码元素块中相互具有控制依赖、数据依赖的语句集合并生成代
码片段;
54.步骤s4:将所述代码片段编码为代码向量,获得原始代码的代码向量和混淆代码的代码向量;
55.步骤s5:判断混淆代码是否与原始代码具有相同功能;
56.所述步骤s5具体是指,向bgru分类器ⅰ中输入原始代码的代码向量进行训练,并输出原始代码所具有的功能对应的标签a;bgru分类器ⅰ中输入混淆代码的代码向量进行检测,并输出混淆代码所具有的功能对应的标签b;在bgru分类器ⅰ中对比原始代码所具有的功能对应的标签a和混淆代码所具有的功能对应的标签b,若相同则输出混淆代码的代码向量;若不同则输出该段混淆代码对应的原始代码进入代码混淆器重新生成混淆代码后,再依次按照步骤s1~步骤s4进行处理;
57.步骤s6:判断混淆代码是否存在漏洞;
58.bgru分类器ⅱ中输入漏洞代码的代码向量进行训练,漏洞代码的漏洞类型作为bgru分类器ⅱ的输出;bgru分类器ⅱ获取步骤s5中输出的混淆代码的代码向量,并对混淆代码的代码向量进行漏洞检测,检测无漏洞则输出检测结果;检测有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器重新生成混淆代码后,再依次按照步骤s1~步骤s5进行处理;同时bgru分类器ⅱ将有漏洞的混淆代码的代码向量的漏洞类型,与漏洞代码的漏洞类型进行对比并输出混淆代码的漏洞类型;若不属于,bgru分类器ⅱ输出漏洞结果“unknow”。
59.本实施的步骤s5中,将原始代码选代码向量和混淆代码的代码向量作为bgru分类器ⅰ的输入,如果混淆代码和原始代码具有有相同功能,则标签为同一类,满足条件一,并将该段混淆代码的代码向量输入步骤s6中的bgru分类的ⅱ;如有差异功能,则标签为不同类别,并将该段混淆代码的代码向量对应的原始代码重新输入代码混淆器,再次生成混淆代码后,依次按照步骤s1~步骤s4进行;
60.步骤s6中将公开的漏洞代码的代码向量输入bgru分类器ⅱ,漏洞代码的漏洞类型作为该漏洞代码的标签,训练bgru分类器ⅱ;训练完成后,将混淆代码的代码向量作为输入,如输出无漏洞结构,则该段混淆代码满足条件二,则该段混淆代码最终符合要求;检测出有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器后生成新的混淆代码,并将新的混淆代码按照步骤s1~步骤s5依次进行。
61.实施例2:
62.本实施例在实施例1的基础上做进一步优化,步骤s2中,所述步骤s2中,所述抽象语法树包括根节点、叶子节点和中间节点;所述根节点为所述代码段中的函数、所述叶子节点为所述代码段中的变量、所述中间节点为所述代码段中的语句或连续的变量。
63.步骤s4中,所述编码过程包括:删除所述代码片段中的不合法字符,再将所述代码的片段中的函数和变量名进行映射标准化;再将所述代码片段中的每个单词嵌入成固定长度的向量,并将所述代码片段的各个单词的向量集合为代码向量。
64.本实施例的其他部分与实施例1相同,故不再赘述。
65.实施例3:
66.一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时,实现实施例1或2中的代码混淆的校验方法的步骤。
67.实施例4:
68.本实施例在上述实施例1的基础上做进一步优化,一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现实施例1或2中的代码混淆的校验方法的步骤。
69.以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化,均落入本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献