[发明专利]一种提高智能合约检测覆盖率的方法、电子设备及存储介质有效
| 申请号: | 202210917294.9 | 申请日: | 2022-08-01 |
| 公开(公告)号: | CN115292172B | 公开(公告)日: | 2023-03-10 |
| 发明(设计)人: | 董剑;计松言;任潇 | 申请(专利权)人: | 哈尔滨工业大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/57;G06Q40/04;G06F16/27;G06F9/455 |
| 代理公司: | 哈尔滨市晨晟知识产权代理有限公司 23219 | 代理人: | 宫晓平 |
| 地址: | 150001 黑龙*** | 国省代码: | 黑龙江;23 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 提高 智能 合约 检测 覆盖率 方法 电子设备 存储 介质 | ||
1.一种提高智能合约检测覆盖率的方法,其特征在于:包括如下步骤:
S1、利用智能合约的字节码和ABI作为输入;
S2、生成测试用例:根据步骤S1的ABI生成多笔交易,每笔交易调用智能合约中的一个函数,其中交易涉及的函数的输入参数随机生成,将多笔交易组合,生成函数的调用序列,即为测试用例;
S3、执行智能合约的模糊测试:根据步骤S2生成的测试用例执行智能合约的字节码,设初始的种子集为空,一个测试用例执行到一个新的分支时将该测试用例添加到种子集中,对于未被覆盖的分支,将距离未覆盖分支距离最近的测试用例添加到种子集中,其中距离的定义利用绝对距离,并执行步骤S4的动态污点分析;
S4、动态污点分析:采用智能合约中CALLDATALOAD指令作为污点源,识别步骤S2中包括的函数的输入参数,将每个函数的输入参数标记为污点,并存储污点信息;定义污点的传播策略,并在执行智能合约的模糊测试过程中跟踪污点的传播,并记录执行路径上遇到的分支语句中包含的污点信息;对于执行智能合约的模糊测试过程中未覆盖的分支语句设为污点汇识别并记录语句中包含的污点信息;
步骤S4中动态污点分析具体实现方法包括如下步骤:
S4.4、将JUMPI指令定义为污点汇;
S4.5、检测流入条件的污点信息,然后将涉及的输入参数的污点信息存储到键-值对的数据结构中,命名为Jumpi污点信息,该数据结构的键是JUMPI指令对应的程序计数器,值是流入该分支条件中涉及的污点集合;
S4.6、保存位于同一函数中的分支语句的依赖关系,用来对需要突变的输入参数进行筛选,命名为支配污点信息,该数据结构的键是JUMPI指令对应的程序计数器,值是执行路径上涉及的程序计数器的集合;
S5、选择被突变的输入参数:定义智能合约模糊测试过程中被突变输入参数的选择策略,并根据步骤S4动态污点分析的结果寻找被突变的输入参数集合,若存在,则该输入参数集合被突变,若不存在突变的输入参数集合,则根据记录的执行路径上所遇到的分支语句中包含的污点信息以及未覆盖分支中包含的污点信息,将分支中涉及的污点中包括的输入参数取并集,作为被突变的输入参数集合;
步骤S5定义智能合约模糊测试过程中被突变输入参数的选择策略的具体实现方法包括如下步骤:
S5.1、根据步骤S4动态污点分析的结果,找到未覆盖分支语句中包含的输入参数集合,记为Q,即Q为以当前指令的程序计数器为键所对应的Jumpi污点信息中的值;
S5.2、根据步骤S4动态污点分析的结果,找到执行路径上涉及的全部条件语句,记为P,即P为以当前指令的程序计数器为键所对应的支配污点信息中的值,并对P中包括的语句中包含的输入参数取并集,记为N,即N为以P中包括的程序计数器为键所对应的Jumpi污点信息中值的并集;
S5.3、定义输入参数选择的突变策略为选择突变的输入参数集合为Q\N,改变不在N中的输入参数并固定在N中的输入参数,减少无效的突变;
S6、根据步骤S5得到的被突变的输入参数集合突变种子集中对应该分支所保存的测试用例中涉及的函数输入参数,固定其他的输入参数,减少无效突变,突变种子集中的测试用例,突变的策略遵循AFL设定;
S7、根据步骤S6得到的突变的测试用例集执行智能合约,进行模糊测试;
S8、重复步骤S4到S7的过程,直到模糊测试过程达到预设的时间或满足所有的分支。
2.根据权利要求1所述的一种提高智能合约检测覆盖率的方法,其特征在于:步骤S1中若提供了智能合约的源代码,则将智能合约的源代码编译为字节码和ABI。
3.根据权利要求1或2所述的一种提高智能合约检测覆盖率的方法,其特征在于:步骤S4中CALLDATALOAD指令从交易的数据部分读取函数的参数并压入堆栈的顶部,其操作数为该参数在数据中的偏移量,将该指令作为污点源,当程序执行到该指令时,向程序中引入污点,采用key-value的形式存储污点信息,key为堆栈顶部的位置,value为输入参数的偏移量,使用value来区分不同的输入参数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工业大学,未经哈尔滨工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210917294.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种处理方法、装置及电子设备
- 下一篇:信息处理方法、装置及设备





