#solidity #security #contract #smart-contracts #parameters #analyzing

pyrometer

用于分析Solidity智能合约的安全性和参数的工具

1个不稳定版本

0.1.0 2023年3月15日

#10 in #analyzing

MIT 许可证

2KB

🔥🔫 Pyrometer 🔥🔫

Telegram Chat

Pyrometer是一个仍在开发中的安全工具,目前处于BETA阶段。它应该适用于大多数Solidity 0.8.x 合约,但有一些限制和尚未涵盖的语言边缘情况。

实际上,Pyrometer是符号执行、抽象解释和静态分析的结合体 - 我们从每个领域吸取灵感,并采用以工程优先的思维方式来创建一个有效的工具(避免学术论文的nerdsnipes),旨在帮助审计人员和开发者。

Pyrometer最终可能成为语言无关,但就目前而言,它针对的是Solidity。代码目前还没有完全结构化以支持多语言,但它有一些支持其他EVM目标语言的框架。

以下是一个输出示例

安装

首先,请确保已安装Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后

git clone https://github.com/nascentxyz/pyrometer
cd pyrometer/cli
cargo install --path . --locked
pyrometer <PATH_TO_SOLIDITY_FILE> --help

如果您的项目通过node_modules导入合约或使用重映射,请在运行forge remappings > remappings.txt后确保传递--remappings remappings.txt标志。

请确保$CARGO_HOME/bin已添加到您的$PATH中。

最终将构建和发布二进制文件进行版本升级。

配置Pyrometer

运行pyrometer --help获取更多详细信息。

快速提示

  1. pyrometer ./myContract.sol --remappings remappings.txt:通常需要--remappings标志,否则您将遇到文件不存在的崩溃。
  2. 温度计 ./我的合约.sol -vv: -vv 在冗余方面通常是最佳选择
  3. 温度计 ./我的合约.sol --funcs "我的函数": --funcs 标志可以帮助缩小输出范围,仅显示您关心的函数。您可以根据需要多次使用此标志以匹配更多函数
  4. 温度计 ./我的合约.sol --contracts "我的合约": --contracts 标志可以帮助缩小输出范围,仅显示您关心的合约。您可以根据需要多次使用此标志以匹配更多合约

我可以用它做什么?

目前,pyrometer主要有两个用途。

作为二进制程序

二进制程序(即 CLI 应用程序)的目标用户是开发人员和审计人员。建议的使用案例是手动验证一个或多个函数。正在制作有关如何充分利用温度计的视频教程。

作为库

Pyrometer 的图形中间表示和边界分析对于各种基于 Solidity 的工具非常有用。它可以被用作:

  1. LSP 的后端(尽管目前不建议使用)
  2. 合约可视化工具(我们已经支持通过 --dot 标志将图输出到 dot
  3. 改进的模糊测试器(正在进行中,如有兴趣提供帮助,请联系)
  4. 查询语言的后端以编写分析(类似于 Slither 检测器的分析)
  5. 代码重构/预处理工具

理解输出内容

您通常会看到一条下划线,后面跟着 符号,然后是 [ 最小可能值, 最大可能值 ] 表示集合成员关系,意思是“是元素之一”,而括号表示一个 区间 - 例如,如果您看到

"x"[ 0, 10 ] &&{ 5 },您可以将其读作“x 在 0 到 10 的范围内,不包括 5”。每种 Solidity 类型都有自己的默认边界。如果您看到 "x" == 3,则在该程序点 x 必须是 3。

这背后的理论是什么?

有关详细信息,请参阅理论页面

仓库如何组织结构?

有关详细信息,请参阅架构页面

贡献

首先阅读架构页面,然后开始开发。加入电报群(见上方徽章)提问。

请参阅待办事项以了解优先级最高的任务。




lib.rs:

pyrometer crate的占位符:https://github.com/nascentxyz/pyrometer

无运行时依赖