一种基于路径遍历的代码验证方法、装置、介质及设备

文档序号:34651946发布日期:2023-06-29 20:35阅读:75来源:国知局
一种基于路径遍历的代码验证方法、装置、介质及设备

本发明涉及软件安全和软件验证领域。


背景技术:

1、专利文献cn 105808429 a公开了一种面向线性约束代码的有界可达性验证方法。该文献所记载的技术方案存在以下缺陷:

2、第一是无法对数组进行处理,只能验证不带有数组的简单程序;

3、第二是smt约束存在约束变量混淆问题,为解决该混淆问题,使得该技术方案需要求解不可达路径片段;

4、第三是效率低,需要求解不可达路径片段,然后再基于不可达路径片段进行分析,步骤复杂,且求解不可达路径片段耗时过长。


技术实现思路

1、本发明所要解决的问题:现有技术下代码可达验证的缺陷。

2、为解决上述问题,本发明采用的方案如下:

3、根据本发明的一种基于路径遍历的代码验证方法,包括如下步骤:

4、步骤s1:获取源代码及目标语句;所述目标语句是所述源代码中的代码语句;

5、步骤s2:将所述源代码转换成控制流图;

6、步骤s3:通过对循环体步进分解的方式,在控制流图中找出所有从程序入口至所述目标语句的路径长度不超过k的路径,组成路径集合;

7、步骤s4:逐个遍历路径集合中的路径,对所遍历的路径进行可达验证;若当前路径可达,结束验证;若当前路径不可达则对路径集合中的下一条路径进行可达验证,直到路径集合中所有路径进行了可达验证;

8、所述步骤s4中,所述对路径进行验证包括如下步骤:

9、步骤s41:按顺序遍历当前路径的各个路径节点,根据当前路径节点所对应的源代码,按顺序抽取关于程序变量的表达式,组成第一表达式队列;

10、步骤s42:根据第一表达式队列的顺序,依据当前表达式之前的赋值语句的表达式对表达式进行简化计算得到第二表达式队列;

11、步骤s43:通过分析程序变量的作用域范围剔除掉第二表达式队列中的无关表达式得到第三表达式序列:若目标语句在程序变量的作用域范围之外,则在第二表达式队列中剔除该程序变量所对应的表达式;若程序变量的赋值语句之间不存在被引用的表达式,则删除该程序变量前序的赋值语句;

12、步骤s44:根据程序变量赋值操作的次数序号结合数组变量的元素偏移量构建约束变量,将第三表达式队列中各个表达式的程序变量替换成约束变量后形成对应的smt约束表达式,组成smt约束编码;

13、步骤s45:通过smt约束求解器对smt约束编码进行smt约束求解,若smt约束编码存在解,则表示当前路径可达,否则表示当前路径不可达。

14、根据本发明的一种基于路径遍历的代码验证装置,包括如下模块:

15、模块m1,用于:获取源代码及目标语句;所述目标语句是所述源代码中的代码语句;

16、模块m2,用于:将所述源代码转换成控制流图;

17、模块m3,用于:通过对循环体步进分解的方式,在控制流图中找出所有从程序入口至所述目标语句的路径长度不超过k的路径,组成路径集合;

18、模块m4,用于:逐个遍历路径集合中的路径,对所遍历的路径进行可达验证;若当前路径可达,结束验证;若当前路径不可达则对路径集合中的下一条路径进行可达验证,直到路径集合中所有路径进行了可达验证;

19、所述模块m4中,所述对路径进行验证包括如下模块:

20、模块m41,用于:按顺序遍历当前路径的各个路径节点,根据当前路径节点所对应的源代码,按顺序抽取关于程序变量的表达式,组成第一表达式队列;

21、模块m42,用于:根据第一表达式队列的顺序,依据当前表达式之前的赋值语句的表达式对表达式进行简化计算得到第二表达式队列;

22、模块m43,用于:通过分析程序变量的作用域范围剔除掉第二表达式队列中的无关表达式得到第三表达式序列:若目标语句在程序变量的作用域范围之外,则在第二表达式队列中剔除该程序变量所对应的表达式;若程序变量的赋值语句之间不存在被引用的表达式,则删除该程序变量前序的赋值语句;

23、模块m44,用于:根据程序变量赋值操作的次数序号结合数组变量的元素偏移量构建约束变量,将第三表达式队列中各个表达式的程序变量替换成约束变量后形成对应的smt约束表达式,组成smt约束编码;

24、模块m45,用于:通过smt约束求解器对smt约束编码进行smt约束求解,若smt约束编码存在解,则表示当前路径可达,否则表示当前路径不可达。

25、根据本发明的一种介质;该介质存储有可以被机器所读取的程序指令集;当该介质内所存储的程序指令集被机器读取并执行时可以实现根上述的基于路径遍历的代码验证方法。

26、根据本发明的一种设备;该设备包括处理器和存储器;所述存储器内存储有程序指令集;当所述存储器内所存储的程序指令集被所述处理器加载并执行时可以实现上述的基于路径遍历的代码验证方法。

27、本发明的技术效果如下:

28、通过对表达式的简化和无关剔除,降低了smt约束编码的复杂度,从而降低了smt约束求解的复杂度;

29、通过对表达式简化计算将数组变量简化成数组元素,结合变量的约束替换,将关于数组变量的操作展开成关于数组元素的smt约束表达式,从而使得smt约束求解能够处理数组相关的变量;

30、通过对表达式变量的约束替换,使得smt约束表达式扁平化,使得smt约束能够表述更多的有关源代码程序的信息,从而免去了不可达路径片段的求解。



技术特征:

1.一种基于路径遍历的代码验证方法,其特征在于,包括如下步骤:

2.一种基于路径遍历的代码验证装置,其特征在于,包括如下模块:

3.一种介质;该介质存储有可以被机器所读取的程序指令集;其特征在于,当该介质内所存储的程序指令集被机器读取并执行时可以实现根据权利要求1所述的基于路径遍历的代码验证方法。

4.一种设备;该设备包括处理器和存储器;所述存储器内存储有程序指令集;其特征在于,当所述存储器内所存储的程序指令集被所述处理器加载并执行时可以实现根据权利要求1所述的基于路径遍历的代码验证方法。


技术总结
本发明公开了一种基于路径遍历的代码验证方法、装置、介质及设备。该方法通过对循环体步进分解的方式,在控制流图中找出所有从程序入口至所述目标语句的路径长度不超过K的路径,组成路径集合;然后遍历路径,对所遍历的路径进行可达验证;在对路径进行可达验证时,通过对表达式简化计算将数组变量简化成数组元素,结合变量的约束替换,将关于数组变量的操作展开成关于数组元素的SMT约束表达式,从而使得SMT约束求解能够处理数组相关的变量,同时也降低了SMT约束求解的复杂度,免去了不可达路径片段的求解分析,从而提高了分析效率。

技术研发人员:卜磊,谢准一,郭骁,孙羽,马乐之,赵建华,李宣东
受保护的技术使用者:南京大学
技术研发日:
技术公布日:2024/1/13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1