跳转到主要内容

Amarna 是 Cairo 编程语言的静态分析器。

项目描述

Amarna

Amarna 是 Cairo 编程语言的静态分析器和代码检查器。

特性

  • 在 Cairo 代码中查找代码异味和潜在漏洞
  • 与 StarkNet 合约相同的 Cairo 代码和编译器识别解析
  • 支持创建本地和全局规则
  • 导出 Cairo 文件的解析 AST
  • 将静态分析结果导出为 SARIF 格式。

基本用法

分析当前目录中的 Cairo 项目并导出 SARIF 结果到文件

amarna . -o out.sarif

分析单个文件 file.cairo 并导出 SARIF 结果到文件

amarna file.cairo -o out.sarif

分析单个文件 file.cairo 并打印结果摘要

amarna file.cairo -s

集成

当前支持的规则

# 规则 它查找的内容 影响 精确度
1 算术运算 所有使用算术运算 +, -, *, 和 / 的操作 信息
2 未使用参数 在出现的函数中未被使用的函数参数 警告
3 未使用导入 未使用导入 信息
4 类型错误的装饰器 类型错误的代码装饰器 信息
5 未使用函数 从未被调用的函数 信息 中等
6 错误代码 必须检查返回值的函数调用 信息
7 断言使用不统一 使用相同常量的断言方式不同,例如 assert_le(amount, BOUND)assert_le(amount, BOUND - 1) 警告
8 无效存储 赋值但未在返回语句之前使用的变量 信息 中等
9 未经检查的溢出 忽略返回溢出标志的函数调用,例如 uint256_add 警告
10 调用者地址返回值 调用 get_caller_address 函数的函数调用。 信息
11 存储变量冲突 具有相同名称的多个 @storage_var。(已弃用) 警告
12 隐式函数导入 具有装饰器 @external, @view, @l1_handler 且被隐式导入的函数。(已弃用) 信息
13 未强制执行的视图函数 @view 函数中修改状态 信息
14 未初始化的变量 从未初始化的局部变量。 信息

用法

分析当前目录中的 Cairo 项目并将其结果导出到文件

amarna . -o out.sarif

分析单个文件 deleverage.cairo 并将结果导出到文件

amarna deleverage.cairo -o deleverage.sarif

分析单个文件 code.cairo 并打印结果摘要

amarna code.cairo -s

解析 Cairo 文件并将恢复的 AST 输出为 png

amarna file.cairo -png

使用未使用导入规则分析 Cairo 文件

amarna file.cairo --rules=unused-imports

使用所有规则(除算术加法规则外)分析 Cairo 文件

amarna file.cairo --except-rules=arithmetic-add

完整的帮助菜单是

usage: amarna [-h] [-p] [-o OUTPUT] [-s] [-png] [-rules RULES] [-exclude-rules EXCLUDE_RULES] [-show-rules] [-disable-inline] -f

Amarna is a static-analyzer for the Cairo programming language.

positional arguments:
  -f                    the name of the .cairo file or directory with .cairo files to analyze

optional arguments:
  -h, --help            show this help message and exit
  -p, --print           print output
  -o OUTPUT, --output OUTPUT
                        file to write the output results in sarif format
  -s, -summary, --summary
                        output summary
  -png, --png           save a png with the AST of a file
  -rules RULES, --rules RULES
                        Only run this set of rules. Enter rule names comma-separated, e.g., dead-store,unused-arguments
  -exclude-rules EXCLUDE_RULES, --exclude-rules EXCLUDE_RULES
                        Exclude these rules from the analysis. Enter rule names comma-separated, e.g., dead-store,unused-arguments
  -show-rules, --show-rules
                        Show all supported rules and descriptions.
  -disable-inline, --disable-inline
                        Disable rules with inline comments. The comments should be the first line and of the form: # amarna: disable=rulename1,rulename2

SARIF 文件格式

SARIF 文件格式是静态分析工具的标准格式,可以在 vscode 中通过 官方扩展 查看。

安装

pip install amarna

规则如何工作

静态分析规则可以是

  • 本地规则,独立分析每个文件。
  • 收集器规则,独立分析每个文件并收集用于后续处理规则的数据。
  • 后处理规则,在分析所有文件之后运行,可以使用收集器规则收集的数据。

这些示例包括

  • 本地规则:在一个文件中查找所有算术运算
  • 收集器规则:收集所有声明的函数和调用的函数
  • 后处理规则:使用收集的数据查找未使用的函数,即已声明但从未调用的函数。

规则允许列表、拒绝列表和内联注释

规则名称

使用以下命令获取当前实现规则的名称

 amarna --show-rules

规则允许列表

使用定义的规则集运行 amarna

 amarna --rules=rule1,rule2 .

以下命令将仅运行 unused-imports 规则并打印摘要结果

 amarna --rules=unused-imports . -s

规则拒绝列表

使用除定义的规则集之外的所有规则运行 amarna

 amarna --exclude-rules=arithmetic-add,arithmetic-sub . -s

内联规则禁用注释

您可以将 Cairo 文件的第一行更改为禁用该文件上的特定规则集。例如,向 file.cairo 的第一行添加以下行

// amarna: disable=arithmetic-div,arithmetic-sub,arithmetic-mul,arithmetic-add

然后使用运行 amarna

amarna directory/ --disable-inline -s

将不会向 file.cairo 文件报告任何算术规则。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

amarna-0.1.5.tar.gz (23.1 kB 查看散列

上传时间:

构建分发

amarna-0.1.5-py3-none-any.whl (47.8 kB 查看散列

上传于 Python 3

支持者