最近阅读了Contractfuzzer的源代码,总结了Contractfuzzer的系统框架图

 Contractfuzzer 是第一篇智能合约fuzz的文章,其主要分为三个模块,分别是测试用例生成模块、交易自动化发送模块和交易执行与漏洞检测模块。

一、测试用例生成模块(对应文件Contract_fuzzer)

测试用例生成模块主要负责测试用例的生成以及接收来自geth-cf的测试结果,并对测试结果进行处理展示。测试用例的生成步骤如图所示

(1)先读取相应的文件生成测试过程所需要的数据集,并构建数据集间的数据映射关系

(2)然后随机确定合约的模糊次数和测试用例数

(3)根据合约的ABI码随机选取一个函数作为模糊的对象

(4)系统根据函数的输入参数自动选择种子生成测试用例,不同类型的输入参数使用不同的策略生成测试数据,最后将测试用例发给test模块,由test组成交易打包发送给EVM执行。

二、交易发送模块(Contract_test模块)

test模块主要是接收来自fuzzer模块的测试用例,并封装成为交易发送给虚拟机EVM执行。在test中分为两种发送者账户,一个是合约的所有者账户、一个是普通用户账户,test模块会分别使用这两种账户发出交易。

除此之外,在测试的时候会同时发出两种交易,一种是发给目标合约的交易,用来检测合约中是否存在普通的漏洞,另一种交易是发送给重入攻击合约,用来检测合约中是否存在重入漏洞。

三、漏洞检测模块(geth-cf中的插桩)

  

在geth_cf中,作者通过插桩在虚拟机中收集交易执行过程中的操作码、合约状态和callhash等信息,等交易执行结束之后利用预先定义的漏洞检测方法对收集到的数据进行模式匹配,从而检测出漏洞是否存在相应的漏洞。

四、结果的处理与展示

Contract_fuzzer模块的Serve文件通过检测geth_cf发送过来的检测报告中的关键词,规范化的输出合约的检测结果和合约的执行日志等

Logo

为所有Web3兴趣爱好者提供学习成长、分享交流、生态实践、资源工具等服务,作为Anome Land原住民可不断优先享受各种福利,共同打造全球最大的Web3 UGC游戏平台。

更多推荐