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

Slither是一个用Python 3编写的Solidity静态分析框架。它运行一套漏洞检测器,打印有关智能合约细节的可视化信息,并提供一个API来轻松编写自定义分析。Slither使开发人员能够发现漏洞,增强代码理解能力,并快速原型定制分析。 并且Slither相比较其他工具而言,最好的一个地方在于它的安装与使用都非常的简单,并且检测的效率很高。但是检测的准确率不算太高。

一、特点 

  • 检测具有低误报率的易受攻击的Solity代码
  • 识别源代码中错误条件发生的位置
  • 内置“打印机”快速报告关键合同信息
  • 能够分析以Solidity>=0.4编写的合约
  • 正确解析99.9%的所有公共Solidity代码
  • 每份合同的平均执行时间少于1秒

二、Slither的安装 

Slither安装首先需要Python版本在3.8以上,并且安装有solc。

1、可以通过pip3进行安装(推荐)

pip3 install slither-analyzer

2、使用git进行安装

git clone https://github.com/crytic/slither.git && cd slither

python3 setup.py install

3、使用docker进行安装

docker pull trailofbits/eth-security-toolbox

docker run -it -v /home/share:/share trailofbits/eth-security-toolbox 

以上三种方法笔者推荐使用第一种方法,即使用pip3下载安装的方式,使用docker安装可能会显示各种错误 

三、使用Slither对合约进行检测

1、对整个文件夹下的.sol文件进行检测

slither .

2、对指定目录下的指定文件进行检测

slither tests/uninitialized.sol 

四、注意

配置solitidy版本的时候,查看可以下载的版本

solc-select versions

下载需要的solidity版本

solc-select install 0.4.25

使用所下载的solidity版本

solc-select use 0.4.25 

使用Slither来检测的时候需要根据合约的版本来选择不同的版本号,但是一般来说高版本的都可以用来检测低版本的(仅限于第二位相同),但是也有特殊的,例如0.5.8和0.5.7这两个都需要通过各自的版本单独检测

五、自动检测并分类存储

这边自动化检测的脚本与之前的Mythril的脚本类似,可以先去看那边的脚本解释,这边就不再多说

#!/bin/bash
 
######################################################################
##                                                                  ##
##   Slither自动测试智能合约并分类存储                                ##
##                                                                  ##
######################################################################
 
#递归遍历文件
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/1
            cd /home/wjw/1/5
            cd /home/wjw/1/5/052
            
            
            #打开最终存储所需要检测智能合约的文件夹
            cd $1
            #利用工具slither来检测智能合约
            slither .
        fi  
    done
}
#查找文件扩展名为".sol"的文件
check_suffix()
{
    file=$1
    
    if [ "${file##*.}"x = "sol"x ];then
        echo $file
    fi    
}
 
 
root_dir="/home/wjw/1/5/052"
getdir $root_dir

梦想是不会发光的,发光的是追梦的我们,翻过这座山,他们就会听到你的故事。不管故事的结局是什么,当某人询问你时,你可以慷慨的向她描述来时路上的一路生花。或许,你也是某人翘首以盼的惊喜,你未来的样子都藏在了现在的努力里,那么不妨大胆一点,“少年者,思无邪,而大道就在脚下,走!” 

你可能感兴趣的:(智能合约工具Slither,智能合约,ubuntu,bash,区块链)