1.什么是智能合约?什么是区块链?

  现有智能合约分析工具虽然基于静态或动态分析技术,但普遍存在抽象层级不合理、鲁棒性不足、性能较低、误报率高以及缺乏开箱即用检测能力等问题;同时受限于 Solidity 编译生态支持不足,工具扩展性受限。Slither 的提出旨在构建一个具备合理抽象层级、高鲁棒性、高性能与高准确性,并内置常用分析与检测器的开源静态分析框架。

2.Slither:一种智能合约的静态分析工具

2.1工具架构

  • 初始输入:Slither以Solidity抽象语法树(AST)作为初始输入,该语法树由Solidity编译器从合约源代码生成。
  • 第一阶段(信息恢复 ):Slither 从 AST 中恢复重要信息,如合约的继承图 (inheritance graph)、控制流图 (Control Flow Graph, CFG) 和表达式列表。
  • 第二阶段(SlithIR 转换):Slither将合约的整个代码转换为SlithIR,即其内部表示语言。 SlithIR 的核心特性: 静态单赋值 (Static Single Assignment, SSA) 形式:每个变量只被赋值一次,且在使用前定义。这极大地简化了数据流分析。 精简指令集 (Reduced Instruction Set):SlithIR 使用少于 40 条指令,避免了语义信息的丢失。 混合表示 (Hybrid Intermediate Representation):它不包含内部控制流表示,而是依赖于 Slither 现有的控制流图结构,将 SlithIR 代码与 CFG 节点关联起来。
  • 第三阶段(代码分析):Slither 执行一套预定义的分析(如数据流、污点追踪等),为其他模块提供增强信息。
  • 第四阶段(工具集成):经过Slither的核心处理之后,就可以提供漏洞检测、代码优化检测和代码理解输出等。Slither 的设计允许其他工具基于其 SlithIR 表示进行更高级的分析,如符号执行或转换为其他中间表示 (如 LLVM)。

2.2 功能

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

  • 自动化漏洞检测。内置100+ 内置检测器,如reentrancy、arbitrary-send等,它支持自定义规则编写。
  • 自动优化检测。Slither可以检测编译器遗漏的代码优化项并给出优化建议。
  • 代码理解。Slither能够绘制合约的继承拓扑图,合约方法调用关系图等,帮助开发者理解代码。
  • 辅助代码审查。用户可以通过API与Slither进行交互。

2.3 slither的使用

2.3.1 Slither支持pip、源码编译和docker三种安装方式。

        (1)pip安装: pip3 install slither-analyzer

        (2)源码编译: git clone https://github.com/crytic/slither.git && cd slither python3 setup.py install

        (3)docker安装: docker pull trailofbits/eth-security-toolbox

2.3.2 Slither的执行:

在网上随便找一个合约测试:

3.总结

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐