一种智能合约漏洞挖掘方法及装置制造方法及图纸

技术编号:30974682 阅读:22 留言:0更新日期:2021-11-25 21:00
本申请示出一种智能合约漏洞挖掘方法及装置,其中,获取已通过编译的智能合约源代码;将所述已通过编译的智能合约源代码进行动态符号执行,得到动态符号执行结果;获取与所述动态符号执行结果匹配的智能合约漏洞;输出所述智能合约漏洞。本申请示出的技术方案,能够支持复杂的智能合约的漏洞挖掘,使挖掘出来的漏洞更加准确,误报率较低。误报率较低。误报率较低。

【技术实现步骤摘要】
一种智能合约漏洞挖掘方法及装置


[0001]本申请涉及区块链
,具体涉及一种智能合约漏洞挖掘方法及装置。

技术介绍

[0002]智能合约(smart contract)是一种以信息化方式传播、验证或执行合同的计算机协议,在区块链行业有着广泛的应用。然而,智能合约中可能存在漏洞,漏洞可以使得攻击者能够在未授权的情况下访问或者破坏系统,由于智能合约常应用于金融行业,因此,智能合约漏洞可能会导致大量的经济损失。
[0003]保障智能合约安全的有效途径是智能合约审计,现有智能合约审计常通过人工审计,现有的智能合约审计方式审计效率低,难以支持复杂的智能合约漏洞挖掘。

技术实现思路

[0004]本申请实施例提拱了一种智能合约漏洞挖掘方法及装置,能够支持复杂的智能合约的漏洞挖掘,使挖掘出来的漏洞更加准确,误报率较低。
[0005]第一方面,本申请示出一种智能合约漏洞挖掘方法,所述方法包括:获取已通过编译的智能合约源代码;将所述已通过编译的智能合约源代码进行动态符号执行,得到动态符号执行结果;获取与所述动态符号执行结果匹配的智能合约漏洞;输出所述智能合约漏洞。
[0006]在一种可行的实现方式中,所述获取已编译的智能合约源代码步骤之前,还包括:获取输入的智能合约源代码;将所述输入的智能合约源代码进行编译;所述编译用于判断所述输入的智能合约源代码中是否存在语法错误;判断所述输入的智能合约源代码是否通过编译;若所述输入的智能合约源代码通过编译,得到已通过编译的智能合约源代码。
[0007]在一种可行的实现方式中,所述判断输入的智能合约源代码是否通过编译,包括:若所述输入的智能合约源代码存在格式或语法错误,则所述输入的智能合约源代码未通过编译;若所述输入的智能合约源代码不存在格式或语法错误,则所述输入的智能合约源代码通过编译。
[0008]在一种可行的实现方式中,所述获取输入的智能合约源代码,至少包括以下任意一种方式:获取直接输入的Solidity语言编译的源代码、获取上传的Solidity语言编译的源代码文件以及获取上传的Solidity语言编译的源代码文件的压缩包。
[0009]在一种可行的实现方式中,所述将输入的智能合约源代码进行编译,至少包括以下任意一种方式:solc编译、remix编译以及node.js编译。
[0010]第二方面,本申请示出一种智能合约漏洞挖掘装置,所述装置包括:第一获取模块,所述第一获取模块用于获取已通过编译的智能合约源代码;执行模块,所述执行模块用于将所述已通过编译的智能合约源代码进行动态符号执行,得到动态符号执行结果;匹配模块,所述匹配模块用于获取与所述动态符号执行结果匹配的智能合约漏洞;第一输出模块,所述第一输出模块用于输出所述智能合约漏洞。
[0011]在一种可行的实现方式中,所述装置,还包括:第二获取模块,所述第二获取模块用于获取输入的智能合约源代码;编译模块,所述编译模块用于将所述输入的智能合约源代码进行编译;所述编译用于判断所述输入的智能合约源代码中是否存在语法错误;判断模块,所述判断模块用于判断所述输入的智能合约源代码是否通过编译;第二输出模块,所述第二输出模块用于当所述输入的智能合约源代码通过编译时,输出已通过编译的智能合约源代码。
[0012]在一种可行的实现方式中,所述判断模块,具体设置为:若所述输入的智能合约源代码存在格式或语法错误,则所述输入的智能合约源代码未通过编译;若所述输入的智能合约源代码不存在格式或语法错误,则所述输入的智能合约源代码通过编译。
[0013]在一种可行的实现方式中,第二获取模块,具体设置为,至少执行以下任意一种获取方式:获取直接输入的Solidity语言编译的源代码、获取上传的Solidity语言编译的源代码文件以及获取上传的Solidity语言编译的源代码文件的压缩包。
[0014]在一种可行的实现方式中,所述编译模块,具体设置为,至少执行以下任意一种编译方式:solc编译、remix编译以及node.js编译。
[0015]本申请示出的技术方案,能够支持复杂的智能合约的漏洞挖掘,使挖掘出来的漏洞更加准确,误报率较低。
附图说明
[0016]为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0017]图1是本申请实施例示出的一种智能合约漏洞挖掘方法;图2是本申请实施例示出的一种智能合约漏洞挖掘装置;图3是本申请另一实施例示出的一种智能合约漏洞挖掘装置。
具体实施方式
[0018]为了使本
的人员更好地理解本申请实施例中的技术方案,下面结合附图对本申请实施例中的技术方案作详细的说明。
[0019]本申请以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请实施例的限制。如在本申请实施例的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括复数表达形式,除非其上下文中明确地有相反指示。此外,术语“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
[0020]首先对本申请实施例所属
的一些技术术语进行简单解释说明。其中:智能合约是一种以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
[0021]符号执行(Symbolic Execution)是一种使用符号值作为输入而非一般执行程序
时使用具体值的程序分析技术。符号执行包括和静态符号执行和动态符号执行,其中,静态符号执行包括过程内分析与过程间分析,过程内分析只对单个过程的代码进行分析,过程间分析是指对整个软件代码进行上下文敏感的分析。动态符号执行是以具体数值作为输入来模拟执行程序代码,与静态符号执行相比,动态符号执行与静态符号执行的输入值的表示形式不同。
[0022]智能合约是一种只有通过区块链才能实现的新技术,然而随着区块链在各个行业的普及,智能合约面临着很大的安全问题,智能合约漏洞的频繁爆发影响智能合约的安全性。
[0023]图1为本申请实施例示出的一种智能合约漏洞挖掘方法示意图。如图1所示,智能合约漏洞挖掘方法可以包括:S001:获取输入的智能合约源代码;在一种可行的实现方式中,所述获取输入的智能合约源代码,至少包括以下任意一种方式:获取直接输入的Solidity语言编译的源代码、获取上传的Solidity语言编译的源代码文件以及获取上传的Solidity语言编译的源代码文件的压缩包。
[0024]Solidity是静态类型的高级编程语言,能够在以太坊虚拟机上运行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种智能合约漏洞挖掘方法,其特征在于,所述方法包括:获取已通过编译的智能合约源代码;将所述已通过编译的智能合约源代码进行动态符号执行,得到动态符号执行结果;获取与所述动态符号执行结果匹配的智能合约漏洞;输出所述智能合约漏洞。2.根据权利要求1所述的智能合约漏洞挖掘方法,其特征在于,所述获取已编译的智能合约源代码步骤之前,还包括:获取输入的智能合约源代码;将所述输入的智能合约源代码进行编译;所述编译用于判断所述输入的智能合约源代码中是否存在语法错误;判断所述输入的智能合约源代码是否通过编译;若所述输入的智能合约源代码通过编译,得到已通过编译的智能合约源代码。3.根据权利要求2所述的智能合约漏洞挖掘方法,其特征在于,所述判断输入的智能合约源代码是否通过编译,包括:若所述输入的智能合约源代码存在格式或语法错误,则所述输入的智能合约源代码未通过编译;若所述输入的智能合约源代码不存在格式或语法错误,则所述输入的智能合约源代码通过编译。4.根据权利要求2所述的智能合约漏洞挖掘方法,其特征在于,所述获取输入的智能合约源代码,至少包括以下任意一种方式:获取直接输入的Solidity语言编译的源代码、获取上传的Solidity语言编译的源代码文件以及获取上传的Solidity语言编译的源代码文件的压缩包。5.根据权利要求2所述的智能合约漏洞挖掘方法,其特征在于,所述将输入的智能合约源代码进行编译,至少包括以下任意一种方式:solc编译、remix编译以及node.js编译。6.一种智能合约漏洞挖掘装置,其特征在于,所述装置包括:第一获取模块,所述第一获取模块用于获取已通过编译的...

【专利技术属性】
技术研发人员:汪德嘉张齐齐宋超
申请(专利权)人:江苏通付盾科技有限公司
类型:发明
国别省市:

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

1