System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于语法语义分离的智能合约复用分层检测方法技术_技高网

一种基于语法语义分离的智能合约复用分层检测方法技术

技术编号:42702910 阅读:20 留言:0更新日期:2024-09-13 11:57
本发明专利技术公开了一种基于语法语义分离的智能合约复用分层检测方法,首先将待测合约级智能合约通过文本检测检出T1和T2级相似后,划分为函数级代码;然后利用基于AST的节点嵌入和多层池化技术提取代码的语法特征,利用基于PDG的图嵌入技术和构造基于节点注意力机制的图神经网络技术提取代码的语义特征;最后利用提取到的语法特征和语义特征,通过构造多层感知机,得到最终T3、T4和T0的分类检测结果。本发明专利技术利用最新的深度学习技术,通过对代码语法和语义信息的分开提取并进行特征学习,实现了代码相似度检测和复用层次的分层,实现了精度更高、效率更高的检测结果,具有良好的通用性和实用价值。

【技术实现步骤摘要】

本专利技术属于代码复用检测,具体涉及一种基于语法语义分离的智能合约复用分层检测方法


技术介绍

1、代码复用指的是在软件开发过程中重复使用已经存在的代码,以避免重复编写相似的功能或逻辑;代码复用有助于提高代码的可维护性、可重用性和可扩展性,同时也可以减少开发成本和时间。智能合约是一种能够在区块链上运行的程序,通常由solidity(一种图灵完备语言)编写,与其他编程语言不同的是,智能合约每行代码的执行都需要消耗gas,即以太币。因此,开发智能合约时需要特别注意代码的简洁性,尽量减少冗余代码的存在;与此同时,在智能合约中,代码复用的需求比其他编程语言更为普遍。

2、当前,智能合约代码的复用已成为区块链开发中的一种趋势,智能合约的代码复用率高达79.2%,合理的智能合约代码复用能够促进开发者更加高效地构建智能合约,提高开发效率。然而,智能合约代码的复用也会带来一些潜在的弊端:一些存在漏洞的代码往往与正常代码被一同复制到新的智能合约中,导致漏洞传播,造成智能合约安全问题;大量的智能合约复用也会产生对于源代码的抄袭与侵权问题。

3、代码相似度检测是检查代码复用的有效技术手段之一,它能够实现对两段代码是否包含相同或相似的代码片段。在传统软件的代码相似度领域,代码复用通常被分为四个层次:t1即完全复用;t2即完全复用除空格、注释、变量或函数重命名等之外的代码;t3即t2基础上略有修改运行逻辑的代码;t4即实现方式不同但功能相同的代码。在智能合约领域,代码相似度检测技术被用来发现区块链平台中真实的代码克隆行为。

4、经调研检索发现,公开号为cn113312268a的中国专利申请提供了一种智能合约代码相似检测方法,该方法通过提取智能合约源代码的ast(abstract syntax tree,抽象语法树),分析其中变量序列和变量的关系,构造合约语义图,但是ast包含语义信息太少等问题使得检测结果受到影响。

5、公开号为cn117609005a的中国专利申请通过代码分析工具对传统源代码对进行解析生成ast、cfg(control flow graph,控制流图)和函数的调用关系,然后根据函数的调用关系,在ast和cfg相应的节点上添加函数调用边,并使用词嵌入技术将ast和cfg的节点转化为向量表示,每层使用gat(graph attention network,图注意力网络)模型进行特征学习,并使用bilstm(bidirectional long short-term memory,双向长短期记忆网络)模型进行聚合学习;但cfg的语义信息始终太过匮乏,并没有包含数据流信息,并且大量的使用神经网络模型容易产生过拟合问题;同时,面向合约级别的ast和cfg构造并对其进行深度学习,需要消耗大量算力,存在训练效率低等问题。

6、上述技术方案中,实际上并未实现语法语义信息进行分开处理,无法实现对合约复用层次的分层,面向传统软件源代码的相似度检测,无法抓住智能合约的代码编写特点,这无法满足智能合约的安全性要求;随着深度学习技术水平的提升,使用更新的深度学习技术可以有效提高检测的准确率和效率。


技术实现思路

1、鉴于上述,本专利技术提供了一种基于语法语义分离的智能合约复用分层检测方法,能够在语法语义两个层面实现智能合约代码级的复用检测,并通过神经网络技术对合约代码的语法语义信息进行特征提取,从而实现代码复用层次的分层。

2、一种基于语法语义分离的智能合约复用分层检测方法,包括如下步骤:

3、(1)分别构造合约级和函数级智能合约代码复用检测数据集;

4、(2)对于数据集中每一对待测的合约级智能合约代码进行文本检测,检出t1和t2级别存在相似的复用代码并进行标识;

5、(3)对于未被标识的智能合约代码对,先对其进行预处理,再将合约拆分为函数并转化为抽象语法树ast,进而对ast进行权重分配的多层池化,实现代码的语法特征提取;

6、(4)对于未被标识的智能合约代码对,从其函数中提取数据流、控制流和依赖关系,生成程序依赖图pdg(program dependency graph),实现代码的语义特征提取;

7、(5)将提取得到的语法特征和语义特征联合后通过分类器,检出智能合约代码对为t3、t4的相似结果或为t0的不相似结果。

8、进一步地,所述步骤(1)的具体实现方式为:对于在智能合约代码复用检测领域尚没有标签良好的开源数据集的情况,通过搜集来自以太坊的真实合约代码,其源代码公开可用,通过对其是否相似和相似程度进行打标,构造得到合约级智能合约代码复用检测数据集;对收集到的合约代码按函数拆分,对函数进行匹配组合,并按上述方法再次进行打标,构造得到函数级智能合约代码复用检测数据集。

9、进一步地,所述步骤(2)的具体实现方式为:对于任一对待测的合约级智能合约代码c1和c2进行文本检测,分为t1级别文本检测和t2级别文本检测;所述t1级别文本检测即对c1和c2进行文本逐字检查,若检查后完全相同,则判定c1和c2为t1级别相似的复用代码;若上述检测判定为不相似的c1和c2,则再对其进行t2级别文本检测,即删除c1和c2中所有的非关键字符(包括代码注释、空格、换行符、缩进符等与代码编译无关的字符),并对c1和c2中的变量进行统一标识处理,将处理后的c1和c2再次进行文本逐字检查,若检查后完全相同,则判定c1和c2为t2级别相似的复用代码。

10、进一步地,在t2级别文本检测过程中对c1和c2中的变量进行统一标识处理,具体实现方式为:即对于任一段待测的智能合约代码,根据以下表达式构造并初始化其数据字典dictch,并对其中的变量名替换为虚拟变量名,得到统一标识处理后的代码;

11、dictch={var1:simplevar1,var2:simplevar2,…,vari:simplevari}

12、其中:vari表示遍历合约代码搜寻到的第i个变量名,simplevari表示对应vari设定的虚拟变量名,i为变量名的索引号。

13、进一步地,所述步骤(3)中对于未被标识为相似的智能合约代码c1和c2,首先对c1和c2的函数块进行拆分并序列化标识,分别得到函数块集合f1={fm∈c1|f1,f2,…,fm}和f2={vn∈c2|v1,v2,…,vn},m和n分别为c1和c2中函数块的个数,然后对每一个函数块构造抽象语法树ast,得到c1和c2的抽象语法树集合。

14、抽象语法树ast是一种用于表示程序代码抽象语法结构的树状结构数据,在计算机科学中,ast是编译器和解释器中常用的数据结构,用于在编译或解释代码时对其进行分析和操作;ast将源代码的语法结构表示为树形结构,其中每个节点表示源代码中的一个语法结构单元,例如表达式、语句、函数定义等。ast节点即为本文中对其进行处理与编码的最小单元token,树的每个节点通常都有一个节点类型,代表着代码中的不同语法本文档来自技高网...

【技术保护点】

1.一种基于语法语义分离的智能合约复用分层检测方法,包括如下步骤:

2.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(1)的具体实现方式为:对于在智能合约代码复用检测领域尚没有标签良好的开源数据集的情况,通过搜集来自以太坊的真实合约代码,其源代码公开可用,通过对其是否相似和相似程度进行打标,构造得到合约级智能合约代码复用检测数据集;对收集到的合约代码按函数拆分,对函数进行匹配组合,并按上述方法再次进行打标,构造得到函数级智能合约代码复用检测数据集。

3.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(2)的具体实现方式为:对于任一对待测的合约级智能合约代码C1和C2进行文本检测,分为T1级别文本检测和T2级别文本检测;所述T1级别文本检测即对C1和C2进行文本逐字检查,若检查后完全相同,则判定C1和C2为T1级别相似的复用代码;若上述检测判定为不相似的C1和C2,则再对其进行T2级别文本检测,即删除C1和C2中所有的非关键字符,并对C1和C2中的变量进行统一标识处理,将处理后的C1和C2再次进行文本逐字检查,若检查后完全相同,则判定C1和C2为T2级别相似的复用代码。

4.根据权利要求3所述的智能合约复用分层检测方法,其特征在于:在T2级别文本检测过程中对C1和C2中的变量进行统一标识处理,具体实现方式为:即对于任一段待测的智能合约代码,根据以下表达式构造并初始化其数据字典Dictch,并对其中的变量名替换为虚拟变量名,得到统一标识处理后的代码;

5.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中对于未被标识为相似的智能合约代码C1和C2,首先对C1和C2的函数块进行拆分并序列化标识,分别得到函数块集合F1={fm∈C1|f1,f2,…,fm}和F2={vn∈C2|v1,v2,…,vn},m和n分别为C1和C2中函数块的个数,然后对每一个函数块构造抽象语法树AST,得到C1和C2的抽象语法树集合。

6.根据权利要求5所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中实现代码语法特征提取的具体方式为:对于任一AST,首先对其进行先序遍历后,删除AST不必要的修饰语句,仅保留token的类型信息,得到AST的先序遍历序列;然后使用word2vec编码技术对AST进行编码得到其中每个token的特征向量,对这些特征向量进行组合,得到每个函数块的特征矩阵其中p表示特征向量的维度,i表示AST中的token个数;进而通过对预先收集的包含对于智能合约运行起关键作用的标识符在内的关键节点进行增加权重处理,对特征矩阵中的向量进行加权平均池化,得到函数块fm的特征向量依此遍历F1和F2中的所有函数块,得到C1和C2各自的特征矩阵和最后对特征矩阵和分别进行平均池化,得到C1和C2各自的语法特征向量和

7.根据权利要求6所述的智能合约复用分层检测方法,其特征在于:所述步骤(4)中对于智能合约代码的任一函数块,删除其中影响编译的修饰器,然后编译后生成字节码,对各个函数块的字节码构造控制流图CFG和数据流图DFG,并结合程序的依赖关系,生成得到C1和C2的PDG集合。

8.根据权利要求7所述的智能合约复用分层检测方法,其特征在于:所述步骤(4)中实现代码语义特征提取的具体方式为:首先构造基于节点注意力机制的图神经网络模型,使用函数级智能合约代码复用检测数据集对该模型进行训练,模型输出函数级的特征向量对,使用全连接层得出相似性分数并计算损失函数;然后将函数块fm对应的PDG通过训练好的图神经网络模型,得到函数块fm的特征向量依此将F1和F2中每一函数块均通过模型进行检测,得到C1和C2各自的特征矩阵和最后对特征矩阵和分别进行平均池化,得到C1和C2各自的语义特征向量和

9.根据权利要求8所述的智能合约复用分层检测方法,其特征在于:所述步骤(5)的具体实现方式为:首先,将待测智能合约代码对的语法特征向量和以及语义特征向量和进行首尾拼接得到然后构造MLP模型,使用合约级智能合约代码复用检测数据集对该模型进行训练,通过标签和损失函数优化模型参数,设置为多分类任务;最后将tinput输入至训练好的MLP模型,得到最终的分类结果即判定待测智能合约代码对为T3、T4的相似结果或为T0的不相似结果。

...

【技术特征摘要】

1.一种基于语法语义分离的智能合约复用分层检测方法,包括如下步骤:

2.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(1)的具体实现方式为:对于在智能合约代码复用检测领域尚没有标签良好的开源数据集的情况,通过搜集来自以太坊的真实合约代码,其源代码公开可用,通过对其是否相似和相似程度进行打标,构造得到合约级智能合约代码复用检测数据集;对收集到的合约代码按函数拆分,对函数进行匹配组合,并按上述方法再次进行打标,构造得到函数级智能合约代码复用检测数据集。

3.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(2)的具体实现方式为:对于任一对待测的合约级智能合约代码c1和c2进行文本检测,分为t1级别文本检测和t2级别文本检测;所述t1级别文本检测即对c1和c2进行文本逐字检查,若检查后完全相同,则判定c1和c2为t1级别相似的复用代码;若上述检测判定为不相似的c1和c2,则再对其进行t2级别文本检测,即删除c1和c2中所有的非关键字符,并对c1和c2中的变量进行统一标识处理,将处理后的c1和c2再次进行文本逐字检查,若检查后完全相同,则判定c1和c2为t2级别相似的复用代码。

4.根据权利要求3所述的智能合约复用分层检测方法,其特征在于:在t2级别文本检测过程中对c1和c2中的变量进行统一标识处理,具体实现方式为:即对于任一段待测的智能合约代码,根据以下表达式构造并初始化其数据字典dictch,并对其中的变量名替换为虚拟变量名,得到统一标识处理后的代码;

5.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中对于未被标识为相似的智能合约代码c1和c2,首先对c1和c2的函数块进行拆分并序列化标识,分别得到函数块集合f1={fm∈c1|f1,f2,…,fm}和f2={vn∈c2|v1,v2,…,vn},m和n分别为c1和c2中函数块的个数,然后对每一个函数块构造抽象语法树ast,得到c1和c2的抽象语法树集合。

6.根据权利要求5所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中实现代码语法特征...

【专利技术属性】
技术研发人员:胡承泽刘振广穆忠政吴俊杰王勋
申请(专利权)人:浙江工商大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1