SreedattaG/yara-performance-benchmark
GitHub: SreedattaG/yara-performance-benchmark
YARA 规则性能基准测试工具,自动化对比正则表达式与十六进制字符串匹配在扫描大量文件时的计算效率差异。
Stars: 0 | Forks: 0
# YARA 基准测试
论文《*评估 YARA 的计算效率:正则表达式与十六进制字符串匹配性能对比*》的代码。
## 准备工作
- Python 3.9 或更高版本
- pip(随 Python 一起提供)
## 环境设置
在此文件夹中打开终端,然后安装这两个依赖项:
```
pip install -r requirements.txt
```
这会拉取 `yara-python`(YARA 引擎封装)和 `psutil`(用于在扫描期间读取 CPU 和内存数据)。你也可以选择安装 `scipy`,以获得正确的 t 分布置信区间和 Welch's t 检验——如果没有它,脚本依然可以运行,但会发出警告。
```
pip install scipy
```
## 运行实验
**第 1 步 —— 生成测试文件**
```
python generate_dataset.py
or
python3 generate_dataset.py
```
创建一个包含 1,000 个合成文件的 `dataset/` 文件夹:包含模拟的 PE 可执行文件、shell 脚本、ZIP、PDF、C2 风格的配置文件以及纯文本文件的混合集。大约需要 5 秒钟。
**第 2 步 —— 运行基准测试**
```
python benchmark.py
or
python3 benchmark.py
```
每种规则类型运行 100 次试验(总共 300 次扫描),在开始记录之前会丢弃 5 次预热运行。进度将打印在屏幕上。根据您的硬件配置,预计需要 5–15 分钟。
## 结果
运行完成后,打开 `results/` 文件夹:
- **`summary_stats.csv`** — 每种规则类型的扫描时间平均值、标准差、95% 置信区间、最小值、最大值和中位数,以及 CPU 和内存的峰值。这是论文中数据表格和柱状图的数据来源。
- **`raw_trials.csv`** — 每次单独的试验记录。可用于绘制散点图或检查耗时分布是否合理。
- **`ttest_results.csv`** — 每对规则类型的 Welch's t 检验输出。只有在安装了 scipy 的情况下才会生成。
- **`run_info.txt`** — 运行时记录的硬件规格和时间戳,用于论文的方法(Methods)部分。
### 构建图表
1. 在 Google Sheets 或 Excel 中打开 `summary_stats.csv`
2. 选择 `rule_type` 和 `mean_time_ms` → 插入柱状图(图 1)。使用 `ci95_time_ms` 添加误差线。
3. 使用 `mean_cpu_pct` 重复上述操作以生成 CPU 利用率图表(图 2)
4. 打开 `raw_trials.csv`,按规则类型进行筛选,并在所有 100 次试验中绘制折线图以展示随时间变化的一致性(图 3)
## 文件结构
```
├── benchmark.py — main benchmark script (run second)
├── generate_dataset.py — creates the test files (run first)
├── requirements.txt
├── README.md
├── rules/
│ ├── hex_rule.yar
│ ├── regex_rule.yar
│ └── text_rule.yar
├── dataset/ — created by generate_dataset.py
└── results/ — created by benchmark.py
```
## 复现此实验
数据集生成器使用了一个固定的种子(`SEED = 42`),因此 `generate_dataset.py` 将始终以相同的顺序生成相同的 1,000 个文件。克隆仓库,依次运行这两个脚本,您就能获得与原始运行完全一致的实验条件。
标签:DAST, Python, YARA, 云资产可视化, 代码示例, 性能基准测试, 恶意软件分析, 数据分析, 无后门, 逆向工具