一、概述

Slither是一个用Python 3编写的智能合约静态分析框架(源码),提供如下功能:

  • 自动化漏洞检测。提供超30多项的漏洞检查模型,模型列表详见:https://github.com/crytic/slither#detectors
  • 自动优化检测。Slither可以检测编译器遗漏的代码优化项并给出优化建议。
  • 代码理解。Slither能够绘制合约的继承拓扑图,合约方法调用关系图等,帮助开发者理解代码。
  • 辅助代码审查。用户可以通过API与Slither进行交互。

二、Slither运行流程

Slither的工作方式如下:
1、智能合约源码经过solc编译后得到Solidity抽象语法树(AST)作为Slither的输入。
2、经过information recovery(数据整合),Slither生成合约的继承图,控制流图(CFG)以及合约中函数列表。
3、经过SlithIR转换,Slither将合约代码转换为SlithIR,一种内部表示语言,目的是通过简单的API实现高精度分析,支持污点和值的跟踪,从而支持检测复杂的模型。
4、在代码分析阶段,Slither运行一组预定义的分析,包括合约中变量、函数的依赖关系;变量的读写和函数的权限控制。
5、经过Slither的核心处理之后,就可以提供漏洞检测、代码优化检测和代码理解输出等。
论文——DIO:10.1109/WETSEB.2019.00008

三、安装

由于 Solidity 编译器版本有很多,有些sol文件使用的是老版的 Solidity 编译器版本,故需要进行版本的切换,将solc版本卸载,再重装所需要的版本是耗费时间并且显得很蠢。而solc-select是在 Solidity 编译器版本之间快速切换的工具,就很方便。安装solc-select之前,请先卸载本机的solc。

3.1 solc-select安装

个人比较喜欢一个工具匹配一个虚拟环境,以免造成依赖包版本冲突

安装虚拟环境包

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

创建虚拟环境

virtualenv --python=/usr/local/python3/bin/python3  slither

进入虚拟环境

source /blockchain/slither/bin/activate

退出虚拟环境

deactivate

安装 solc-select

pip3 install solc-select==0.2.0
## 安装solc-select 0.2.0版本 比较稳定 0.2.1版本有误

查看可安装的solc版本

solc-select install

安装特定版本 如0.5.16

solc-select install 0.5.16

设置成你想要的版本 如0.4.24

solc-select use 0.4.24

3.2 slither安装

slither安装

pip3 install slither-analyzer

打印CFG
首先编写一份合约存储在test.sol文件中,具体代码如下

pragma solidity ^0.8.1;
contract Overflow{uint sellerBalance=0;function add(uint value)public returns(bool,uint){sellerBalance +=value;assert(sellerBalance>=value);}
}

运行CFG打印命令

slither test.sol --print cfg

输出了两个dot文件

安装xdot

yum install xdot
# ubuntn下请使用 apt-get

将dot文件变成png文件

dot test.sol-Overflow-add\(uint256\).dot -Tpng -o test.png
# 官方文档给出的是 dot function.dot -Tsvg -o function.sol.png  使用这条命令可以生成png图片但是无法被打开,因为格式错误,其原因在于-Tsvg 官方的原意是想生成svg,这里应该是小笔误

生成的CFG如下图

slither——区块链智能合约静态分析工具相关推荐

  1. android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约

    本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...

  2. 区块链 智能合约 简介

    根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约. ...

  3. 了区块链开放平台baas_区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务...

    区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务 什么是区块链即服务? 区块链即服务是一种独特的经济模型,允许消费者使用基于云的服务来开发,使用和托管其区块链应用,功能和智能合约.  源中瑞 ...

  4. [区块链安全-Ethernaut]区块链智能合约安全实战-已完结

    [区块链安全-Ethernaut]区块链智能合约安全实战-已完结 准备 0. Hello Ethernaut 准备工作 创建实例并分析 合约交互 总结 1. Fallback 创建实例并分析 合约交互 ...

  5. 论述《区块链智能合约的合同效力认定》去中心化金融的钞能力赛道

    | 没有喧嚣,没有问候的"沉默",请安静听完这段征途故事! 摘要 智能合约是自动执行合同条款的代码协议,其以代码替代传统人为执行合同,本质上是运用代码"编译"传 ...

  6. 10采用区块链智能合约管理智能城市房地产交易的概念框架

    原文标题: A conceptual framework for blockchain smart contract adoption to manage real estate deals in s ...

  7. Solana区块链智能合约开发简要流程

    Solana区块链智能合约开发简要流程 Solana区块链是当今市值第5的区块链,已经有很多知名生态准备部署在Solana上.相比于类以太坊(EVM)区块链来讲,Solana上智能合约开发(叫Prog ...

  8. 区块链智能合约入门:Hello world(2)

    这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...

  9. 智能合约重构社会契约(11)天德区块链智能合约系统

    智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...

最新文章

  1. 你知道吗?du 和 df 的统计结果为什么不一样
  2. 计算机组成的基本硬件设备
  3. DNS服务器详解--------基础篇
  4. Python技术分享:Python学习的一些小技巧
  5. xss challenge 解题思路(8-18)
  6. php软件开发--yii2框架搭建及gitlib同步线上网站
  7. RegExp 构造函数
  8. iOS 中delegate的理解与使用(传值)
  9. Colorful SegmentedControl
  10. Android中的隐藏API和Internal包的使用之获取应用电量排行
  11. 生产环境服务器部署kvm虚拟化6,KVM虚拟化平台环境部署
  12. 改变蜡笔小新的眼睛颜色(对bmp图像的部分更改)
  13. 初步了解PS“时间轴”
  14. jacob不能在Linux系统使用!
  15. 谷歌的新系统Fuchsia OS根本不能替代安卓
  16. Java后端工程师必备书单(从Java基础到分布式)
  17. 【牛客网面经整理】20200831小米一面
  18. 3.每天一个java小程序之累加累乘
  19. 苹果怎么关位置定位服务器,iphone的定位服务在哪里
  20. latex中文编辑顿号的输入

热门文章

  1. php 获取客户端位置信息_PHP中获取客户端IP地址所在的地理位置信息
  2. 流水条码标签的制作打印
  3. lua访问mysql_Lua之数据库访问
  4. php递归分组,PHP递归实现无限级分类
  5. 百度超级链2021年终盘点:深度赋能数字经济,促进产业融通发展
  6. java怎么调epass3003,epass3003管理工具
  7. √C语言数组--矩阵
  8. TSINGHUAJOKING公众号基本信息
  9. 面试英语情景对话,求职者必看!
  10. A. Ivan the Fool and the Probability Theory