一种基于序列模型的智能合约可重入漏洞检测方法及系统转让专利

申请号 : CN202210356151.5

文献号 : CN114707154B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘兰余永杰吴亚峰何康健黄志豪张宝莹

申请人 : 广东技术师范大学

摘要 :

本发明提出一种基于序列模型的智能合约可重入漏洞检测方法及系统,包括以下步骤:获取智能合约源代码;将所述智能合约源代码转换为向量形式,得到智能合约片段向量;构建基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;将所述智能合约片段向量输入可重入漏洞检测序列模型进行重入检测,可重入漏洞检测序列模型输出可重入漏洞检测结果。使用双向循环神经网络对智能合约进行特征提取并利用多注意力机制对重要特征进行捕捉,赋予权重,使得可重入漏洞检测序列模型具有更强的鲁棒性,提高了智能合约可重入漏洞的检测准确率。

权利要求 :

1.一种基于序列模型的智能合约可重入漏洞检测方法,其特征在于,包括以下步骤:S1:获取智能合约源代码;

S2:将所述智能合约源代码转换为向量形式,得到智能合约片段向量;

S3:构建基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;

S4:将所述智能合约片段向量输入可重入漏洞检测序列模型,通过双向循环神经网络对智能合约片段向量进行特征提取并利用多注意力机制对重要特征进行捕捉,得到可重入漏洞检测结果;

其中,所述双向循环神经网络包括依次连接的输入层、隐藏层和输出层;所述隐藏层包括注意力层;所述输出层包括softmax层;将智能合约片段向量输入双向循环神经网络,智能合约片段向量依次经过的输入层和隐藏层进行特征提取和重要特征捕捉,得到包括智能合约特征信息的隐藏状态;softmax层采用softmax函数对所述隐藏状态进行激活,得到可重入漏洞检测结果;

其中,所述隐藏层还包括前向隐藏层和后向隐藏层;将所述智能合约片段向量沿前向隐藏层传播方向输入双向循环神经网络,得到前向隐藏状态;将所述智能合约片段向量沿后向隐藏层传播方向输入双向循环神经网络,得到后向隐藏状态;将前向隐藏状态和后向隐藏状态连接起来,获得需要送入输出层的隐藏状态Ht;具体表达式如下所示:(front) (front) (front)

Ht前=φ(xtW xh+Ht‑1前W hh+b h)

(back) (back) (back)

Ht后=φ(xtW xh+Ht+1后W hh+b h)

Ht=[Ht前,Ht后]

n×h n×h n×d

其中,Ht前∈R 表示前向隐藏状态,Ht后∈R 表示后向隐藏状态,xt∈R 表示输入的智能合约片段向量,n表示智能合约的样本数,d表示每个智能合约样本中的智能合约片段(front) d×h (front) h×h向量的输入数,h为隐藏层中隐藏单元的数目,权重矩阵W xh∈R 和W hh∈R 分(back) d×h (back) h×h别为前向隐藏层的权重矩阵,W xh∈R 和W hh∈R 分别为后向隐藏层的权重矩阵,(front) 1×h (back) 1×h偏置b h∈R 为前向隐藏状态的偏置,b h∈R 为后向隐藏状态的偏置;

将隐藏状态Ht输入输出层,采用softmax函数对所述隐藏状态进行激活,得到智能合约*片段向量的标签y作为可重入漏洞检测结果,其表达式如下所示:

其中,whq为输出层的权重矩阵,bq为输出层的偏置,h表示双向循环神经网络中隐藏单元的数量,q表示输出单元的数量。

2.根据权利要求1所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2具体包括以下步骤:S2.1:对智能合约源代码进行数据清理;

S2.2:将与可重入漏洞无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码;

S2.3:将所述简化代码中的智能合约片段划分为若干令牌序列;

S2.4:对所述令牌序列进行矢量化,得到智能合约片段向量。

3.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.1中,所述对智能合约源代码进行数据清理包括删除智能合约源代码中的空行、非ASCII字符和不相关的注释。

4.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.2中,将经过数据清理,并且与call.value核心节点和withdraw函数无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码,具体包括以下步骤:S2.2.1:统一智能合约源代码字母的大小写;

S2.2.2:利用标识符来替换智能合约源代码中的字符和/或关键字,得到简化代码。

5.根据权利要求4所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.2.2中,利用与移行操作或换行操作相对应的标识符chr(10)替换智能合约源代码中的字符和/或关键字,得到简化代码。

6.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.4中,使用doc2vec对所述令牌序列进行矢量化,得到智能合约片段向量。

7.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.4中,对所述令牌序列进行矢量化,得到智能合约片段向量之后,若智能合约片段向量的长度小于固定长度,则在智能合约片段向量首部添加关联节点控制信息;若智能合约片段向量的长度大于固定长度,则截取出大于固定长度的部分长度,并将截取的部分长度进行转移;所述固定长度为已知的一维智能合约片段向量长度的最大值。

8.根据权利要求1所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S3中,还包括训练所述可重入漏洞检测序列模型,具体步骤包括:将智能合约片段向量输入可重入漏洞检测序列模型,根据可重入漏洞检测序列模型的输出结果,利用Focal Loss损失函数自适应平衡正样本和负样本的损失,并利用反向传播算法进行梯度更新,更新可重入漏洞检测序列模型的参数;所述正样本为正常智能合约源代码,所述负样本为智能合约可重入漏洞。

9.一种基于序列模型的智能合约可重入漏洞检测系统,应用于如权利要求1~8任一项所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,包括:数据获取模块,用于获取智能合约源代码;

向量转换模块,用于将所述智能合约源代码转换为向量形式,得到智能合约片段向量;

基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;将所述智能合约片段向量输入训练好的可重入漏洞检测序列模型中,可重入漏洞检测序列模型输出可重入漏洞检测结果。

说明书 :

一种基于序列模型的智能合约可重入漏洞检测方法及系统

技术领域

[0001] 本发明涉及区块链领域,更具体地,涉及一种基于序列模型的智能合约可重入漏洞检测方法及系统。

背景技术

[0002] 区块链上的智能合约是控制点对点网络中多个交易的自动执行的程序。许多智能合约持有着价值数十亿美元的加密货币,使其对攻击者具有足够的吸引力。随着智能合约数量的增加,越来越多的安全问题也相应暴露出来。另外,智能合约在区块链部署后即无法再进行修改,也就意味着无法对部署后的智能合约中的安全漏洞进行修改。因此,在部署前对智能合约进行漏洞检测显得尤为重要。
[0003] 现有的许多智能合约检测工具依赖与形式分析,其在捕捉高假阳性和假阴性的情况下无法实现对智能合约可重入漏洞进行精确判断。例如Securify、Mythril、Oyente和Smartcheck等智能合约检测工具,都存在检测准确率不高的缺陷,误报和漏报率高。

发明内容

[0004] 本发明为解决现有智能合约可重入漏洞检测技术存在的检测准确率低的缺陷,提供一种基于序列模型的智能合约可重入漏洞检测方法及系统。
[0005] 为解决上述技术问题,本发明的技术方案如下:
[0006] 第一个方面,本发明提出一种基于序列模型的智能合约可重入漏洞检测方法,包括以下步骤:
[0007] S1:获取智能合约源代码;
[0008] S2:将所述智能合约源代码转换为向量形式,得到智能合约片段向量;
[0009] S3:构建基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;
[0010] S4:将所述智能合约片段向量输入可重入漏洞检测序列模型,通过双向循环神经网络对智能合约片段向量进行特征提取并利用多注意力机制对重要特征进行捕捉,得到可重入漏洞检测结果。
[0011] 作为优选方案,S2具体包括以下步骤:
[0012] S2.1:对智能合约源代码进行数据清理;
[0013] S2.2:将与可重入漏洞无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码;
[0014] S2.3:将所述简化代码中的智能合约片段划分为若干令牌序列;
[0015] S2.4:对所述令牌序列进行矢量化,得到智能合约片段向量。
[0016] 作为优选方案,S2.1中,所述对智能合约源代码进行数据清理包括删除智能合约源代码中的空行、非ASCII字符和不相关的注释。
[0017] 作为优选方案,S2.2中,将经过数据清理,并且与call.value核心节点和withdraw函数无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码,具体包括以下步骤:
[0018] S2.2.1:统一智能合约源代码字母的大小写;
[0019] S2.2.2:利用标识符来替换智能合约源代码中的字符和/或关键字,得到简化代码。
[0020] 作为优选方案,S2.2.2中,利用与移行操作或换行操作相对应的标识符chr(10)替换智能合约源代码中的字符和/或关键字,得到简化代码。
[0021] 作为优选方案,S2.4中,使用doc2vec对所述令牌序列进行矢量化,得到智能合约片段向量。
[0022] 作为优选方案,S2.4中,对所述令牌序列进行矢量化,得到智能合约片段向量之后,若智能合约片段向量的长度小于固定长度,则在智能合约片段向量首部添加关联节点控制信息。若智能合约片段向量的长度大于固定长度,则截取出大于固定长度的部分长度,并将截取的部分长度进行转移。所述固定长度为已知的一维智能合约片段向量长度的最大值。
[0023] 作为优选方案,S4中,所述双向循环神经网络包括依次连接的输入层、隐藏层和输出层;所述隐藏层包括注意力层;所述输出层包括softmax层;将智能合约片段向量输入双向循环神经网络,智能合约片段向量依次经过的输入层和隐藏层进行特征提取和重要特征捕捉,得到包括智能合约特征信息的隐藏状态;softmax层采用softmax函数对所述隐藏状态进行激活,得到可重入漏洞检测结果;
[0024] 其中,所述隐藏层还包括前向隐藏层和后向隐藏层;将所述智能合约片段向量沿前向隐藏层传播方向输入双向循环神经网络,得到前向隐藏状态;将所述智能合约片段向量沿后向隐藏层传播方向输入双向循环神经网络,得到后向隐藏状态;将前向隐藏状态和后向隐藏状态连接起来,获得需要送入输出层的隐藏状态Ht;具体表达式如下所示:
[0025] Ht前=φ(xtW(front)xh+Ht‑1前W(front)hh+b(front)h)
[0026] Ht后=φ(xtW(back)xh+Ht+1后W(back)hh+b(back)h)
[0027] Ht=[Ht前,Ht后]
[0028] 其中,Ht前∈Rn×h表示前向隐藏状态,Ht后∈Rn×h表示后向隐藏状态,xt∈Rn×d表示输入的智能合约片段向量,n表示智能合约的样本数,d表示每个智能合约样本中的智能合约(f) d×h (f) h×h片段向量的输入数,h为隐藏层中隐藏单元的数目,权重矩阵W xh∈R 和W hh∈R 分别(back) d×h (back) h×h
为前向隐藏层的权重矩阵,W xh∈R 和W hh∈R 分别为后向隐藏层的权重矩阵,偏(f) 1×h (b) 1×h
置b h∈R 为前向隐藏状态的偏置,b h∈R 为后向隐藏状态的偏置;
[0029] 将隐藏状态Ht输入输出层,采用softmax函数对所述隐藏状态进行激活,得到智能*合约片段向量的标签y作为可重入漏洞检测结果,其表达式如下所示:
[0030]
[0031]
[0032] 其中,whq为输出层的权重矩阵,bq为输出层的偏置,h表示双向循环神经网络中隐藏单元的数量,q表示输出单元的数量。
[0033] 作为优选方案,S3中,还包括训练所述可重入漏洞检测序列模型,具体步骤包括:将智能合约片段向量输入可重入漏洞检测序列模型,根据可重入漏洞检测序列模型的输出结果,利用Focal Loss损失函数自适应平衡正样本和负样本的损失,并利用反向传播算法进行梯度更新,更新可重入漏洞检测序列模型的参数;所述正样本为正常智能合约源代码,所述负样本为智能合约可重入漏洞。
[0034] 第二个方面,本发明还提出一种基于序列模型的智能合约可重入漏洞检测系统,应用于上述任一方案所述的基于序列模型的智能合约可重入漏洞检测方法中,包括:
[0035] 数据获取模块,用于获取智能合约源代码。
[0036] 向量转换模块,用于将所述智能合约源代码转换为向量形式,得到智能合约片段向量。
[0037] 基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;将所述智能合约片段向量输入训练好的可重入漏洞检测序列模型进行重入检测,可重入漏洞检测序列模型输出可重入漏洞检测结果。
[0038] 与现有技术相比,本发明技术方案的有益效果是:使用双向循环神经网络对对智能合约信息进行检测并利用多注意力机制对重要特征进行捕捉,赋予权重,使得可重入漏洞检测序列模型具有更强的鲁棒性,提高了智能合约可重入漏洞的检测准确率。

附图说明

[0039] 图1为基于序列模型的智能合约可重入漏洞检测方法的流程图。
[0040] 图2为基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型的原理图。
[0041] 图3为基于序列模型的智能合约可重入漏洞检测系统的架构图。

具体实施方式

[0042] 附图仅用于示例性说明,不能理解为对本专利的限制;
[0043] 下面结合附图和实施例对本发明的技术方案做进一步的说明。
[0044] 实施例1
[0045] 请参阅图1,本发明提出一种基于序列模型的智能合约可重入漏洞检测方法,包括以下步骤:
[0046] S1:获取智能合约源代码。
[0047] S2:将所述智能合约源代码转换为向量形式,得到智能合约片段向量。
[0048] S3:构建基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型。
[0049] S4:将所述智能合约片段向量输入可重入漏洞检测序列模型,通过多注意力机制对重要特征进行捕捉以及双向循环神经网络对智能合约信息进行检测,得到可重入漏洞检测结果。
[0050] 在具体实施过程中,从Etherscan爬取智能合约源代码,并根据重入检测的要求,对所有智能合约源代码进行审查。然后将智能合约源代码转换为对重入检测具有语义意义的智能合约片段向量,将所述智能合约片段向量作为可重入漏洞检测序列模型的输入。所述可重入漏洞检测序列模型利用双向循环神经网络和注意力机制,对输入的智能合约片段向量进行处理,输出每个目标智能合约的检测结果,判断每个目标智能合约是可重入(“1”)还是不可重入(“0”)的。
[0051] 使用双向循环神经网络对对智能合约信息进行检测并利用多注意力机制对重要特征进行捕捉,赋予权重,使得可重入漏洞检测序列模型具有更强的鲁棒性,提高了智能合约可重入漏洞的检测准确率。
[0052] 实施例2
[0053] 本实施例提出一种基于序列模型的智能合约可重入漏洞检测方法,包括以下步骤:
[0054] S1:获取智能合约源代码。
[0055] 本实施例中,从Etherscan爬取智能合约源代码,并以70%的智能合约源代码数据构建训练集,以30%的智能合约源代码数据构建测试集。根据重入检测的要求,对所有智能合约源代码进行审查。
[0056] S2:将所述智能合约源代码转换为向量形式,得到智能合约片段向量,包括:
[0057] S2.1:对智能合约源代码进行数据清理。
[0058] 本实施例中,所述对智能合约源代码进行数据清理包括删除智能合约源代码中的空行、非ASCII字符和不相关的注释,将智能合约浓缩成一个高度表达的合约片段,以促进更精确的特征提取。
[0059] S2.2:将与可重入漏洞无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码。
[0060] 本实施例中,使用call.value核心节点和withdraw函数区分智能合约是可能导致可重入的原因,为了减少无关代码对可重入漏洞的检测的影响,提高检测效率,需要将经过数据清理,并且与call.value核心节点和withdraw函数无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码,并使用所述简化代码生成可以与数据集中智能合约源代码进行比较的代码片段,来标识智能合约代码片段的特征,具体包括以下步骤:
[0061] S2.2.1:统一智能合约源代码字母的大小写。
[0062] 使大小写统一是生成简化源代码的手段之一,因为智能合约源代码中有存在大小写不一致的情况,有些智能合约源代码需要大写,比如关键字。
[0063] S2.2.2:利用标识符来替换智能合约源代码中的字符和/或关键字,得到简化代码。
[0064] 本实施例中,利用与移行(line feed)操作或换行(new feed)操作相对应的标识符chr(10)替换智能合约源代码中的字符和/或关键字(行分隔符)。简化代码具有比预定义阈值更少的字符的行,在每行中包含最少量的代码。通过在简化代码上生成固定长度的标识符来执行标识。
[0065] 本实施例中,还可以通过生成产生匹配的连续行标识符的最小集合,用来比较标识符和数据集中智能合约源代码。
[0066] S2.3:将简化代码中的智能合约片段划分为若干令牌序列。
[0067] 本实施例中,通过词法分析工具和自定义符号语义规则库将简化代码中的智能约片段划分为一系列令牌序列。其中,一个智能约片段代码令牌序列状态包含来自它之前的其他代码令牌的信息,这些信息捕获了语义和控制流依赖关系的信息。然后将训练集中的重入漏洞进行打标处理,以便让序列模型进行端到端学习,提炼深层高语义的特征。
[0068] S2.4:对所述令牌序列进行矢量化,得到智能合约片段向量。
[0069] 本实施例中,使用doc2vec对所述令牌序列进行矢量化,将智能合约片段嵌入到不同维度的向量中,得到智能合约片段向量。doc2vec是word2vec的升级,doc2vec不仅能提取序列文本的语义信息,还提取了序列文本的语序信息。
[0070] 本实施例中,由于智能合约片段可能具有不同数量的令牌序列,对所述令牌序列进行矢量化,得到的智能合约片段向量可能具有不同的长度,为了保留语义和控制流依赖关系的信息,需要制定相应规则:若智能合约片段向量的长度小于固定长度,则在智能合约片段向量首部添加关联节点控制信息;若智能合约片段向量的长度大于固定长度,则截取出大于固定长度的部分长度,并将截取的部分长度进行转移;所述固定长度为已知的一维智能合约片段向量长度的最大值。关联节点控制信息可自行编写标记,在智能合约片段向量首部添加关联节点控制信息的目的是为了整合向量的长度和突显此向量是经过填充处理的,该不放控制信息与漏洞信息无关。
[0071] S3:构建基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型。
[0072] S4:将所述智能合约片段向量输入可重入漏洞检测序列模型,通过多注意力机制对重要特征进行捕捉以及双向循环神经网络对智能合约信息进行检测,得到可重入漏洞检测结果。
[0073] 本实施例中,所述双向循环神经网络包括依次连接的输入层、隐藏层和输出层;所述隐藏层包括注意力层;所述输出层包括softmax层;将智能合约片段向量输入双向循环神经网络,智能合约片段向量依次经过的输入层和隐藏层进行特征提取和重要特征捕捉,得到包括智能合约特征信息的隐藏状态;softmax层采用softmax函数对所述隐藏状态进行激活,得到可重入漏洞检测结果。
[0074] 如图2所示,图2为可重入漏洞检测序列模型的原理图。本实施例中,采用的双向循环神经网络(B‑RNNs)背后的想法是利用序列的顺序信息。在数学上,简单的B‑RNNs的制定n×d如下:对于任意时间步t,给定一个小批量的输入智能合约片段向量xt∈R ,并且令隐藏层激活函数为φ,在双向循环神经网络的双向架构中,所述隐藏层还包括前向隐藏层和后向隐藏层;将所述智能合约片段向量沿前向隐藏层传播方向输入双向循环神经网络,得到前向隐藏状态;将所述智能合约片段向量沿后向隐藏层传播方向输入双向循环神经网络,得n×h n×h
到后向隐藏状态。设时间步t的前向隐藏状态和后向隐藏状态分别为Ht前∈R 和Ht后∈R ,Ht前和Ht后的更新表达式如下所示:
[0075] Ht前=φ(xtW(front)xh+Ht‑1前W(front)hh+b(front)h)
[0076] Ht后=φ(xtW(back)xh+Ht+1后W(back)hh+b(back)h)
[0077] 其中,n表示智能合约的样本数,d表示每个智能合约样本中的智能合约片段向量(f) d×h (f) h×h的输入数,h为隐藏层中隐藏单元的数目,权重矩阵W xh∈R 和W hh∈R 分别为前向隐(back) d×h (back) h×h (f)
藏层的权重矩阵,W xh∈R 和W hh∈R 分别为后向隐藏层的权重矩阵,偏置b h∈
1×h (b) 1×h
R 为前向隐藏状态的偏置,b h∈R 为后向隐藏状态的偏置。W下标值代表不同权重矩阵的传递路径。
[0078] 将前向隐藏状态Ht前和后向隐藏状态Ht后连接起来,获得需要送入输出层的隐藏状n×2h态Ht∈R ,其表达式如下所示:
[0079] Ht=[Ht前,Ht后]
[0080] 最后,将隐藏状态Ht输入输出层,使用softmax函数对隐藏状态Ht进行激活,得到智*能合约片段向量的标签y(取值为0或1),其表达式如下所示:
[0081]
[0082]
[0083] 其中,whq为输出层的权重矩阵,bq为输出层的偏置,h表示双向循环神经网络中隐藏单元的数量,q表示输出单元的数量。
[0084] 双向循环神经网络中两个方向可以拥有不同数量的隐藏单元,这有助于单元记住任意时间量的值并控制信息流。
[0085] 本实施例中,对于智能合约代码中的重要单词,例如call.value,使用注意力机制对其赋予权重矩阵,其表达式如下所示可以形式化为:
[0086] ut=tanh(WhHt+bh)
[0087]
[0088] 其中,tanh(·)为双曲正切函数,表示矩阵乘法和元素乘积,ut为经过tanh函数处理得到的新的候选值向量,Wh表示隐藏层的权重矩阵,bh表示隐藏层的偏置,αt表示注意力机制的归一化权重矩阵,exp(·)表示以自然常数e为底的指数函数,T表示向量的转置。
[0089] 通过多注意力机制实现了对重要特征(即代码中的重要单词)的捕捉,使得检测模型具有更强的鲁棒性。
[0090] 本实施例中,利用训练集中的数据训练可重入漏洞检测序列模型,具体步骤包括:将训练集中的数据转换成智能合约片段向量,将智能合约片段向量输入可重入漏洞检测序列模型,根据可重入漏洞检测序列模型的输出结果,利用Focal Loss损失函数自适应平衡正负样本的损失,并利用反向传播算法进行梯度更新,更新可重入漏洞检测序列模型的参数。所述正样本为正常智能合约源代码,所述负样本为智能合约可重入漏洞。利用Focal Loss损失函数能够解决目标检测中正负样本极不平衡和难分类样本学习的问题。
[0091] 本实施例中,将测试集中的智能合约源代码转换为智能合约片段向量并将所述向量馈送到训练好的可重入漏洞检测序列模型中,可重入漏洞检测序列模型输出每个目标智能合约的检测结果,判断每个目标智能合约是可重入(“1”)还是不可重入(“0”)的。
[0092] 本发明填补了当前基于代码序列特征和深度学习融合手段用于智能合约安全漏洞检测方法的空缺,具有良好的实用价值和借鉴意义。并且使用注意力机制赋予权重分配形式化,以及使用无关重入合约源码转换技术将大部分于可重入漏洞无关的合约源代码转换成数字标识符以减少无关代码对重入漏洞检测影响,实现了更准确的检测效果。
[0093] 另外,双向循环神经网络能够使用来自序列两端的信息来估计输出,即使用来自过去和未来的观测信息来检测当前的观测。添加了反向传递信息的隐藏层能够轻松学习长短期依赖,在智能合约代码建模方面更加有效,实现更多的漏洞检测率。
[0094] 实施例3
[0095] 请参阅图3,本实施例提出一种基于序列模型的智能合约可重入漏洞检测系统,包括数据获取模块、向量转换模块和基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型。
[0096] 数据获取模块获取智能合约源代码。
[0097] 向量转换模块首先对智能合约源代码进行数据清理,包括删除智能合约源代码中的空行、非ASCII字符和不相关的注释。然后将与可重入漏洞无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码;将简化代码中的智能合约片段划分为若干令牌序列。最后对所述令牌序列进行矢量化,得到智能合约片段向量。
[0098] 将智能合约片段向量并将所述向量馈送到训练好的可重入漏洞检测序列模型中,可重入漏洞检测序列模型输出每个目标智能合约的检测结果,判断每个目标智能合约是可重入(“1”)还是不可重入(“0”)的。
[0099] 附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
[0100] 显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。