一种智能合约安全漏洞检测方法、装置、终端及存储介质与流程

文档序号:16249922发布日期:2018-12-11 23:55阅读:164来源:国知局
一种智能合约安全漏洞检测方法、装置、终端及存储介质与流程

本发明涉及计算机安全技术领域,尤其涉及一种智能合约安全漏洞检测方法、装置、终端及存储介质。

背景技术

区块链技术,又称为分布式账本技术,是一种去中心信任化、集体维护分布式账本的技术方案,其实质是由多个节点集体参与通过多方存储、多方计算的方式来实现数据不可篡改、计算结果可信的分布式数据系统。区块链并不是一种单一的技术,而是多种技术融合的结果,利用区块链技术维护一个可靠的、难以篡改的账本记录,可以降低信任的风险,并能有效的降低众参与方协作的维护成本。区块链技术的不断发展与完善,使得智能合约成为可能。智能合约,其实质是一段由一台计算机或计算机网络按照签署合约的权利和义务自动执行的代码。由于智能合约与区块链相结合,使得合约的条款一旦设定,就没有第三方可以篡改。

近年来,随着区块链技术和智能合约的迅速发展,使得其在多个领域均有其广泛的推广应用。然而,在实际推广应用中可以发现,智能合约的安全问题成为关注的焦点。当智能合约存在安全漏洞时,容易受到黑客的攻击,如最大的thedao事件。具体来说,该事件是指黑客利用智能合约存在的安全漏洞从以太池中拿走1.5亿美金,究其原因是由于智能合约代码的安全漏洞造成的损失。那么,在这种情况下,如何检测智能合约中存在的安全漏洞是亟需解决的技术问题。



技术实现要素:

本发明实施例提供一种智能合约安全漏洞检测方法、装置、终端及存储介质,可以检测智能合约中存在的安全漏洞,同时可以提高检测安全漏洞的检测精度。

第一方面,本发明实施例提供了一种智能合约安全漏洞方法,该方法包括:

步骤s101、根据字节码文件构建灰度图矩阵;其中,所述字节码文件包括s行代码,所述s行代码中的第i行代码包括函数名称di对应的字节码和函数变量vi对应的字节码;所述灰度图矩阵的行数为s,所述灰度图矩阵s行中的第i行包括第一参数ai和第二参数bi;所述第一参数ai的长度为m,所述m为8的整数倍,所述第二参数bi的长度为所述n为所述字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值;所述第一参数ai包括所述函数名称di对应的字节码,所述第二参数bi包括所述函数变量vi对应的字节码;所述i为大于等于1且小于等于s的正整数;

步骤s102、将所述灰度图矩阵变换为灰度图;

步骤s103、提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述字节码文件中是否存在安全漏洞。

通过本发明实施例,可以检测智能合约中存在的安全漏洞。与此同时,终端按照字节码文件中的代码顺序来构建灰度图矩阵,使得灰度图矩阵的每一行依次与字节码文件中的每一行一一对应。然后,终端基于灰度图矩阵的各行依次确定灰度图中的像素点,保证了终端确定的灰度图的像素点是基于字节码文件中各行独立的代码,避免了终端基于相邻的不同行代码确定灰度图的像素点,从而实现了终端确定的灰度图中的像素点与字节码文件中的代码相一致,避免了顺序出错的问题,从而提高了终端确定灰度图中的像素点的准确度,进而可以提高终端检测安全漏洞的精度。

可选的,所述根据字节码文件构建灰度图矩阵之前,还包括:

将智能合约进行编码,生成所述字节码文件;其中,所述智能合约包括s行代码,所述s行代码中的第i行代码包括函数名称di和函数变量vi。

可选的,所述将所述灰度图矩阵变换为灰度图包括:

将所述灰度图矩阵s行中的第i行按照的方式进行划分,得到个像素点单元;

将所述个像素点单元进行进制转换得到个像素点;

根据所述个像素点生成所述灰度图中的第i行,所述i的取值从1到s,其中,所述q用于表征所述灰度图矩阵中每一行的长度,所述

可选的,所述提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述智能合约中是否存在安全漏洞包括:

利用灰度共生矩阵glcm提取所述灰度图的6维特征,并将所述6维特征输入所述预设的安全漏洞识别模型,以检测所述字节码文件中是否存在所述安全漏洞;其中,所述灰度共生矩阵用于表征所述灰度图中灰度的空间特性。

通过本发明实施例,可以利用灰度共生矩阵提取灰度图的特征,并将提取到的特征输入预设的安全漏洞识别模型,从而可以确定是否存在安全漏洞,同时可以提高检测安全漏洞的检测精度。

可选的,所述m为16。

第二方面,本发明实施例提供了一种终端,该终端具有实现上述第一方面中终端行为的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块。

在一种可能的实现方式中,该终端的结构中包括处理器和存储器,存储器用于存储支持该终端执行上述方法的程序,处理器被配置为用于执行存储器中存储的程序。该终端还可以包括通信接口,用于该终端与其他设备或通信网络通信。

第三方面,本发明实施例提供了一种智能合约安全漏洞检测装置,包括:

构建单元,用于根据字节码文件构建灰度图矩阵;其中,所述字节码文件包括s行代码,所述s行代码中的第i行代码包括函数名称di对应的字节码和函数变量vi对应的字节码;所述灰度图矩阵的行数为s,所述灰度图矩阵s行中的第i行包括第一参数ai和第二参数bi;所述第一参数ai的长度为m,所述m为8的整数倍,所述第二参数bi的长度为所述n为所述字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值;所述第一参数ai包括所述函数名称di对应的字节码,所述第二参数bi包括所述函数变量vi对应的字节码;所述i为大于等于1且小于等于s的正整数;

变换单元,用于将所述灰度图矩阵变换为灰度图;

处理单元,用于提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述字节码文件中是否存在安全漏洞。

可选的,所述智能合约安全漏洞检测装置还包括:

编码单元,用于在所述构建单元根据字节码文件构建灰度图矩阵之前,将智能合约进行编码,生成所述字节码文件;其中,所述智能合约包括s行代码,所述s行代码中的第i行代码包括函数名称di和函数变量vi。

可选的,所述变换单元包括:

划分单元,用于将所述灰度图矩阵s行中的第i行按照的方式进行划分,得到个像素点单元;

进制转换单元,用于将所述个像素点单元进行进制转换得到个像素;

生成单元,用于根据所述个像素点生成所述灰度图中的第i行,所述i的取值从1到s,其中,所述q用于表征所述灰度图矩阵中每一行的长度,所述

可选的,所述处理单元具体用于利用灰度共生矩阵glcm提取所述灰度图的6维特征,并将所述6维特征输入所述预设的安全漏洞识别模型,以检测所述字节码文件中是否存在所述安全漏洞;其中,所述灰度共生矩阵用于表征所述灰度图中灰度的空间特性。

可选的,所述m为16。

第四方面,本发明实施例提供了一种计算机可读存储介质,用于储存为上述终端所用的计算机软件指令,其包含用于执行上述第一方面为终端所设计的程序。

第五方面,本发明实施例提供了一种计算机程序,所述计算机程序包括上述终端所用的程序指令,所述程序指令当被终端的处理器执行时使所述处理器执行上述第一方面为终端所设计的程序。

通过实施本发明实施例,基于字节码的灰度图形的模型检测方法可以更加全面地发现各种变形的漏洞,检测结果更加全面。与此同时,终端按照字节码文件中的代码顺序构建灰度图矩阵,使得灰度图矩阵的每一行依次与字节码文件中的每一行一一对应。然后,终端基于灰度图矩阵的各行依次确定灰度图中的像素点,保证了终端确定的灰度图的像素点是基于字节码文件中各行独立的代码,避免了终端基于相邻的不同行代码确定灰度图的像素点,从而实现了终端确定的灰度图中的像素点与字节码文件中的代码相一致,避免了顺序出错的问题,从而提高了终端确定灰度图中的像素点的准确度,进而可以提高终端检测安全漏洞的精度。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。

图1是本发明实施例提供的一种智能合约安全漏洞检测方法的流程示意图;

图2是本发明另一实施例提供的一种智能合约安全漏洞检测方法的流程示意图;

图3是本发明实施例提供的一种智能合约安全漏洞检测装置的结构示意图;

图4是本发明实施例提供的另一种智能合约安全漏洞检测装置的结构示意图;

图5是本发明实施例提供的另一种智能合约安全漏洞检测装置的结构示意图;

图6是本发明实施例提供的一种终端的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

下面结合图1所示的本发明实施例提供的智能合约安全漏洞检测方法的流程示意图,具体说明本发明实施例如何检测智能合约中存在的安全漏洞,该方法包括但不限于如下步骤s101-s103:

s101、根据字节码文件构建灰度图矩阵。

其中,所述字节码文件包括s行代码,所述s行代码中的第i行代码包括函数名称di对应的字节码和函数变量vi对应的字节码;所述灰度图矩阵的行数为s,所述灰度图矩阵s行中的第i行包括第一参数ai和第二参数bi;所述第一参数ai的长度为m,所述m为8的整数倍,所述第二参数bi的长度为所述n为所述字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值;所述第一参数ai包括所述函数名称di对应的字节码,所述第二参数bi包括所述函数变量vi对应的字节码;所述i为大于等于1且小于等于s的正整数。

在一种可能的实现方式中,这里所涉及的字节码文件是一种包含执行程序、由一序列操作代码(op,operationcode)/数据对组成的二进制文件。需要说明的是,这里所涉及的字节码文件为终端将智能合约进行编码得到的。智能合约中的每一行代码包括各自对应的函数名称和函数变量。其中,每个函数名称经过编码后所对应的字节码的长度是固定的,每个函数变量经过编码后所对应的字节码的长度也是固定的。例如,函数名称push1经过编码后对应的字节码的长度为16位,函数变量0x60经过编码后对应的字节码的长度为16位。继而,终端可以明确区分字节码文件s行代码中的第i行代码中函数名称di对应的字节码以及函数变量vi对应的字节码。

例如,字节码文件包括100行代码,以这100行代码中的第1行代码和第2行代码为例,第1行代码包括函数名称d1对应的字码节和函数变量v1对应的字码节,第2行代码包括函数名称d2对应的字节码和函数变量v2对应的字节码。

例如,上述所提及的字节码文件中的第1行代码及第2行代码可以包括但不限于如代码1表现形式:

代码1

其中,在第1行代码00000110000000000000011000000000中,函数名称d1对应的字节码为0000011000000000,函数变量v1对应的字节码为0000011000000000;在第2行代码00000110000000000000010000000000中,函数名称d2对应的字节码为0000011000000000,函数变量v2对应的字节码为0010000000000000。

继而,终端可以根据上述字节码文件构建灰度图矩阵。接下来将具体阐述终端是如何根据字节码文件构建灰度图矩阵的。

首先,终端确定字节码文件中代码的行数,该字节码文件中代码的行数用于确定灰度图矩阵的行数。例如,终端确定字节码文件中包括100行代码,那么,可以理解的是,终端确定灰度图矩阵的行数为100。

其次,终端确定s行灰度图矩阵中的第i行矩阵中的第一参数ai的长度为m,其中,m为8的整数倍。终端确定s行灰度图矩阵中的第i行矩阵中的第二参数bi的长度为其中,n为字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值,由此可以确定上述灰度图矩阵中每一行的长度例如,m为16,最大值n为16。那么,灰度图矩阵的每一行的长度为32。从而可以知道的是,该灰度图矩阵为100行32列的矩阵。需要说明的是,上述描述中所涉及的为向上取整运算。例如,又例如,

作为一种可选的实现方式,上述m可以为16。终端确定s行灰度图矩阵中的第i行矩阵中的第一参数ai的长度为16的原因在于:现有的智能合约函数名称数据库中函数名称的数量为300多个。那么,可以理解的是,用9位二进制代码即可表示所有的函数名称。然而,终端在确定灰度图的过程中,灰度图矩阵s行中第i行中的每8位确定灰度图中的一个像素点,故而,终端确定s行灰度图矩阵中的第i行矩阵中的第一参数ai的长度为16。

作为一种可选的实现方式,终端确定字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值可以包括:终端确定字节码文件s行代码中的第1行代码到第s行代码中每一行代码的函数变量各自对应的字节码长度,终端从确定好的上述每一行代码的函数变量各自对应的字节码长度中确定其中的最大值n。继而,终端可以确定灰度图矩阵s行中第i行第二参数bi的长度其中,i为大于等于1且小于等于s的正整数。

之后,终端向上述确定好行与列的灰度图矩阵中填入数据。具体地,灰度图矩阵s行中的第i行第一参数ai包括函数名称di对应的字节码,第二参数bi包括函数变量vi对应的字节码,从而可以得到灰度图矩阵。

如前所述,灰度图矩阵s行中的第i行第一参数ai包括函数名称di对应的字节码。在一种可能的实现方式中,若字节码文件s行中的第i行代码中的函数名称di对应的字节码长度与终端确定的灰度图矩阵s行中第i行第一参数ai的长度相同,此时,终端将字节码文件s行中的第i行代码中的函数名称di对应的字节码填入到灰度图矩阵s行中第i行第一参数ai所在位置。例如,字节码文件s行中的第i行代码中的函数名称di对应的字节码长度为16,终端确定的灰度图矩阵s行中第i行第一参数ai的长度为16。那么,终端在灰度图矩阵s行中第i行的第1位到第16位中填入字节码文件s行中的第i行代码中的函数名称di对应的字节码。

在另一种可能的实现方式中,若字节码文件s行中的第i行代码中的函数名称di对应的字节码长度与终端确定的灰度图矩阵s行中第i行第一参数ai的长度不相同,例如,字节码文件s行中的第i行代码中的函数名称di对应的字节码长度为10,终端确定的灰度图矩阵s行中第i行第一参数ai的长度为16。那么,终端在灰度图矩阵s行中第i行的第1位到第10位中填入字节码文件s行中的第i行代码中的函数名称di对应的字节码,在第11位到第16位填充预设数值,例如,该预设数值可以为0或1。与此同时,终端为填充的每个预设数值设置一个非运算标签,该非运算标签用于表示该标签对应的数值不参与运算。此外,终端存储上述非运算标签的信息。例如,这里所涉及的运算可以包括将像素点单元进行进制转换,得到像素点等等。作为一种可选的实现方式,终端也可以在真实数值和填充数值之间设置一个非运算指示符,在该非运算指示符之前的数值为真实数值,在非运算指示符之后的数值为填充数值,且填充数值不参与任意运算,终端存储上述非运算指示符的信息。

如前所述,灰度图矩阵s行中的第二参数bi包括函数变量vi对应的字节码。在一种可能的实现方式中,若字节码文件s行中第i行代码中的函数变量vi的长度与终端确定的灰度图矩阵s行中第i行第二参数bi的长度相同,此时,终端将字节码文件终端将字节码文件s行中的第i行代码中的函数名称di对应的字节码填入到灰度图矩阵s行中第i行第一参数ai所在位置。例如,字节码文件s行中的第i行代码中的函数变量vi对应的字节码长度为16,终端确定的灰度图矩阵s行中第i行第二参数bi的长度为16。那么,终端在灰度图矩阵s行中第i行的第(1+t)位到第(16+t)位中填入字节码文件s行中的第i行代码中的函数变量vi对应的字节码。这里的t为灰度图矩阵s行中第i行第一参数ai的长度。

在另一种可能的实现方式中,若字节码文件s行中第i行代码中的函数变量vi的长度与终端确定的灰度图矩阵s行中第i行第二参数bi的长度不相同,例如,字节码文件s行中的第i行代码中的函数变量vi对应的字节码长度为10,终端确定的灰度图矩阵s行中第i行第二参数bi的长度为16。那么,终端在灰度图矩阵s行中第i行的第(1+t)位到第(10+t)位中填入字节码文件s行中的第i行代码中的函数变量vi对应的字节码,在第(11+t)位到第(16+t)位填充预设数值,例如,该预设数值可以为0或1。这里的t为灰度图矩阵s行中第i行第一参数ai的长度。与此同时,终端为填充的每个预设数值设置一个非运算标签,该非运算标签用于表示该标签对应的数值不参与运算。此外,终端存储上述非运算标签的信息。例如,这里所涉及的运算可以包括将像素点单元进行进制转换得到像素点的这一计算过程。作为一种可选的实现方式,终端也可以在真实数值和填充数值之间设置一个非运算指示符,在该非运算指示符之前的数值为真实数值,在非运算指示符之后的数值为填充数值,且填充数值不参与任意运算,终端存储上述非运算指示符的信息。

例如,字节码文件包括2行代码,该2行代码可以如代码2所示:

代码2

由上述代码2可以知道,字节码文件第1行代码中的函数名称d1对应的字节码的长度为16,字节码文件第1行代码中的函数变量v1对应的字节码的长度为16;字节码文件第2行代码中的函数名称d2对应的字节码长度为16,字节码文件第2行代码的函数变量v2对应的字节码长度为16。那么,终端可以确定m为16,最大值n为16,即终端确定灰度图矩阵为2行32列的矩阵。那么,在这种情况下,灰度图矩阵可以表示为矩阵1所示:

矩阵1

又例如,字节码文件包括2行代码,该2行代码如代码3所示:

代码3

由上述代码3可以知道,字节码文件第1行代码中的函数名称d1对应的字节码的长度为16,字节码文件第1行代码中的函数变量v1对应的字节码的长度为16;字节码文件第2行代码中的函数名称d2对应的字节码长度为16,字节码文件第2行代码的函数变量v2对应的字节码长度为18。那么,终端可以确定m为16,最大值n为18,即终端确定灰度图矩阵为2行40列的矩阵。那么,在这种情况下,灰度图矩阵可以表示为矩阵2所示:

矩阵2

在上述矩阵2中,第1行第33位到第40位中的“0”为填充数值。第2行第35位到第40位中的“0”为填充数值。上述填充数值中的每个数值均设置一个非运算标签。

又例如,字节码文件包括2行代码,该2行代码如代码4所示:

代码4

由上述代码4可以知道,字节码文件第1行代码中的函数名称d1对应的字节码的长度为10,字节码文件第1行代码中的函数变量v1对应的字节码的长度为16;字节码文件第2行代码中的函数名称d2对应的字节码长度为16,字节码文件第2行代码的函数变量v2对应的字节码长度为16。那么,终端可以确定m为16,最大值n为16,即终端确定灰度图矩阵为2行32列的矩阵。那么,在这种情况下,灰度图矩阵可以表示为矩阵3所示:

矩阵3

在上述矩阵3中,第1行第11位到第16位中的“0”为填充数值。上述填充数值中的每个数值均设置一个非运算标签。

又例如,字节码文件包括2行代码,该2行代码如代码5所示:

代码5

由上述代码5可以知道,字节码文件第1行代码中的函数名称d1对应的字节码的长度为10,字节码文件第1行代码中的函数变量v1对应的字节码的长度为16;字节码文件第2行代码中的函数名称d2对应的字节码长度为16,字节码文件第2行代码的函数变量v2对应的字节码长度为18。那么,终端可以确定m为16,最大值n为18,即终端确定灰度图矩阵为2行40列的矩阵。那么,在这种情况下,灰度图矩阵可以表示为矩阵4所示:

矩阵4

在上述矩阵4中,第1行第11位到第16位以及第33位到第40位中的“0”为填充数值。第2行第35位到第40位中的“0”为填充数值。上述填充数值中的每个数值均设置一个非运算标签。

上述终端根据字节码文件构建灰度图矩阵的过程,可以便于终端更好的提取到灰度图的特征,从而可以提高终端检测智能合约中的安全漏洞的检测精度,可以避免将正常代码判定为恶意代码的情形,即错误的认为正常代码中包含安全漏洞。

s102、将所述灰度图矩阵变换为灰度图。

具体实现中,灰度图是指用灰度表示的图像。这里所涉及的灰度可以分为256阶。把白色与黑色之间按对数关系分为若干等级,称为灰度。

在一种可能的实现方式中,将上述灰度图矩阵变换为灰度图可以包括:

将灰度图矩阵s行中的第i行按照的方式进行划分,得到个像素点单元;

个像素点单元进行进制转换得到个像素点;

根据个像素点生成灰度图中的第i行,所述i的取值从1到s,其中,q用于表征灰度图矩阵中每一行的长度,

具体实现中,这里所涉及的进制转换是指将二进制数转换为十进制数。进制转换后得到的十进制数为0-255之间的任意正整数。

例如,如前所述,灰度图矩阵1可以表示为如下所示:

现以灰度图矩阵1中的第1行为例进行阐述,首先,终端将第1行划分为4个像素点单元;其中,第1个像素点单元可以表示为00000110,第2个像素点单元可以表示为00000000,第3个像素点单元可以表示为00000110,第4个像素点单元可以表示为00000000。终端在对上述4个像素点单元进行进制转换得到像素点时,终端检测上述4个像素点单元中的数值是否存在非运算标签,以确定像素点单元的数值是否参与运算。终端将上述4个像素点单元进行进制转换得到的4个像素点可以表示为6060。灰度图矩阵1中的第2行可以参考第1行的具体实现,此处不多加赘述,第2行中的4个像素点可以表示为6040。那么,终端将灰度图矩阵进行上述变换之后可以得到一个2*4的灰度图。

又例如,如前所述,灰度图矩阵3可以表示为如下所示:

现以灰度图矩阵3中的第1行为例进行阐述,在上述矩阵3中,第1行第11位到第16位中的“0”为填充数值。终端将第1行划分为4个像素点单元;其中,第1个像素点单元可以表示为00000110,第2个像素点单元可以表示为00000000,第3个像素点单元可以表示为00000110,第4个像素点单元可以表示为00000000。终端在对上述4个像素点单元进行进制转换得到像素点时,终端检测上述4个像素点单元中的数值是否存在非运算标签,以确定像素点单元的数值是否参与运算。以第2个像素点单元为例,终端判断第2个像素点单元中的000000均设置了一个非运算符,那么,000000不参与进制转换运算。终端将上述4个像素点单元进行进制转换得到的4个像素点可以表示为6060。灰度图矩阵3中的第2行可以参考第1行的具体实现,此处不多加赘述,第2行中的4个像素点可以表示为6040。那么,终端将灰度图矩阵进行上述变换之后可以得到一个2*4的灰度图。

作为一种可选的实现方式,上述灰度图中的像素点数值的大小为0到255之间的任意正整数。例如,0代表黑色,255代表白色。

s103、提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述字节码文件中是否存在安全漏洞。

作为一种可选的实现方式,这里所涉及的预设的安全漏洞识别模型为终端对历史数据(包括正常代码数据和恶意代码数据)进行深度学习得到的。需要说明的是,正常代码数据是指没有安全漏洞的字节码文件,恶意代码数据是指存在安全漏洞的字节码文件。

例如,终端提取2*4的灰度图的特征,并将该灰度图的特征输入预设的安全漏洞识别模型,安全漏洞识别模型可以检测字节码文件中是否存在安全漏洞。

在一种可能的实现方式中,若安全漏洞识别模型检测到该字节码文件中存在安全漏洞,终端在获知这一情况之后,终端可以将字节码文件中存在的安全漏洞的信息发送至预设的邮箱地址。作为一种可选的实现方式,这里所提及的预设邮箱地址可以是预先设置好的,例如,该邮箱地址可以为123@cc.com。具体的,该邮箱地址可以包括多个开发者共同使用的一个邮箱地址,也可以包括某一个具体的开发者使用的邮箱地址,本发明实施例不作具体限定。

在一种可能的实现方式中,提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述智能合约中是否存在安全漏洞可以包括:

利用灰度共生矩阵glcm提取所述灰度图的6维特征,并将所述6维特征输入所述预设的安全漏洞识别模型,以检测所述字节码文件中是否存在所述安全漏洞;其中,所述灰度共生矩阵用于表征所述灰度图中灰度的空间特性。

需要说明的是,这里所提及的利用灰度共生矩阵(graylevelco-occurrencematrix,glcm)提取灰度图的6维特征只是作为一种较佳的实施方式,在本申请中,终端提取灰度图的特征可以包括但不限于6维,例如,还可以为4维,等等,此处不多加赘述。

通过实施本发明实施例,基于字节码的灰度图形的模型检测方法可以更加全面地发现各种变形的漏洞,检测结果更加全面。同时,终端按照字节码文件中的代码顺序来构建灰度图矩阵,使得灰度图矩阵的每一行依次与字节码文件中的每一行一一对应。然后,终端基于灰度图矩阵的各行依次确定灰度图中的像素点,保证了终端确定的灰度图的像素点是基于字节码文件中各行独立的代码,避免了终端基于相邻的不同行代码确定灰度图的像素点,从而实现了终端确定的灰度图中的像素点与字节码文件中的代码相一致,避免了顺序出错的问题,从而提高了终端确定灰度图中的像素点的准确度,进而可以提高终端检测安全漏洞的精度。

可选的,终端在执行上述步骤s101之前,还可以执行步骤s104。具体地,下面结合图2所示的本发明另一实施例提供的智能合约安全漏洞检测方法的流程示意图,具体说明该实施例如何检测智能合约中存在的安全漏洞,以下对步骤s104进行详细阐述。

s104、将智能合约进行编码,生成所述字节码文件;其中,所述智能合约包括s行代码,所述s行代码中的第i行代码包括函数名称di和函数变量vi。

具体实现中,智能合约中的每一行代码均包括各自对应的函数名称和函数变量。例如,智能合约可以表示为如代码6所示:

代码6

在上述智能合约中,智能合约包括2行代码。在第1行代码push10x60中,第1行代码中的函数名称d1为push1;第1行代码中的函数变量v1为0x60。在第2行代码push10x40中,第2行代码中的函数名称d2为push1;第2行代码中的函数变量v2为0x40。需要说明的是,上述所涉及的智能合约只是一种示例,智能合约的表现形式还可以为其它形式,不应构成限定。

作为一种可选的实现方式,终端可以利用以太坊的编译工具solc将上述智能合约进行编码,以得到字节码文件。需要说明的是,在本申请中,字节码文件可以表征智能合约的特性。即,若安全漏洞识别模型检测到字节码文件中存在安全漏洞,则可以反映智能合约中存在安全漏洞。

通过实施本发明实施例,终端按照字节码文件中的代码顺序构建灰度图矩阵,使得灰度图矩阵的每一行依次与字节码文件中的每一行一一对应。然后,终端基于灰度图矩阵的各行依次确定灰度图中的像素点,保证了终端确定的灰度图的像素点是基于字节码文件中各行独立的代码,避免了终端基于相邻的不同行代码确定灰度图的像素点,从而实现了终端确定的灰度图中的像素点与字节码文件中的代码相一致,避免了顺序出错的问题,从而提高了终端确定灰度图中的像素点的准确度,进而可以提高终端检测安全漏洞的精度。

为了便于更好地实施本发明实施例的上述方案,本发明实施例还描述了与上述图1所述方法实施例属于同一发明构思下的一种智能合约安全漏洞检测装置的结构示意图。下面结合附图来进行详细说明:

如图3所示,该智能合约安全漏洞检测装置300用于执行图1智能合约安全漏洞检测方法,包括:构建单元301、变换单元302、处理单元303。

其中,所述构建单元301,用于根据字节码文件构建灰度图矩阵;其中,所述字节码文件包括s行代码,所述s行代码中的第i行代码包括函数名称di对应的字节码和函数变量vi对应的字节码;所述灰度图矩阵的行数为s,所述灰度图矩阵s行中的第i行包括第一参数ai和第二参数bi;所述第一参数ai的长度为m,所述m为8的整数倍,所述第二参数bi的长度为所述n为所述字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值;所述第一参数ai包括所述函数名称di对应的字节码,所述第二参数bi包括所述函数变量vi对应的字节码;所述i为大于等于1且小于等于s的正整数;

变换单元302,用于将所述灰度图矩阵变换为灰度图;

处理单元303,用于提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述字节码文件中是否存在安全漏洞。

进一步地,如图4所示,智能合约安全漏洞检测装置300除了包括:构建单元301、变换单元302和处理单元303外,还可以包括编码单元304,其中,

所述编码单元304,用于在所述构建单元301根据字节码文件构建灰度图矩阵之前,将智能合约进行编码,生成所述字节码文件;其中,所述智能合约包括s行代码,所述s行代码中的第i行代码包括函数名称di和函数变量vi。

更进一步地,如图5所示,智能合约安全漏洞检测装置300中的所述变换单元302可以包括划分单元3021、进制转换单元3022生成单元3023;

其中,所述划分单元3021,用于将所述灰度图矩阵s行中的第i行按照的方式进行划分,得到个像素点单元;

所述进制转换单元3022,用于将所述个像素点单元进行进制转换得到个像素;

所述生成单元3023,用于根据所述个像素点生成所述灰度图中的第i行,所述i的取值从1到s,其中,所述q用于表征所述灰度图矩阵中每一行的长度,所述

可选的,所述处理单元303具体用于利用灰度共生矩阵glcm提取所述灰度图的6维特征,并将所述6维特征输入所述预设的安全漏洞识别模型,以检测所述字节码文件中是否存在所述安全漏洞;其中,所述灰度共生矩阵用于表征所述灰度图中灰度的空间特性。

可选的,所述m为16。

通过实施本发明实施例,基于字节码的灰度图形的模型检测方法可以更加全面地发现各种变形的漏洞,检测结果更加全面。与此同时,终端按照字节码文件中的代码顺序构建灰度图矩阵,使得灰度图矩阵的每一行依次与字节码文件中的每一行一一对应。然后,终端基于灰度图矩阵的各行依次确定灰度图中的像素点,保证了终端确定的灰度图的像素点是基于字节码文件中各行独立的代码,避免了终端基于相邻的不同行代码确定灰度图的像素点,从而实现了终端确定的灰度图中的像素点与字节码文件中的代码相一致,避免了顺序出错的问题,从而提高了终端确定灰度图中的像素点的准确度,进而可以提高终端检测安全漏洞的精度。

为了便于更好地实施本发明实施例的上述方案,本发明还对应提供了一种智能合约安全漏洞检测的终端,下面结合附图来进行详细说明:

如图6示出的本发明实施例提供的一种用于检测智能合约中的安全漏洞的终端的结构示意图,该终端600可以包括至少一个处理器601,通信总线602,存储器603以及至少一个通信接口604。

处理器601可以是一个通用中央处理器(centralprocessingunit,cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制本发明方案程序执行的集成电路。

通信总线602可包括一通路,在上述组件之间传送信息。所述通信接口604,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radioaccesstechnology,ran),无线局域网(wirelesslocalareanetworks,wlan)等。

存储器603可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。

其中,所述存储器603用于存储执行本发明方案的程序代码,并由处理器601来控制执行。所述处理器601用于执行所述存储器603中存储的程序代码,执行以下步骤:

根据字节码文件构建灰度图矩阵;其中,所述字节码文件包括s行代码,所述s行代码中的第i行代码包括函数名称di对应的字节码和函数变量vi对应的字节码;所述灰度图矩阵的行数为s,所述灰度图矩阵s行中的第i行包括第一参数ai和第二参数bi;所述第一参数ai的长度为m,所述m为8的整数倍,所述第二参数bi的长度为所述n为所述字节码文件s行代码中每一行代码中的函数变量各自对应的字节码长度的最大值;所述第一参数ai包括所述函数名称di对应的字节码,所述第二参数bi包括所述函数变量vi对应的字节码;所述i为大于等于1且小于等于s的正整数;

将所述灰度图矩阵变换为灰度图;

提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述字节码文件中是否存在安全漏洞。

其中,处理器601根据字节码文件构建灰度图矩阵之前,还包括:

将智能合约进行编码,生成所述字节码文件;其中,所述智能合约包括s行代码,所述s行代码中的第i行代码包括函数名称di和函数变量vi。

其中,处理器601将所述灰度图矩阵变换为灰度图可以包括:

将所述灰度图矩阵s行中的第i行按照的方式进行划分,得到个像素点单元;

将所述个像素点单元进行进制转换得到个像素点;

根据所述个像素点生成所述灰度图中的第i行,所述i的取值从1到s,其中,所述q用于表征所述灰度图矩阵中每一行的长度,所述

其中,处理器601提取所述灰度图的特征,并将所述灰度图的特征输入预设的安全漏洞识别模型,以检测所述智能合约中是否存在安全漏洞可以包括:

利用灰度共生矩阵glcm提取所述灰度图的6维特征,并将所述6维特征输入所述预设的安全漏洞识别模型,以检测所述字节码文件中是否存在所述安全漏洞;其中,所述灰度共生矩阵用于表征所述灰度图中灰度的空间特性。

其中,所述m为16。

在具体实现中,作为一种可选的实施例,处理器601可以包括一个或多个cpu,例如图6中的cpu0和cpu1。

在具体实现中,作为一种可选的实施例,终端600可以包括多个处理器,例如图6中的处理器601和处理器608。这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

在具体实现中,作为一种可选的实施例,终端600还可以包括输出设备605和输入设备606。输出设备605和处理器601通信,可以以多种方式来显示信息。例如,输出设备605可以是液晶显示器(liquidcrystaldisplay,lcd),发光二级管(lightemittingdiode,led)显示设备,阴极射线管(cathoderaytube,crt)显示设备,或投影仪(projector)等。输入设备606和处理器601通信,可以以多种方式接受用户的输入。例如,输入设备606可以是鼠标、键盘、触摸屏设备或传感设备等。

在具体实现中,终端600可以是台式机、便携式电脑、网络服务器、掌上电脑(personaldigitalassistant,pda)、移动手机、平板电脑、无线终端设备、通信设备、嵌入式设备。本发明实施例不限定终端600的类型。

在本发明的另一实施例中提供一种计算机可读存储介质,用于存储为上述图1以及图2所示的终端所用的计算机软件指令,其包含用于执行上述方法实施例所涉及的程序。通过执行存储的程序,可以检测智能合约中存在的安全漏洞。

在具体实现中,所述计算机可读存储介质可以是前述任一实施例所述的终端的内部存储单元,例如终端的硬盘或内存。所述计算机可读存储介质也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述计算机可读存储介质还可以既包括所述终端的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1