1个不稳定版本
0.1.0 | 2023年3月15日 |
---|
#10 in #analyzing
2KB
🔥🔫 Pyrometer 🔥🔫
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
获取更多详细信息。
快速提示
pyrometer ./myContract.sol --remappings remappings.txt
:通常需要--remappings
标志,否则您将遇到文件不存在
的崩溃。温度计 ./我的合约.sol -vv
:-vv
在冗余方面通常是最佳选择温度计 ./我的合约.sol --funcs "我的函数"
:--funcs
标志可以帮助缩小输出范围,仅显示您关心的函数。您可以根据需要多次使用此标志以匹配更多函数温度计 ./我的合约.sol --contracts "我的合约"
:--contracts
标志可以帮助缩小输出范围,仅显示您关心的合约。您可以根据需要多次使用此标志以匹配更多合约
我可以用它做什么?
目前,pyrometer主要有两个用途。
作为二进制程序
二进制程序(即 CLI 应用程序)的目标用户是开发人员和审计人员。建议的使用案例是手动验证一个或多个函数。正在制作有关如何充分利用温度计的视频教程。
作为库
Pyrometer 的图形中间表示和边界分析对于各种基于 Solidity 的工具非常有用。它可以被用作:
- LSP 的后端(尽管目前不建议使用)
- 合约可视化工具(我们已经支持通过
--dot
标志将图输出到dot
) - 改进的模糊测试器(正在进行中,如有兴趣提供帮助,请联系)
- 查询语言的后端以编写分析(类似于 Slither 检测器的分析)
- 代码重构/预处理工具
理解输出内容
您通常会看到一条下划线,后面跟着 ∈
符号,然后是 [ 最小可能值, 最大可能值 ]
。 ∈
表示集合成员关系,意思是“是元素之一”,而括号表示一个 区间 - 例如,如果您看到
"x" ∈ [ 0, 10 ] && ∉ { 5 }
,您可以将其读作“x 在 0 到 10 的范围内,不包括 5”。每种 Solidity 类型都有自己的默认边界。如果您看到 "x" == 3
,则在该程序点 x
必须是 3。
这背后的理论是什么?
有关详细信息,请参阅理论页面。
仓库如何组织结构?
有关详细信息,请参阅架构页面。
贡献
首先阅读架构页面,然后开始开发。加入电报群(见上方徽章)提问。
请参阅待办事项以了解优先级最高的任务。
lib.rs
:
pyrometer crate的占位符:https://github.com/nascentxyz/pyrometer