Contractfuzzer 框架分析(源码分析)

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

Contractfuzzer 框架分析(源码分析)_第1张图片

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

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

Contractfuzzer 框架分析(源码分析)_第2张图片

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

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

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

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

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

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

Contractfuzzer 框架分析(源码分析)_第3张图片

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

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

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

Contractfuzzer 框架分析(源码分析)_第4张图片

Contractfuzzer 框架分析(源码分析)_第5张图片  

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

四、结果的处理与展示

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

你可能感兴趣的:(测试用例,智能合约,区块链)