[发明专利]一种以太坊智能合约问题检测和预防方法与装置在审
申请号: | 201911314940.7 | 申请日: | 2019-12-19 |
公开(公告)号: | CN111177730A | 公开(公告)日: | 2020-05-19 |
发明(设计)人: | 张鹏程;肖锋;于佳男;张勐;吉顺慧;戴启印;曹文南 | 申请(专利权)人: | 河海大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 孟红梅 |
地址: | 211100 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 以太 智能 合约 问题 检测 预防 方法 装置 | ||
1.一种以太坊智能合约问题检测和预防方法,其特征在于,包括如下步骤:
步骤1:获取待检测的以太坊智能合约,并将源代码进行格式化;
步骤2:根据不同问题的特征,确定对应的正则表达式及检测规则,以及确定预防重入漏洞和整数溢出漏洞的代码语句的构造方法;
步骤3:将格式化后的代码发送到不同的问题检测程序中,问题检测程序根据步骤2定义的正则表达式和检测规则,检测不同种类的智能合约问题;
步骤4:对于重入漏洞,将格式化后的代码发送到预防重入漏洞程序中,预防重入漏洞程序根据步骤2定义的正则表达式定位可能引入重入漏洞的代码语句,然后根据合约内容构造欲插入的预防代码,最后将预防代码插入到智能合约中;
步骤5:对于整数溢出漏洞,将格式化后的代码发送到预防整数溢出漏洞程序中,预防整数溢出漏洞程序根据步骤2定义的正则表达式定位可能引入整数溢出漏洞的代码语句,然后根据合约内容构造欲插入的预防代码,最后将预防代码插入到智能合约中;
步骤6:根据用户的选择的功能,将步骤3-步骤5中至少一个步骤的检测或预防结果输出给用户。
2.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤1中作为输入的以太坊智能合约源代码是使用以太坊智能合约编程语言Solidity编写的。
3.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤2中智能合约问题的种类包括严格地比较合约存款、未处理的异常、被外部地址拒绝服务、使用tx.origin进行身份验证、缺失构造函数、锁定的钱、不安全的类型推断、使用Byte[]、昂贵的循环、时间戳依赖、不标准的代币接口、使用浮点数、私有可见性、冗余的拒绝支付、编译器版本问题、不标准的编程风格、整数除法、未显式指明地可见性中的至少一种;每种问题至少使用一个正则表达式描述其特征。
4.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤3包括如下步骤:
步骤31:读取保存着格式化代码的智能合约文件;
步骤32:将格式化的代码发送到不同种类的问题检测程序中;
步骤33:每个问题检测程序将格式化代码保存为一个字符串数组,逐行遍历,使用为这一个问题定义的正则表达式和检测规则匹配这一行代码;如果匹配成功,则认定这一行代码含有这一种问题;如匹配失败,则认定这一行代码不含有这一种问题;
步骤34:根据步骤33中所有的问题检测程序的检测结果,统计问题种类和数量,确定每个问题存在的行数。
5.根据权利要求1所述的一种以太坊智能合约问题检测和预防方法,其特征在于,所述步骤4中插入代码预防重入漏洞产生,具体包括:
步骤41:读取保存着格式化智能合约源代码的文件;
步骤42:将格式化后的代码发送到预防重入漏洞产生程序中;
步骤43:预防重入漏洞产生程序将格式化代码保存为一个字符串数组;
步骤44:预防重入漏洞产生程序逐行遍历数组,根据步骤2定义的正则表达式和检测规则定位可能引入重入漏洞的代码语句,如果代码中存在这样的语句,则转入步骤45,否则转入步骤5;
步骤45:对于每一行可能引入重入漏洞的代码语句,首先,从头开始逐行遍历格式化后的代码,寻找第一个记录着账户地址和地址持有代币数量关系账本变量,获取账本变量的名字;然后,从可能引入重入漏洞的代码语句中获得接收以太币的地址;最后,根据接收以太币的地址和账本变量的名字,构造要插入到合约中的预防代码;
步骤46:首先,根据合约中的函数调用关系,构造函数调用链;然后,根据函数调用链,将步骤45中构造的预防代码插入到调用链中的不同位置。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于河海大学,未经河海大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911314940.7/1.html,转载请声明来源钻瓜专利网。