CN111611149B - 基于代码行为单位的程序变量有效定义检测方法及装置 - Google Patents

基于代码行为单位的程序变量有效定义检测方法及装置 Download PDF

Info

Publication number
CN111611149B
CN111611149B CN201910132689.6A CN201910132689A CN111611149B CN 111611149 B CN111611149 B CN 111611149B CN 201910132689 A CN201910132689 A CN 201910132689A CN 111611149 B CN111611149 B CN 111611149B
Authority
CN
China
Prior art keywords
code
definition
effective
variable
row
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910132689.6A
Other languages
English (en)
Other versions
CN111611149A (zh
Inventor
孟罡
王磊
沈亮
孙振
赵荣彩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Information Security Engienering Center
Original Assignee
Shanghai Information Security Engienering Center
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Information Security Engienering Center filed Critical Shanghai Information Security Engienering Center
Priority to CN201910132689.6A priority Critical patent/CN111611149B/zh
Publication of CN111611149A publication Critical patent/CN111611149A/zh
Application granted granted Critical
Publication of CN111611149B publication Critical patent/CN111611149B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明属于计算机应用技术领域,特别涉及一种基于代码行为单位的程序变量有效定义检测方法及装置,该方法包含:收集代码样本数据集;提取代码样本数据集中代码抽象语法树,并生成控制流图;遍历控制流图中每行代码,构建各行代码变量的有效定义集合;依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用‑定义链,该使用‑定义链用于检测代码函数及相关联的有效变量定义。本发明中基于抽象语法树生成代码控制流图,根据控制流图路径执行过程变量定义和改变情况,以代码行为单位进行变量有效定义检测,实现自动、批量的程序变量有效定义检测,有效提高代码检测效率和质量,便于程序代码漏洞检测,对网络安全应用具有重要的意义。

Description

基于代码行为单位的程序变量有效定义检测方法及装置
技术领域
本发明属于计算机应用技术领域,特别涉及一种基于代码行为单位的程序变量有效定义检测方法及装置。
背景技术
代码是由程序员用开发工具所支持的语言编写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。在实际应用中,为确保代码的可用性,需要在代码完成开发之后,对代码进行检测,代码检测过程中较为关键的即为程序变量有效定义检测,通过检测以发现代码中存在的问题,便于代码漏洞分析,进而进一步完善代码,保证代码质量。现有技术中代码检测方法包含代码扫描和代码检查。其中,代码扫描仅用于验证代码是否符合规范、语法等问题,难以发现代码中存在的实际漏洞。代码检查可用于发现代码在逻辑、设计上存在的问题,但实施成本较高。因此,如何通过低成本代码检测以发现代码中存在的实际漏洞,成为程序开发应用过程中亟待解决的问题。
发明内容
为此,本发明提供一种基于代码行为单位的程序变量有效定义检测方法及装置,大大降低计算量,实现自动、批量的程序变量有效定义检测,效率高,通用性、适用性强。
按照本发明所提供的设计方案,一种基于代码行为单位的程序变量有效定义检测方法,包含:
A)收集用于检测的代码样本数据集;
B)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
C)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
D)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。
上述的,B)中,控制流图表示程序代码在执行过程中所有可能的执行路径。
上述的,B)中,控制流图包含表示进入控制流图的入口块、表示基本块的节点、表示控制流传递关系的边和表示控制流图流出的出口块。
上述的,C)中,根据控制流某条路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义构建每行代码的有效定义集合。
上述的,C)中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集。
优选的,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位。
上述的,C)中,遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;执行循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
一种基于代码行为单位的程序变量有效定义检测装置,包含:收集模块、提取模块、遍历模块和构建模块,其中,
收集模块,用于收集用于检测的代码样本数据集;
提取模块,用于针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
遍历模块,用于遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
构建模块,用于依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。
上述的装置中,遍历模块中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合。
上述的装置中,遍历模块包含初始化子模块和循环执行子模块,其中,
初始化子模块,用于遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;
循环执行子模块,用于依据代码块改变状态执行有效定义集合获取的循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
本发明的有益效果:
本发明基于抽象语法树生成代码控制流图,根据控制流图路径执行过程变量定义和改变情况,以代码行为单位进行变量有效定义检测,有效提高代码检测效率和质量,便于程序代码漏洞检测,对网络安全应用具有重要的意义。
附图说明:
图1为实施例中检测方法流程图;
图2为实施例中检测装置示意图;
图3为实施例中遍历模块示意图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
针对现有网络安全应用过程中代码检测成本高、检测效率不理想等情形,本发明实施例中,参见图1所示,提供一种基于代码行为单位的程序变量有效定义检测方法,包含如下内容:
S101)收集用于检测的代码样本数据集;
S102)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
S103)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
S104)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。
抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。抽象语法树的结构不依赖于源语言的文法,也就是语法分析阶段所采用的上下文无关文法。抽象语法树(Abstract Syntax Tree,AST)作为程序的一种中间表示形式,在程序分析等诸多领域有广泛的应用。控制流图中每个在图形中的节点代表一个基本块,例如,没有任何跳跃或跳跃目标的直线代码块;跳跃目标以一个块开始,和以一个块结束。定向边缘被用于代表在控制流中的跳跃。在那里,在大部分介绍中,两个特定的设计块:项目块,通过它控制到流图的输入,和编辑块,通过它全面控制流输出。本发明实施例中,针对代码样本数据集,提取代码抽象语法树并生成控制流图,控制流图表示程序代码在执行过程中所有可能的执行路径。控制流图包含表示进入控制流图的入口块、表示基本块的节点、表示控制流传递关系的边和表示控制流图流出的出口块。
举例说明,控制流图CFG是一有向图G=(N,E,nentry,nexit),其中,N是节点集,程序中的每个语句都对应图中的一个节点;边集E={<n1,n2>|n1,n2∈N且n1执行后,可能立即执行n2};nentry和nexit分别为程序的入口和出口节点。它具有唯一的起始结点START和唯一的终止结点STOP。CFG中的每个结点至多只能有两个直接后继。对于有两个直接后继的结点v,其出边具有属性“T”或“F”,并且在CFG中的任意结点N,均存在一条从START经N到达STOP的路径。
本发明另一个实施例中,根据控制流某条路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义构建每行代码的有效定义集合。进一步的,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集。优选的,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位。遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;执行循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
当程序根据控制流的某一条路径执行到程序中的某个点时,对于这个点的所有定义过的且没有被重新赋值的变量定义叫做有效定义。用下表A的代码举例:
Figure BDA0001975960120000051
上表A中,代码所有的定义都有效了第4行。第1行和第2行的定义是在循环体的第一轮循环中有效第4行的。只有第1行、第4行和第5行的定义有效了第5行,因为第4行的代码重写了第2行定义的变量的值。
为了自动化的检查定义有效的情况,将检查中对于代码块为单位的检测变换成对以代码行为单位的检测,具体过程如算法1所示:
算法1
输入:控制流图CFG
输出:每行代码的有效定义的输入集合、输出集合、生成集合与销毁集合
1.遍历代码中的每一行代码L;
2.进入L的定义集合设置为空集;
3.从L出去的定义集合设置为与L行代码新定义的变量集合同样的值;
4.设置代码块的改变状态为true;
5.判断代码块的改变状态是true就执行循环;
6.把改变状态设置成false;
7.遍历代码块中的每一行L;
8.把进入L的定义的集合的值设置为从上一行代码P出去的定义的集合;
9.把从L出去的定义的集合赋值给临时变量oldout;
10.把代码行L生成的定义和进入的定义减去L行重写的定义的集合作为从L出去的定义集合;
11.比较从L行出去的定义集合是否等于之前oldout存储的旧的从L行出去的定义集合;
12.如果不等于,设置代码块的改变状态为true,继续循环处理各个集合;
13.如果等于,得到各行代码的有效定义集合,算法结束。
算法为每一行代码设置4个集合,这一行代码定义的变量属于生成集合;这一行重写的来自于其他地方定义的变量属于销毁集合;通过控制流进来的变量定义未被该行代码重写或销毁的以及本行的变量定义属于输出集合;所有从进来的变量定义属于输入集合。算法反复执行到输出集合没有改变为止,表2所示为算法1对表A中代码分析后的结果。为了分析方便把四个集合表示成位向量,代码中发生的每个赋值对应一个唯一的标志位。根据控制流图可以确定每一行代码的前置行。
表2示例代码有效定义集合
Figure BDA0001975960120000071
代码段基因基于Use-Def链(使用-定义链)进行形式化,本发明实施例中,在有效定义的各个集合构建后,通过分析各行代码的输入集合,可以构建每个定义变量的Use-Def链。Use-Def链链包含变量的使用以及这个变量所有的定义。基于上述内容,可以在代码漏洞分析过程中检测出每一行代码哪个函数和某一个有效的变量定义有关,可用于研究SQLi和XSS漏洞,这两种漏洞成立的条件是需要有一个高危函数和对这个高危函数相关参数变量的不完全的过滤,这种过滤方式通常也是以函数的形式实现的。因此,本发明实施例中,可以把代码行中变量使用的函数作为一个特征,如果这个函数出现了对应的特征值就设置为1,否则为0。出现这些高危函数的代码行对应的样本特性中vulnerable的值设置为1,其他情况为0;实现程序执行过程中代码变量有效定义的自动化的检查。
基于上述的方法,本发明实施例还提供一种基于代码行为单位的程序变量有效定义检测装置,参见图2所示,包含:收集模块101、提取模块102、遍历模块103和构建模块104,其中,
收集模块101,用于收集用于检测的代码样本数据集;
提取模块102,用于针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
遍历模块103,用于遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
构建模块104,用于依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的定义-使用链,该定义-使用链用于检测代码函数及相关联的有效变量定义。
上述的装置中,遍历模块中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合。
上述的装置中,参见图3所示,遍历模块103包含初始化子模块301和循环执行子模块302,其中,
初始化子模块301,用于遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;
循环执行子模块302,用于依据代码块改变状态执行有效定义集合获取的循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
基于上述的方法,本发明实施例还提供一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的方法。
基于上述的方法,本发明实施例还提供一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现上述的方法。
本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (6)

1.一种基于代码行为单位的程序变量有效定义检测方法,其特征在于,包含:
A)收集用于检测的代码样本数据集;
B)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
C)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
D)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义;
C)中,根据控制流某条路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义构建每行代码的有效定义集合;
C)中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合;
将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位;
C)中,遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;执行循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
2.根据权利要求1所述的基于代码行为单位的程序变量有效定义检测方法,其特征在于,B)中,控制流图表示程序代码在执行过程中所有可能的执行路径。
3.根据权利要求1或2所述的基于代码行为单位的程序变量有效定义检测方法,B)中,控制流图包含表示进入控制流图的入口块、表示基本块的节点、表示控制流传递关系的边和表示控制流图流出的出口块。
4.一种基于代码行为单位的程序变量有效定义检测装置,其特征在于,基于权利要求1所述的方法实现,包含:收集模块、提取模块、遍历模块和构建模块,其中,
收集模块,用于收集用于检测的代码样本数据集;
提取模块,用于针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
遍历模块,用于遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
构建模块,用于依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。
5.根据权利要求4所述的基于代码行为单位的程序变量有效定义检测装置,其特征在于,遍历模块中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合。
6.根据权利要求5所述的基于代码行为单位的程序变量有效定义检测装置,其特征在于,遍历模块包含初始化子模块和循环执行子模块,其中,
初始化子模块,用于遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;
循环执行子模块,用于依据代码块改变状态执行有效定义集合获取的循环过程,循环过程中,首先,判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。
CN201910132689.6A 2019-02-22 2019-02-22 基于代码行为单位的程序变量有效定义检测方法及装置 Active CN111611149B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910132689.6A CN111611149B (zh) 2019-02-22 2019-02-22 基于代码行为单位的程序变量有效定义检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910132689.6A CN111611149B (zh) 2019-02-22 2019-02-22 基于代码行为单位的程序变量有效定义检测方法及装置

Publications (2)

Publication Number Publication Date
CN111611149A CN111611149A (zh) 2020-09-01
CN111611149B true CN111611149B (zh) 2023-03-31

Family

ID=72197804

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910132689.6A Active CN111611149B (zh) 2019-02-22 2019-02-22 基于代码行为单位的程序变量有效定义检测方法及装置

Country Status (1)

Country Link
CN (1) CN111611149B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008047351A2 (en) * 2006-10-19 2008-04-24 Checkmarx Ltd. Locating security vulnerabilities in source code
CN104573503A (zh) * 2015-02-11 2015-04-29 中国农业银行股份有限公司 一种内存访问溢出的检测方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9818136B1 (en) * 2003-02-05 2017-11-14 Steven M. Hoffberg System and method for determining contingent relevance
US9182957B2 (en) * 2012-07-10 2015-11-10 Loring Craymer Method and system for automated improvement of parallelism in program compilation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008047351A2 (en) * 2006-10-19 2008-04-24 Checkmarx Ltd. Locating security vulnerabilities in source code
CN104573503A (zh) * 2015-02-11 2015-04-29 中国农业银行股份有限公司 一种内存访问溢出的检测方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
段成全 ; 刘金刚 ; .基于程序分析的自动化漏洞挖掘工具的研究.微计算机信息.2011,(01),全文. *
沈雁 ; 王环 ; 戴瑜兴 ; .基于改进深度孪生网络的分类器及其应用.计算机工程与应用.2018,(10),全文. *

Also Published As

Publication number Publication date
CN111611149A (zh) 2020-09-01

Similar Documents

Publication Publication Date Title
US10146532B2 (en) Apparatus and method for detecting code cloning of software
KR101099212B1 (ko) 예외 처리 구조물들을 포함하는 소프트웨어의 소스 언어 독립형 중간 표현을 처리하는 방법, 다수의 소스 코드 언어들에 대한 소스 언어 독립형 예외 처리 중간 표현들을 구현하기 위한 시스템 및 컴퓨터 판독가능 저장 매체
CN111611586B (zh) 基于图卷积网络的软件漏洞检测方法及装置
US8819637B2 (en) Fixing security vulnerability in a source code
US20040205411A1 (en) Method of detecting malicious scripts using code insertion technique
CN102841844B (zh) 一种基于简易符号执行的二进制代码漏洞挖掘方法
CN110909358A (zh) 一种基于动静态分析的整形漏洞检测方法
EP3379443A1 (en) Method and computer device to deobfuscate a source code
CN112632560A (zh) 一种web漏洞确认方法以及装置
CN106933642B (zh) 应用程序的处理方法及处理装置
CN112711760A (zh) 检测智能合约恶意消除重入影响漏洞的检测方法和装置
CN117113347A (zh) 一种大规模代码数据特征提取方法及系统
CN110162474B (zh) 一种基于抽象语法树的智能合约重入漏洞检测方法
CN111611149B (zh) 基于代码行为单位的程序变量有效定义检测方法及装置
CN113688402A (zh) 一种智能合约漏洞挖掘方法及装置
CN117349803B (zh) 代码解混淆方法、装置、电子设备及计算机可读存储介质
Moyen et al. Loop quasi-invariant chunk motion by peeling with statement composition
Semenov et al. Obfuscated Code Quality Measurement
CN111381814A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN111381827A (zh) 生成代码文件的语法树的方法、装置及电子设备
US20040015872A1 (en) Process and system for validating a computer program segment
CN117235746B (zh) 一种基于多维ast融合检测的源代码安全管控平台
US20170249131A1 (en) Compilation apparatus and compiling method
CN117251171B (zh) 一种控制流图中谓词基本块检测方法及设备
CN117911030A (zh) 一种以太坊智能合约历史交易的漏洞检测方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant