regast
1.0.0
警告
自2023年3月以来一直没有维护Regast 。如果您想运行它,它很可能在解析阶段会出现错误。
但是,请随时查看代码,以了解如何实现自己的静态分析仪。
Remast是一种静态分析仪,用于识别固体代码库中的安全漏洞和气体优化。
它的灵感来自Slither,Solstat和4naly3er等工具,但具有以下差异:
Recast需要Python 3.10或更高。
首先,克隆该存储库及其子模型:
git clone --recurse-submodules https://github.com/MiloTruck/regast.git
cd regast使用pip或setuptools安装重新安装重新安装:
# Using pip
pip3 install .
# Using setuptools
python3 setup.py install安装后,可以删除存储库:
cd ..
rm -r regastregast命令可以在.sol文件或包含坚固文件的文件夹上使用:
$ regast --help
usage: __main__.py [-h] [-d <detector>] [-c <classifications>] [-s <scope>] [-r <filename>] <contract>
Scan for vulnerabilities based on regex or AST queries.
positional arguments:
<contract> .sol file or folder containing .sol files to scan
options:
-h, --help show this help message and exit
-d <detector>, --detectors <detector>
.py file or folder containing .py files which implement detectors
-c <classifications>, --classifications <classifications>
Comma-separated list of classifications: GAS, NC, LOW, MEDIUM, HIGH
-s <scope>, --scope <scope>
Text file containing a list of contracts in scope
-r <filename>, --report <filename>
Generate a markdown report in <filename>.md
以下是当前实现的检测器,该检测器默认运行。来自4naly3er和Solstat的大多数检测器将来都将包括在内。
| 探测器 | 描述 | 分类 |
|---|---|---|
address_balance | 使用selfbalance()代替address(this).balance 。 | 气体 |
address_zero | 使用组件检查address(0) 。 | 气体 |
assign_update_array_value | 使用arr[i] += n而不是arr[i] = arr[i] + n更新数组值。 | 气体 |
bool_comparison | 不要将布尔人与true或false进行比较。 | 气体 |
bool_storage | 使用bool来存储开销。 | 气体 |
byte_constant | bytes常数比string常数更有效。 | 气体 |
cache_array_length | 缓存阵列长度在前面。 | 气体 |
custom_error | 使用自定义错误而不是require语句。 | 气体 |
initialize_default_value | 具有默认值的变量的不必要的初始化 | 气体 |
long_revert_string | require带有错误消息的语句。 | 气体 |
post_increment | ++i价格低于i++或i += 1 。 | 气体 |
private_constant | 宣布常数为private ,而不是非公共的,以节省天然气。 | 气体 |
shift_arithmetic | 在可能的情况下使用<<和>>而不是乘法/除法。 | 气体 |
split_require_statements | 使用单独的require语句而不是&& 。 | 气体 |
unchecked_increment | “可以在未循环中宣布unchecked增量”。 | 气体 |
unsigned_comparison | 使用!= 0而不是> 0用于无符号整数比较。 | 气体 |
有关如何编写自定义检测器的信息,请参阅docs/writing-custom-detectors.md 。
Regast能够生成有关发现问题的Markdown报告。例如,请参阅以下示例报告:
Regast建立在树顶派森(Tree-Sitter-Python)的顶部,该树木为树木解析库提供了Python绑定。固体的语法取自树特性的态度。
tree-sitter首先将坚固源代码转换为多个抽象语法树(AST)。然后,将这些AST中的每个节点解析为相应的Python类。解析完成后,各个检测器通过这些Python类查询AST,以识别共同的漏洞模式。
Regast的大多数代码都在以下目录中:
regast/core包含代表AST一部分的Python类。regast/detectors包含默认情况下Recast运行的检测器。regast/parsing包含将AST从tree-sitter解析为Python类的逻辑。