# SLISE_dev
**Repository Path**: stdin2/slise_dev
## Basic Information
- **Project Name**: SLISE_dev
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-17
- **Last Updated**: 2026-10-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SliSE
### 面向有限验证预算的智能合约重入漏洞检测
**优先验证高风险候选,让符号执行预算用在关键位置。**
`Solidity` · `Static Analysis` · `Symbolic Execution` · `Adaptive Budget`
[方法框架](#方法框架) / [快速开始](#快速开始) / [实验复现](#实验复现) / [评估指标](#评估指标) / [项目结构](#项目结构)
---
复杂智能合约会产生大量静态告警,逐一验证却需要高昂的时间和内存开销。本项目在 **SliSE 重入检测复现流程**上,加入候选风险排序与自适应预算分配:根据代码特征和告警证据,决定**先验证谁、验证多少个**,再由符号执行完成漏洞验证。
静态告警 → 候选评分 → 优先级排序 → 预算决策 → Top-K 符号验证
## 核心能力
| 候选排序 | 预算分配 | 异常恢复 | 实验评估 |
| :--- | :--- | :--- | :--- |
| 融合局部风险模式与静态告警,优先验证高分候选 | 支持固定、启发式与学习式预算 | 块级验证发生内存异常时尝试整合约回退 | 同时记录检测覆盖、命中排名、验证开销与失败终态 |
## 方法框架
### 01 · 风险排序:先验证谁
候选块评分融合代码本身的风险信号和相关静态告警:
```text
S(c) = S_feat(c) + S_warn(c)
```
- **代码特征**:价值转移、低级调用、`delegatecall`、外部调用后的状态写入,以及函数与合约复杂度。
- **告警证据**:告警类型、影响等级、置信度和源码行号距离。
- **排序规则**:按总分降序排列,再结合告警距离与稳定次序处理同分候选;局部防御模式仅作为弱抑制信号。
实现入口:[priority_ranker.py](SliSE_tool/priority_ranker.py)。框架图中的告警评分分支对应 `S_warn`。
### 02 · 预算决策:验证多少个
从告警数量、候选覆盖、头部得分差、分数分布及合约规模构建特征快照,为当前合约选择验证深度。
| 策略 | 预算 K | 决策依据 |
| :--- | :--- | :--- |
| **固定预算** | 手动指定,例如 3 / 5 / 10 | 为不同验证深度建立对照 |
| **启发式预算** | 3 / 5 / 10 | 排序明确时压缩预算,不确定或复杂样本扩大预算 |
| **学习式预算** | 3 / 10 | 从历史固定预算结果学习小预算或保守预算的选择 |
预算学习器预测验证深度,漏洞判断由符号执行阶段完成。学习式推理异常可配置为启发式回退、固定 K=10 或显式报错。
实现入口:[adaptive_budget.py](SliSE_tool/adaptive_budget.py) · [训练流水线](pipeline/training/)。
### 03 · 符号验证:跟踪命中与恢复
按照候选排名执行 Top-K 验证,并记录首次命中位置与耗时。块级验证遇到 `MemoryError` 时尝试 whole-contract 回退,分别记录:
| `recovered` | `no_hit` | `failed` |
| :--- | :--- | :--- |
| 回退后恢复命中 | 回退完成但未命中 | 回退仍无法完成 |
实现入口:[SliSE.py](SliSE_tool/SliSE.py)。
## 快速开始
以下命令在仓库根目录执行,以 Windows PowerShell 为例。
**1. 创建环境并安装依赖**
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
```
**2. 检查 Solidity 编译器**
```powershell
solc --version
```
当前复现流程使用 `solc 0.4.23`,运行器会将本机存在的 `$HOME\.solc-select\artifacts\solc-0.4.23` 加入分析子进程的 `PATH`。请先准备可用的对应版本。
**3. 运行候选排序对照实验**
```powershell
python run_experiment.py --mode priority
```
默认对 DB2、DB3 重入标注子集分别运行 baseline 与 Top-3 排序策略,生成实验记录、评估结果与对照报告。
> 完整分析依赖 Slither、Z3 和 Solidity 编译器。依赖版本见 [requirements.txt](requirements.txt);旧版分析组件在不同 Python 和操作系统环境中的兼容性需实际验证。
## 实验复现
| 模式 | 实验内容 | 主要产物 |
| :--- | :--- | :--- |
| `priority` | Baseline 与固定 Top-K 对照,默认 K=3 | 排序对照与评估报告 |
| `priority-sweep` | 固定预算扫描,默认 K=5、10 | 预算与效果权衡报告 |
| `adaptive` | 启发式预算分配 | 预算特征、策略报告与异常诊断 |
| `learned` | 构建训练表、训练预算模型并在线评估 | 模型、训练指标与学习式预算报告 |
| `full` | DB1、DB2、DB3 基础分析 | 各数据集原始分析结果 |
完整预算对照:按顺序运行四个阶段
学习式预算需要额外安装机器学习依赖:
```powershell
python -m pip install -r requirements-ml.txt
```
为各阶段指定同一组目录,使固定预算结果可用于后续对照与训练:
```powershell
$experimentPaths = @(
'--output-root', 'experiments_runtime_fallback_full',
'--evaluation-root', 'evaluation_runtime_fallback_full',
'--report-root', 'reports_runtime_fallback_full'
)
python run_experiment.py --mode priority @experimentPaths
python run_experiment.py --mode priority-sweep --topk-list 5 10 @experimentPaths
python run_experiment.py --mode adaptive @experimentPaths
python run_experiment.py --mode learned @experimentPaths
```
`priority-sweep` 需要已有 baseline 实验和评估结果;`learned` 需要固定预算记录及自适应实验数据。默认情况下,前两个模式使用 `experiments`、`evaluation`、`reports`,后两个使用带 `_runtime_fallback_full` 的目录,因此连续复现时应显式对齐路径。
单合约、批量分析与断点续跑
单合约分析,将路径替换为实际 Solidity 文件:
```powershell
python run_slise.py -s path/to/contract.sol -vt reentrancy
```
目录批量分析:
```powershell
python batch_analyze.py --input-dir Datasets/DB2/Reentrancy_label --output-dir tmp/DB2
```
全量流程小规模试跑,每个数据集最多处理 20 个文件:
```powershell
python run_experiment.py --mode full --max-files-per-dataset 20
```
完整基础分析与续跑:
```powershell
python run_experiment.py --mode full --resume
```
使用上一节定义的目录继续自适应实验:
```powershell
python run_experiment.py --mode adaptive --resume @experimentPaths
```
查看全部实验参数:
```powershell
python run_experiment.py --help
```
## 评估指标
| 维度 | 指标 | 关注的问题 |
| :--- | :--- | :--- |
| 检测覆盖 | Recall | 当前评估口径下检出了多少漏洞样本? |
| 排序效果 | Recall@K、First-hit rank | 有效命中是否出现在验证序列前部? |
| 验证效率 | Time-to-first-hit、Stage-II calls | 首次命中需要多久、消耗多少验证调用? |
| 运行鲁棒性 | Fallback outcome、Runtime failure | 异常后能否恢复,失败是否被单独统计? |
按上述统一目录流程运行后,主要结果位于:
```text
reports_runtime_fallback_full/
├── aggregate/comparison.md # 策略对照
├── aggregate/comparison_budget_tradeoff.md # 预算与效果权衡
├── adaptive/adaptive_budget_report.md # 启发式预算分析
├── adaptive/budget_feature_table.csv # 预算特征明细
├── learned/learned_budget_report.md # 学习式预算评估
└── diagnostics/db2_memoryerror_analysis.md # 内存异常诊断
```
结果目录在运行时生成,默认不纳入版本控制。比较结果时,应保持数据子集、验证预算、回退策略与评估口径一致,并区分训练表现与独立评估;单次耗时不能直接代表稳定加速效果。
## 项目结构
```text
SliSE/
├── SliSE_tool/ # 检测器、候选排序与预算策略
├── Datasets/ # DB1 / DB2 / DB3 输入数据
├── pipeline/
│ ├── evaluation/ # 结果评估与实验比较
│ ├── reporting/ # 汇总、预算与诊断报告
│ └── training/ # 训练表构建与模型训练
├── tests/ # 回归测试
├── docs/assets/ # 方法框架图
├── run_experiment.py # 统一实验入口
├── run_slise.py # 单合约分析入口
├── batch_analyze.py # 批量分析入口
├── requirements.txt # 基础分析依赖
└── requirements-ml.txt # 学习式预算依赖
```
开发验证
安装相应依赖后运行:
```powershell
python -m unittest discover -s tests -p "test_*.py"
```
运行器优先使用仓库内 `.venv`,不存在时使用当前 Python。回归检查覆盖排序、预算分配与评估等逻辑,真实数据上的符号执行仍需单独验证。
---
本仓库基于 SliSE 开展复现与验证调度改进。底层工具的历史说明见 [SliSE Tool](SliSE_tool/README.md),当前实验入口及依赖以仓库根目录为准。