slither——区块链智能合约静态分析工具

这篇具有很好参考价值的文章主要介绍了slither——区块链智能合约静态分析工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

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

slither etherstore.sol --print cfg,区块链测试,区块链,智能合约,python

安装特定版本 如0.5.16

solc-select install 0.5.16

设置成你想要的版本 如0.4.24

solc-select use 0.4.24

slither etherstore.sol --print cfg,区块链测试,区块链,智能合约,python

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文件
slither etherstore.sol --print cfg,区块链测试,区块链,智能合约,python
安装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 etherstore.sol --print cfg,区块链测试,区块链,智能合约,python文章来源地址https://www.toymoban.com/news/detail-794367.html

到了这里,关于slither——区块链智能合约静态分析工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链 | 智能合约】Ethereum源代码(3)- 以太坊RPC通信实例和原理代码分析(上)

    上一节提到,以太坊在node start的时候启动了RPC服务,以太坊通过Rpc服务来实现以太坊相关接口的远程调用。这节我们用个实例来看看以太坊 RPC是如何工作的,以及以太坊RPC的源码的实现 1,RPC启动命令 : go-ethereum的RPC服务默认地址:http://localhost:8545/ 通过以下命令修改默认地

    2024年02月02日
    浏览(47)
  • Mythril 以太坊智能合约安全分析与检测工具详解(一)

    Mythril是以太坊EVM字节码的安全分析工具。它检测以太坊、Hedera、Quorum、Vechain、Roostock、Tron和其他兼容evm的区块链构建的智能合约中的安全漏洞。它使用符号执行、SMT方案来分析检测智能合约代码中的各种安全漏洞。 通过 Docker 获取: 从 Pypi 安装: 目前,Mythril 支持 MacOS 和

    2024年02月08日
    浏览(27)
  • 【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析

    上篇提到用 make geth 来编译geth客户端。我们来看看make file做了什么: 执行了 ci.go 里面做了两件事情 1,ln -s命令在build/_workspace/ 目录上生成了go-etherum的一个文件镜像,不占用磁盘空间,与源文件同步更新 2

    2024年02月03日
    浏览(29)
  • 【区块链技术开发】 Solidity使用Truffle Box工具实现预构建模板、自动化部署、创建智能合约示例代码

    专栏:区块链技术开发 Truffle Box是一个开发工具,为Truffle生态系统中的开发人员提供了预构建

    2023年04月16日
    浏览(36)
  • 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 初始化方法

    2024年01月21日
    浏览(40)
  • 【区块链 | 智能合约】Ethereum源代码 - 智能合约地址生成算法

    当提交智能合约部署后,会返回智能合约的地址。智能合约地址的生成逻辑在eth.api.go的submitTransaction函数中:

    2024年02月13日
    浏览(35)
  • 区块链java开发智能合约nf(部署第一个NFT智能合约)

    手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 刚搞区块链开发真的是太累了,自己摸石头过河,动不动就报错,网上搜索错误,一律看不出什么问题,或者报错的信息太少,问同事同事不鸟,问领导,领导也烦,无奈,对于英文不好的我,只能被迫

    2024年02月12日
    浏览(36)
  • 区块链智能合约基础

    什么是智能合约 简单来说,智能合约是一种满足在一定条件时,就执行的程序,例如自动售货机就类似一个智能合约系统。 1.向自动售货机投入足够硬币,按下按钮 2.售货机供出商品 3.售货机回到初始状态 智能合约的工作原理 智能合约是一段程序(代码和数据的集合),可

    2024年02月13日
    浏览(34)
  • 区块链之智能合约

    智能合约( Smart Contract)是以计算机为主要工具,将数学算法嵌入到程序中,用以证明某个事件是否符合约定条件,并保证各方在约定时间内按照约定条件达成一致,以验证和执行合同条款的计算机文本。简单来说智能合约是一个计算机程序,可以在不需要第三方介入的情况

    2024年02月07日
    浏览(32)
  • 区块链智能合约开发学习

    最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发、编译、部署、web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重点提炼出来。 先上图,是我最近学习知识点的一个概括总结,此外还包

    2023年04月18日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包