Mythril自动化测试智能合约并进行分类存储

1、Mythril介绍

mythril工具是由以太坊开源社区所提供的安全分析工具,并且它是免费的,能够检测出Solidity智能合约中的安全漏洞并实现深入分析,是用以分析以太网智能合约及区块链应用安全分析工具及引擎。Mythril使用符号执行和SMT方案来分析检测智能合约代码中的各种安全漏洞,主要可以检测出的漏洞包括整数溢出、时间戳依赖、重入攻击等。

2、环境搭建与安装

本实验是在虚拟机Linux中使用的Ubuntu来做的,如果Ubuntu还不会配置与安装的可以先查看一下其他的帖子,再回来看这个。

1、安装Docker

sudo apt-get install docker.io

2、查看Docker的版本

sudo docker version

如果安装成功会出现如下的信息

Mythril自动化测试智能合约并进行分类存储

3、启动Docker的服务

sudo service docker restart

4、检查Docker服务有没有启动成功

Mythril自动化测试智能合约并进行分类存储

5、安装Mythril

sudo docker pull mythril/myth

Mythril自动化测试智能合约并进行分类存储

6、查看Mythril的各个命令

sudo docker run mythril/myth –help

Mythril自动化测试智能合约并进行分类存储

此时,docker和mythril都已经安装成功

3、mythril对单个智能合约进行检测

在做对所有智能合约进行检测之前,我们先对单个合约进行检测。作为mythril检测智能合约的一个例子。

笔者这边也提供一个智能合约样本的网站:智能合约样本

首先先将一个智能合约样本test1.sol存放在了/home/wjw/test/1的文件夹下(也可以存放到你想存放的地方)

test1.sol(整数溢出漏洞)

pragma solidity 0.4.25;
contract Overflow_Add {
    uint public balance = 1;

    function add(uint256 deposit) public {
        balance += deposit;
    }
}

1、终端输入打开文件夹命令

cd /home
cd /home/wjw
cd /home/wjw/test
cd /home/wjw/test/1

Mythril自动化测试智能合约并进行分类存储

2、检测test1.sol

sudo docker run -v $(pwd):/home/wjw/test/1 mythril/myth analyze /home/wjw/test/1/source_code.sol

Mythril自动化测试智能合约并进行分类存储

SWC ID:101

对单个智能合约的检测如上所述,可以根据自己存放的位置来进行修改

4、利用Mythril对文件夹下的智能合约进行批量自动化检测

首先在/home/wjw/test下面创建了三个文件夹,分别命名为1、2、3,并在1、2、3中存放了一个智能合约样本,如图所示。

Mythril自动化测试智能合约并进行分类存储

Mythril自动化测试智能合约并进行分类存储

笔者这边的思路是:

1、我们是在Linux中进行的操作,因此这边自动化检测最好使用shell脚本,所以接下来的操作都是shell脚本中进行的
2、首先我们需要去遍历文件夹及文件子夹
3、查找到最后子夹中文件扩展名为”.sol”的文件
4、输入检测语句–>打开最终存储所需要检测智能合约的文件夹–>利用工具Mythril来检测智能合约

autoMythril.sh

#!/bin/bash

######################################################################
##                                                                  ##
##   Mythril自动测试智能合约并分类存储                                ##
##                                                                  ##
######################################################################

#递归遍历文件
function getdir(){
    for element in ls $1
    do
        dir_or_file=$1"/"$element
        if [ -d $dir_or_file ]
        then
            getdir $dir_or_file
        else
            #echo $1
            #echo $dir_or_file
            #查找文件扩展名为".sol"的文件
            check_suffix $element
            #在终端中输入基本语句
            cd /home
            cd /home/wjw
            cd /home/wjw/test
            #打开最终存储所需要检测智能合约的文件夹
            cd $1
            sudo docker run -v $(pwd):$1 mythril/myth analyze $dir_or_file
        fi
    done
}
#查找文件扩展名为".sol"的文件
check_suffix()
{
    file=$1

    if [ "${file##*.}"x = "sol"x ];then
        echo $file
    fi
}

root_dir="/home/wjw/test"
getdir $root_dir

运行脚本可以得到如图所示,可以看出我们脚本成功实现了此要求

Mythril自动化测试智能合约并进行分类存储

之后为了可以更好的分类良性与恶性的样本,笔者这边对脚本进行了一个升级,思路如下

1、将终端检测结果存放入到当前文件夹下的result.txt文件中
2、根据result.txt中的关键字符串来判断将它移动到恶性还是良性文件夹下

由于在笔者多次试验后遇到了一些比较奇怪的检测结果(在文章的最后会附上),因此这边根据关键字符串来进行判断时,只有出现良性语句的才判断为良性并存放到良性的文件夹下,除此之外的统一判断为恶性的样本。

完善的脚本autoMythrilPro.sh

#!/bin/bash

######################################################################
##                                                                  ##
##   Mythril自动测试智能合约并分类存储                                ##
##                                                                  ##
######################################################################

#递归遍历文件
function getdir(){
    for element in ls $1
    do
        dir_or_file=$1"/"$element
        if [ -d $dir_or_file ]
        then
            getdir $dir_or_file
        else
            #echo $1
            #echo $dir_or_file
            #查找文件扩展名为".sol"的文件
            check_suffix $element
            #在终端中输入基本语句
            cd /home
            cd /home/wjw
            cd /home/wjw/test
            #打开最终存储所需要检测智能合约的文件夹
            cd $1
            #利用工具Mythril来检测智能合约,并将检测信息放到文件下的result.txt中
            sudo docker run -v $(pwd):$1 mythril/myth analyze $dir_or_file > result.txt
            #查找文件中是否有相应匹配的字符串
            FIND_FILE="$1/result.txt"

            FIND_STR="The analysis was completed successfully. No issues were detected."

             # 判断匹配函数,匹配函数不为0,则包含给定字符,按类分别存储有漏洞的智能合约
            if [ grep -c "$FIND_STR" $FIND_FILE -ne '0' ];then
                         mv $1 /home/wjw/result/Normal
            else
                         mv $1 /home/wjw/result/Malicious
            fi
        fi
    done
}
#查找文件扩展名为".sol"的文件
check_suffix()
{
    file=$1

    if [ "${file##*.}"x = "sol"x ];then
        echo $file
    fi
}

root_dir="/home/wjw/test"
getdir $root_dir

此时检测成功会出现如下的结果

Mythril自动化测试智能合约并进行分类存储

Mythril自动化测试智能合约并进行分类存储

以上就是整个的实验过程

5、附录

Mythril自动化测试智能合约并进行分类存储

Mythril自动化测试智能合约并进行分类存储

还会出现”UTF-8″的错误,这是存储时没有保存为UTF-8的格式,可以在文件的另存为上进行修改

Mythril自动化测试智能合约并进行分类存储

Original: https://blog.csdn.net/qq_45138078/article/details/127396122
Author: 白日梦我Deja_Vu
Title: Mythril自动化测试智能合约并进行分类存储

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/661908/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球