Предупреждение
Regast не поддерживается с марта 2023 года. Если вы пытаетесь запустить его, он, скорее всего, принесет ошибку на стадии разбора.
Тем не менее, не стесняйтесь просматривать код, чтобы получить представление о том, как реализовать свой собственный статический анализатор.
Regast является статическим анализатором для выявления уязвимостей безопасности и оптимизации газа в кодовых базах.
Он сильно вдохновлен такими инструментами, как Slither, Solstat и 4naly3er, но имеет следующие различия:
Regast требует Python 3.10 или выше.
Во -первых, клонировать этот репозиторий и его подмодули:
git clone --recurse-submodules https://github.com/MiloTruck/regast.git
cd regast Установите Regast с помощью pip или setuptools :
# Using pip
pip3 install .
# Using setuptools
python3 setup.py installПосле установки хранилище можно удалить:
cd ..
rm -r regast Команда regast может использоваться в файле .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 способен генерировать отчеты об отметках с найденными проблемами. Для примера, пожалуйста, обратитесь к следующим образцам отчетов:
Regast построен на вершине питона дерева, который обеспечивает привязки Python для библиотеки разбора деревьев. Грамматика для солидности взята из-за силости деревьев.
tree-sitter сначала преобразует исходный код прочности в несколько абстрактных синтаксических деревьев (AST). Затем Regast анализирует каждый узел в этих AST в соответствующие классы Python. После того, как анализ будет завершен, отдельные детекторы запрашивают AST через эти классы Python для выявления общих моделей уязвимости.
Большая часть кода Regast находится в следующих каталогах:
regast/core содержит классы Python, которые представляют части AST.regast/detectors содержит детекторы, которые REGAST работает по умолчанию.regast/parsing содержит логику для анализа AST от tree-sitter в классы Python.