System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于智能合约漏洞分析,具体是指一种基于区块链的智能合约漏洞分析方法。
技术介绍
1、智能合约漏洞分析方法是指针对运行在区块链平台上的智能合约进行安全分析的方法,由于智能合约一旦部署到区块链上就难以修改,因此,在合约发布前进行彻底的安全分析和漏洞检测至关重要。
2、现有的智能合约漏洞分析方法主要有形式化验证和深度学习两条技术路线,形式化验证通过定义合约源码的逻辑化语言来对其进行形式化验证,可以判断代码是否遵循给定的形式化规范描述,但由于智能合约版本变化较快,形式化规范推导难度大,所以基于形式化验证的漏洞检测技术方法通用性和可扩展性不高。
3、现有的基于深度学习的漏洞检测具有良好的扩展性和适应性,但大多无法像其他检测方法那样定位到可能存在的漏洞点或者对应的代码行,而那些以contractcheck模型为代表的少数声称能够做到细粒度漏洞检测的深度学习模型也包含两个问题,第一是过度依赖特定智能合约语言配套生态中的语义提取工具,但很多小众的智能合约语言没有配套的语义提取工具,也就无法对那些基于小众的智能合约语言的智能合约提供漏洞检测,最终将那些基于小众的智能合约语言的智能合约置于被攻击的风险之中,第二就是定位局限于单个代码行,这会导致错过那些涉及多个代码行之间的交互的更复杂的漏洞,最终留下智能合约攻击的隐患。
技术实现思路
1、针对上述情况,为克服现有技术的缺陷,本专利技术提供了一种基于区块链的智能合约漏洞分析方法,针对现有技术中的问题,提出对code2ve
2、本专利技术采取的技术方案如下:本专利技术提供的一种基于区块链的智能合约漏洞分析方法,所述方法包括以下步骤:
3、步骤s1:访问智能合约漏洞库并采用数据增强技术制定智能合约漏洞数据集;
4、步骤s2:构建自然语言自编码器并使用智能合约漏洞数据集训练自然语言自编码器,自然语言自编码器包括word2vec预训练模型、自动编码器、瓶颈层和自动解码器;
5、步骤s3:加载code2vec预训练模型并使用自然语言自编码器对code2vec预训练模型进行迁移微调;
6、步骤s4:采用自然语言自编码器和code2vec预训练模型构建自然-代码联合语义编码器并使用智能合约漏洞数据集进一步训练自然-代码联合语义编码器;
7、步骤s5:使用自然-代码联合语义编码器构建智能合约漏洞定位器并使用智能合约漏洞数据集训练智能合约漏洞定位器;
8、步骤s6:使用智能合约漏洞定位器以二分收敛迭代法对智能合约进行漏洞定位,得到目标漏洞代码段与目标漏洞代码段的漏洞类型;
9、步骤s7:使用自然-代码联合语义编码器构建自然-代码联合语义匹配器;
10、步骤s8:使用自然-代码联合语义匹配器从智能合约漏洞库中查找与目标漏洞最接近的漏洞条目。
11、进一步地,所述步骤s1具体包括以下步骤:
12、步骤s11:访问智能合约漏洞库,从智能合约漏洞库中采集每个智能合约漏洞条目对应的智能合约全部代码、漏洞代码段、漏洞类型和漏洞描述并汇总为原始漏洞实例;
13、步骤s12:采集不存在漏洞的智能合约,从不存在漏洞的智能合约中随机截取代码段,将不存在漏洞的智能合约的智能合约全部代码和随机截取得到的代码段汇总为负样本漏洞实例,对负样本漏洞实例的漏洞类型和漏洞描述进行0填充,为负样本漏洞实例增加漏洞属性,将负样本漏洞实例的漏洞属性标注为无漏洞代码段;
14、步骤s13:采用对原始漏洞实例和负样本漏洞实例的智能合约全部代码进行随机隐去的方法进行数据增强,生成数据增强漏洞实例:对每个原始漏洞实例和负样本漏洞实例随机生成上下文隐去数,上下文隐去数为整数,上下文隐去数为正数时从智能合约全部代码的第一行开始向下删去行数相当于上下文隐去数的绝对值的代码,上下文隐去数为负数时从智能合约全部代码的最后一行开始向上删去行数相当于上下文隐去数的绝对值的代码,生成数据增强漏洞实例,为原始漏洞实例和数据增强漏洞实例增加漏洞属性,原始漏洞实例和数据增强漏洞实例的漏洞属性为有漏洞代码段;
15、步骤s14:将原始漏洞实例、负样本漏洞实例和数据增强漏洞实例整合成智能合约漏洞数据集。
16、进一步地,所述步骤s2具体包括以下步骤:
17、步骤s21:加载word2vec预训练模型,构建自编码器,所述自编码器包括自动编码器、瓶颈层和自动解码器,将word2vec预训练模型连接至自编码器,构建自然语言自编码器;
18、步骤s22:指定智能合约漏洞数据集的智能合约全部代码为word2vec预训练模型的输入,指定智能合约漏洞数据集的漏洞描述为自动解码器的目标输出,训练自然语言自编码器。
19、进一步地,所述步骤s3具体包括以下步骤:
20、步骤s31:将智能合约漏洞数据集等比例划分为不同批次,加载code2vec预训练模型并下载code2vec预训练数据集,从自然语言自编码器中截取自动解码器,将code2vec预训练模型连接至自动解码器,设置最大原任务准确度下降值,用code2vec预训练数据集测试code2vec预训练模型,得到最初原任务精准度;
21、步骤s32:指定智能合约漏洞数据集中的智能合约全部代码为输入,漏洞描述为目标输出,训练code2vec预训练模型,在训练过程中,每完成一批次的训练就用code2vec预训练数据集测试code2vec预训练模型,得到此批次训练完成后的原任务精准度和此批次训练造成的原任务精准度下降值;
22、步骤s33:若所有批次训练完成后的原任务精准度小于最初原任务精准度减去最大原任务准确度下降值得到的值,则回滚code2vec预训练模型的权重至训练开始前的状态并将原任务精准度下降值最高的批次从code2vec预训练模型之后的训练中禁用;
23、步骤s34:重复步骤s32和步骤s33直到所有批次训练完成后的原任务精准度高于最初原任务精准度减去最大原任务准确度下降值得到的值。
24、进一步地,所述步骤s4具体包括以下步骤:
25、步骤s41:重置自然语言自编码器中自动编码器与自动解码器的权重,构建拼接融合层;
26、步骤s42:将自然语言自编码器截去自动解码器后连接至拼接融合层,将code2vec预训练模型连接至拼接融合层,构建自然-代码联合语义编码器;
27、步骤s43:将拼接融合层连接至自动解码器,指定智能合约漏洞数据集中的智能合约全部代码指定为code2vec预训练模型和word本文档来自技高网...
【技术保护点】
1.一种基于区块链的智能合约漏洞分析方法,其特征在于:所述方法包括以下步骤:
2.根据权利要求1所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤S1具体包括以下步骤:
3.根据权利要求2所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤S3具体包括以下步骤:
4.根据权利要求3所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤S4具体包括以下步骤:
5.根据权利要求4所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤S5具体包括以下步骤:
6.根据权利要求5所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤S6具体包括以下步骤:
【技术特征摘要】
1.一种基于区块链的智能合约漏洞分析方法,其特征在于:所述方法包括以下步骤:
2.根据权利要求1所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤s1具体包括以下步骤:
3.根据权利要求2所述的一种基于区块链的智能合约漏洞分析方法,其特征在于:所述步骤s3具体包括以下步骤:
4.根据...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。