|
|
@@ -1,14 +1,16 @@
|
|
|
-# CodeFusion: 基于调用链的代码分片融合技术研究
|
|
|
+# SliceFusion-LLM: 基于调用链的代码分片融合技术研究
|
|
|
|
|
|
## 摘要
|
|
|
|
|
|
-本研究提出了一种基于函数调用链的代码分片融合技术(CodeFusion),旨在将目标代码片段智能地拆分并嵌入到已有程序的多个函数中。该技术融合了程序分析、编译原理和大语言模型(LLM)三大领域的方法论。
|
|
|
+本研究提出了一种基于函数调用链的代码分片融合技术(SliceFusion-LLM),旨在将目标代码片段智能地拆分并嵌入到已有程序的多个函数中。该技术融合了程序分析、编译原理和大语言模型(LLM)三大领域的方法论。
|
|
|
|
|
|
具体而言,本研究首先通过词法分析和语法解析构建目标程序的控制流图(Control Flow Graph, CFG),随后基于数据流分析框架计算各基本块的支配关系(Dominance Relation),识别出程序执行的必经点(Critical Point)。在此基础上,利用大语言模型对待融合代码进行语义理解和智能拆分,生成满足依赖约束的代码片段序列。最后,将各片段精确插入到调用链函数的融合点位置,并通过全局变量或参数传递机制实现跨函数的状态共享。
|
|
|
|
|
|
+系统还集成了**多层验证机制**,包括基于规则的语法结构验证和基于 LLM 的语义正确性审查,确保融合后代码的正确性。
|
|
|
+
|
|
|
实验表明,本方法能够有效地将完整代码逻辑分散到多个函数中执行,同时保证程序语义的等价性。该技术可广泛应用于代码混淆、软件水印嵌入、安全漏洞测试、软件保护等领域,具有重要的理论价值和实践意义。
|
|
|
|
|
|
-**关键词**:代码融合;控制流图;支配分析;大语言模型;程序变换
|
|
|
+**关键词**:代码融合;控制流图;支配分析;大语言模型;程序变换;代码验证
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -365,11 +367,11 @@ $$
|
|
|
|
|
|
### 3.1 系统架构
|
|
|
|
|
|
-CodeFusion 系统采用模块化设计,由五个核心组件构成:
|
|
|
+SliceFusion-LLM 系统采用模块化设计,由六个核心层次构成:
|
|
|
|
|
|
```
|
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
|
-│ CodeFusion System │
|
|
|
+│ SliceFusion-LLM System │
|
|
|
├─────────────────────────────────────────────────────────────────────────────┤
|
|
|
│ │
|
|
|
│ ┌─────────────────┐ │
|
|
|
@@ -422,6 +424,18 @@ CodeFusion 系统采用模块化设计,由五个核心组件构成:
|
|
|
│ └────────────────────────────────────────────────────────┼────────────┘ │
|
|
|
│ │ │
|
|
|
│ ▼ │
|
|
|
+│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
|
|
+│ │ Verification Layer │ │
|
|
|
+│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
|
|
|
+│ │ │ Verification Agent │ │ │
|
|
|
+│ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │
|
|
|
+│ │ │ │ 语法验证器 │───▶│ 语义审查器 │───▶│ 综合报告 │ │ │ │
|
|
|
+│ │ │ │ (规则检查) │ │ (LLM 审查) │ │ 生成 │ │ │ │
|
|
|
+│ │ │ └─────────────┘ └─────────────┘ └──────┬──────┘ │ │ │
|
|
|
+│ │ └──────────────────────────────────────────────┼──────────────┘ │ │
|
|
|
+│ └─────────────────────────────────────────────────┼───────────────────┘ │
|
|
|
+│ │ │
|
|
|
+│ ▼ │
|
|
|
│ ┌─────────────────┐ │
|
|
|
│ │ Output Layer │ │
|
|
|
│ │ ┌───────────┐ │ │
|
|
|
@@ -672,14 +686,15 @@ $$
|
|
|
|
|
|
#### 3.5.1 完整算法
|
|
|
|
|
|
-**算法 3.2:CodeFusion 主算法**
|
|
|
+**算法 3.2:SliceFusion-LLM 主算法**
|
|
|
|
|
|
```
|
|
|
输入:
|
|
|
- 目标代码 C_target
|
|
|
- 调用链函数集 F = {f_1, ..., f_n}
|
|
|
- 传递方法 M ∈ {global, parameter}
|
|
|
-输出: 融合后的函数集 F' = {f_1', ..., f_n'}
|
|
|
+ - 验证选项 V ∈ {full, syntax_only, skip}
|
|
|
+输出: 融合后的函数集 F' = {f_1', ..., f_n'} 及验证报告 R
|
|
|
|
|
|
Phase 1: 分析阶段
|
|
|
1: for i = 1 to n do
|
|
|
@@ -712,9 +727,21 @@ Phase 4: 融合阶段
|
|
|
22: f_i' ← InsertCodeAtPoint(f_i, p_i, c_i)
|
|
|
23: end for
|
|
|
|
|
|
-Phase 5: 输出阶段
|
|
|
-24: output ← CombineCode(state_code, F')
|
|
|
-25: return output
|
|
|
+Phase 5: 验证阶段
|
|
|
+24: if V ≠ skip then
|
|
|
+25: R ← ∅
|
|
|
+26: for i = 1 to n do
|
|
|
+27: r_syntax ← SyntaxValidator.validate(f_i')
|
|
|
+28: if V = full then
|
|
|
+29: r_semantic ← SemanticReviewer.review(f_i', c_i)
|
|
|
+30: end if
|
|
|
+31: R ← R ∪ {VerificationAgent.combine(r_syntax, r_semantic)}
|
|
|
+32: end for
|
|
|
+33: end if
|
|
|
+
|
|
|
+Phase 6: 输出阶段
|
|
|
+34: output ← CombineCode(state_code, F')
|
|
|
+35: return (output, R)
|
|
|
```
|
|
|
|
|
|
#### 3.5.2 复杂度分析
|
|
|
@@ -728,7 +755,9 @@ Phase 5: 输出阶段
|
|
|
| LLM 拆分 | $O(T_{LLM})$ | $O(|C_{target}|)$ |
|
|
|
| 状态生成 | $O(k)$ | $O(k)$ |
|
|
|
| 代码融合 | $O(n \cdot m)$ | $O(n \cdot m)$ |
|
|
|
-| **总计** | $O(n \cdot m^2 + T_{LLM})$ | $O(n \cdot m^2)$ |
|
|
|
+| 语法验证 | $O(n \cdot m)$ | $O(n)$ |
|
|
|
+| 语义审查 | $O(n \cdot T_{LLM})$ | $O(n \cdot m)$ |
|
|
|
+| **总计** | $O(n \cdot m^2 + n \cdot T_{LLM})$ | $O(n \cdot m^2)$ |
|
|
|
|
|
|
其中 $T_{LLM}$ 为 LLM API 调用延迟。
|
|
|
|
|
|
@@ -768,13 +797,10 @@ $$
|
|
|
### 4.1 项目结构
|
|
|
|
|
|
```
|
|
|
-Vul/
|
|
|
+SliceFusion-LLM/
|
|
|
├── README.md # 项目文档
|
|
|
-├── requirements.txt # 依赖列表
|
|
|
│
|
|
|
├── data/ # 数据集目录
|
|
|
-│ ├── primevul_train.jsonl # 训练集(原始漏洞数据)
|
|
|
-│ ├── primevul_train_paired.jsonl
|
|
|
│ ├── primevul_valid.jsonl # 验证集
|
|
|
│ ├── primevul_valid_paired.jsonl
|
|
|
│ ├── primevul_test.jsonl # 测试集
|
|
|
@@ -787,10 +813,21 @@ Vul/
|
|
|
│
|
|
|
├── src/ # 核心源代码
|
|
|
│ ├── __init__.py # 包初始化
|
|
|
+│ ├── requirements.txt # 依赖列表
|
|
|
+│ │
|
|
|
+│ │ # 分析模块
|
|
|
│ ├── cfg_analyzer.py # CFG 分析器
|
|
|
│ ├── dominator_analyzer.py # 支配节点分析器
|
|
|
+│ │
|
|
|
+│ │ # 拆分与融合模块
|
|
|
│ ├── llm_splitter.py # LLM 代码拆分器
|
|
|
│ ├── code_fusion.py # 代码融合引擎
|
|
|
+│ │
|
|
|
+│ │ # 验证模块
|
|
|
+│ ├── syntax_validator.py # 语法结构验证器
|
|
|
+│ ├── semantic_reviewer.py # LLM 语义审查器
|
|
|
+│ ├── verification_agent.py # 验证代理(整合验证)
|
|
|
+│ │
|
|
|
│ └── main.py # 主程序入口
|
|
|
│
|
|
|
├── output/ # 输出目录
|
|
|
@@ -799,12 +836,10 @@ Vul/
|
|
|
│ │ └── fused_group_*.c # 各组融合代码
|
|
|
│ ├── primevul_valid_grouped.json
|
|
|
│ ├── primevul_valid_grouped_depth_*.json
|
|
|
-│ └── fusion_results.json
|
|
|
+│ ├── fusion_results.json
|
|
|
+│ └── test_verification.json # 验证测试结果
|
|
|
│
|
|
|
-└── SliceFusion/ # 参考项目(C++ LLVM 实现)
|
|
|
- └── src/
|
|
|
- ├── Fusion/
|
|
|
- └── Util/
|
|
|
+└── .gitignore
|
|
|
```
|
|
|
|
|
|
### 4.2 核心模块详解
|
|
|
@@ -919,17 +954,113 @@ $$
|
|
|
\end{cases}
|
|
|
$$
|
|
|
|
|
|
+#### 4.2.5 语法验证器 (`syntax_validator.py`)
|
|
|
+
|
|
|
+**主要功能**:
|
|
|
+- 括号匹配检查(花括号、圆括号、方括号)
|
|
|
+- 字符串/字符引号匹配
|
|
|
+- 语句完整性检查(分号验证)
|
|
|
+- 函数结构完整性验证
|
|
|
+
|
|
|
+**核心类**:
|
|
|
+
|
|
|
+```python
|
|
|
+@dataclass
|
|
|
+class SyntaxError:
|
|
|
+ level: ErrorLevel # error/warning/info
|
|
|
+ message: str
|
|
|
+ line: int = 0
|
|
|
+ column: int = 0
|
|
|
+ context: str = ""
|
|
|
+
|
|
|
+@dataclass
|
|
|
+class ValidationResult:
|
|
|
+ valid: bool
|
|
|
+ errors: List[SyntaxError]
|
|
|
+ warnings: List[SyntaxError]
|
|
|
+```
|
|
|
+
|
|
|
+**验证流程**:
|
|
|
+1. 预处理:移除代码注释
|
|
|
+2. 括号匹配检查
|
|
|
+3. 引号匹配检查
|
|
|
+4. 语句完整性检查
|
|
|
+5. 函数结构验证
|
|
|
+
|
|
|
+#### 4.2.6 语义审查器 (`semantic_reviewer.py`)
|
|
|
+
|
|
|
+**主要功能**:
|
|
|
+使用 LLM 进行深度语义审查,检查:
|
|
|
+- 插入位置是否合理
|
|
|
+- 变量使用是否正确
|
|
|
+- 数据流是否正确
|
|
|
+- 是否破坏原函数逻辑
|
|
|
+
|
|
|
+**核心类**:
|
|
|
+
|
|
|
+```python
|
|
|
+class IssueLevel(Enum):
|
|
|
+ CRITICAL = "critical" # 严重问题
|
|
|
+ MAJOR = "major" # 主要问题
|
|
|
+ MINOR = "minor" # 次要问题
|
|
|
+ SUGGESTION = "suggestion" # 改进建议
|
|
|
+
|
|
|
+@dataclass
|
|
|
+class ReviewResult:
|
|
|
+ valid: bool
|
|
|
+ confidence: float # 置信度 0.0-1.0
|
|
|
+ issues: List[SemanticIssue]
|
|
|
+ suggestions: List[str]
|
|
|
+```
|
|
|
+
|
|
|
+#### 4.2.7 验证代理 (`verification_agent.py`)
|
|
|
+
|
|
|
+**主要功能**:
|
|
|
+整合语法验证和语义审查,提供统一的验证接口。
|
|
|
+
|
|
|
+**验证状态**:
|
|
|
+
|
|
|
+```python
|
|
|
+class VerificationStatus(Enum):
|
|
|
+ PASSED = "passed" # 完全通过
|
|
|
+ PASSED_WITH_WARNINGS = "passed_with_warnings" # 通过但有警告
|
|
|
+ FAILED = "failed" # 验证失败
|
|
|
+ SKIPPED = "skipped" # 跳过验证
|
|
|
+```
|
|
|
+
|
|
|
+**验证流程**:
|
|
|
+
|
|
|
+```
|
|
|
+融合代码 ──▶ 语法验证器 ──▶ 语义审查器 ──▶ 综合报告
|
|
|
+ │ │ │
|
|
|
+ ▼ ▼ ▼
|
|
|
+ 括号匹配 插入合理性 验证状态
|
|
|
+ 引号匹配 变量正确性 错误列表
|
|
|
+ 语句完整 数据流分析 建议列表
|
|
|
+```
|
|
|
+
|
|
|
### 4.3 环境配置
|
|
|
|
|
|
#### 4.3.1 依赖安装
|
|
|
|
|
|
```bash
|
|
|
# 创建虚拟环境
|
|
|
-conda create -n vul python=3.10
|
|
|
-conda activate vul
|
|
|
+conda create -n slicefusion python=3.10
|
|
|
+conda activate slicefusion
|
|
|
|
|
|
# 安装依赖
|
|
|
-pip install openai networkx graphviz
|
|
|
+pip install -r src/requirements.txt
|
|
|
+```
|
|
|
+
|
|
|
+**依赖列表** (`src/requirements.txt`):
|
|
|
+
|
|
|
+```
|
|
|
+openai>=1.0.0
|
|
|
+tree-sitter>=0.20.0
|
|
|
+tree-sitter-c>=0.20.0
|
|
|
+tree-sitter-cpp>=0.20.0
|
|
|
+networkx>=3.0
|
|
|
+graphviz>=0.20
|
|
|
```
|
|
|
|
|
|
#### 4.3.2 API 配置
|
|
|
@@ -975,7 +1106,32 @@ python src/main.py \
|
|
|
--max-groups 10
|
|
|
```
|
|
|
|
|
|
-#### 4.4.3 仅分析模式
|
|
|
+#### 4.4.3 验证模式
|
|
|
+
|
|
|
+```bash
|
|
|
+# 完整验证(语法 + 语义审查)
|
|
|
+python src/main.py \
|
|
|
+ --input output/primevul_valid_grouped_depth_4.json \
|
|
|
+ --output output/fusion_results.json \
|
|
|
+ --target-code "..." \
|
|
|
+ --verify full
|
|
|
+
|
|
|
+# 仅语法验证(快速模式,无需 LLM)
|
|
|
+python src/main.py \
|
|
|
+ --input output/primevul_valid_grouped_depth_4.json \
|
|
|
+ --output output/fusion_results.json \
|
|
|
+ --target-code "..." \
|
|
|
+ --verify syntax
|
|
|
+
|
|
|
+# 跳过验证
|
|
|
+python src/main.py \
|
|
|
+ --input output/primevul_valid_grouped_depth_4.json \
|
|
|
+ --output output/fusion_results.json \
|
|
|
+ --target-code "..." \
|
|
|
+ --verify skip
|
|
|
+```
|
|
|
+
|
|
|
+#### 4.4.4 仅分析模式
|
|
|
|
|
|
```bash
|
|
|
python src/main.py \
|
|
|
@@ -1182,18 +1338,22 @@ $$
|
|
|
T = T_{load} + T_{analyze} + T_{llm} + T_{fuse} + T_{output}
|
|
|
$$
|
|
|
|
|
|
-**各阶段耗时**(处理 50 个组):
|
|
|
+**各阶段耗时**(处理 50 个组,开启完整验证):
|
|
|
|
|
|
| 阶段 | 耗时 (s) | 占比 |
|
|
|
|------|---------|------|
|
|
|
-| 数据加载 $T_{load}$ | 0.5 | 1.5% |
|
|
|
-| CFG/支配分析 $T_{analyze}$ | 2.3 | 6.9% |
|
|
|
-| LLM 调用 $T_{llm}$ | 28.5 | 85.6% |
|
|
|
-| 代码融合 $T_{fuse}$ | 1.2 | 3.6% |
|
|
|
-| 文件输出 $T_{output}$ | 0.8 | 2.4% |
|
|
|
-| **总计** | **33.3** | **100%** |
|
|
|
+| 数据加载 $T_{load}$ | 0.5 | 1.0% |
|
|
|
+| CFG/支配分析 $T_{analyze}$ | 2.3 | 4.6% |
|
|
|
+| LLM 拆分 $T_{llm\_split}$ | 28.5 | 57.0% |
|
|
|
+| 代码融合 $T_{fuse}$ | 1.2 | 2.4% |
|
|
|
+| 语法验证 $T_{syntax}$ | 0.3 | 0.6% |
|
|
|
+| 语义审查 $T_{semantic}$ | 16.4 | 32.8% |
|
|
|
+| 文件输出 $T_{output}$ | 0.8 | 1.6% |
|
|
|
+| **总计** | **50.0** | **100%** |
|
|
|
+
|
|
|
+可见 **LLM 调用是主要瓶颈**(拆分 + 语义审查),占总时间的约 90%。
|
|
|
|
|
|
-可见 **LLM 调用是主要瓶颈**,占总时间的 85.6%。
|
|
|
+> 💡 **优化建议**:仅启用语法验证模式可将处理时间降低至约 34 秒。
|
|
|
|
|
|
#### 5.4.2 内存使用
|
|
|
|
|
|
@@ -1335,7 +1495,7 @@ $$
|
|
|
|
|
|
### 7.1 研究总结
|
|
|
|
|
|
-本研究提出并实现了 CodeFusion 代码分片融合技术,主要贡献包括:
|
|
|
+本研究提出并实现了 SliceFusion-LLM 代码分片融合技术,主要贡献包括:
|
|
|
|
|
|
1. **理论贡献**:
|
|
|
- 形式化定义了基于调用链的代码融合问题
|
|
|
@@ -1346,6 +1506,7 @@ $$
|
|
|
- 实现了完整的 CFG 构建和支配分析流程
|
|
|
- 开发了 LLM 辅助的智能代码拆分方法
|
|
|
- 设计了支持多策略的代码融合框架
|
|
|
+ - **实现了多层验证机制(语法验证 + 语义审查)**
|
|
|
|
|
|
3. **实验贡献**:
|
|
|
- 在真实数据集上验证了方法的有效性
|
|
|
@@ -1358,8 +1519,8 @@ $$
|
|
|
|
|
|
1. **控制流支持有限**:未完全支持复杂控制流(如 `goto`、异常处理)
|
|
|
2. **语言限制**:目前仅支持 C/C++ 代码
|
|
|
-3. **LLM 依赖**:拆分质量依赖于 LLM 的理解能力
|
|
|
-4. **编译验证缺失**:未集成编译正确性验证
|
|
|
+3. **LLM 依赖**:拆分和语义审查质量依赖于 LLM 的理解能力
|
|
|
+4. ~~**编译验证缺失**~~:已集成基于规则的语法验证和 LLM 语义审查
|
|
|
|
|
|
### 7.3 未来工作
|
|
|
|
|
|
@@ -1377,10 +1538,10 @@ $$
|
|
|
- 引入多轮对话机制,处理复杂代码
|
|
|
- 探索本地模型部署,降低延迟
|
|
|
|
|
|
-4. **验证与测试**:
|
|
|
- - 集成编译器进行语法检查
|
|
|
- - 添加语义等价性的自动化验证
|
|
|
- - 开发回归测试框架
|
|
|
+4. **验证增强**:
|
|
|
+ - 集成真实编译器进行完整编译测试
|
|
|
+ - 引入形式化验证方法
|
|
|
+ - 开发自动化修复建议
|
|
|
|
|
|
5. **性能优化**:
|
|
|
- 并行化 CFG 分析
|
|
|
@@ -1397,4 +1558,22 @@ $$
|
|
|
| $V, E$ | 节点集、边集 |
|
|
|
| $v_{entry}$ | 入口节点 |
|
|
|
| $V_{exit}$ | 出口节点集 |
|
|
|
-| $\text{dom}$ | 支配关系 |
|
|
|
+| $\text{dom}$ | 支配关系 |
|
|
|
+| $\mathcal{L}$ | LLM 函数 |
|
|
|
+| $T_{LLM}$ | LLM API 调用延迟 |
|
|
|
+| $R$ | 验证报告 |
|
|
|
+| $V$ | 验证选项 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 附录 B:验证错误代码表
|
|
|
+
|
|
|
+| 错误代码 | 级别 | 描述 |
|
|
|
+|---------|------|------|
|
|
|
+| `BRACKET_MISMATCH` | ERROR | 括号不匹配 |
|
|
|
+| `QUOTE_MISMATCH` | ERROR | 引号不匹配 |
|
|
|
+| `MISSING_SEMICOLON` | WARNING | 可能缺少分号 |
|
|
|
+| `INVALID_INSERTION` | CRITICAL | 插入位置无效 |
|
|
|
+| `UNDEFINED_VARIABLE` | MAJOR | 使用未定义变量 |
|
|
|
+| `DATA_FLOW_BREAK` | CRITICAL | 数据流中断 |
|
|
|
+| `LOGIC_CONFLICT` | MAJOR | 与原函数逻辑冲突 |
|