# ICEPRE：基于数据驱动混合符号执行的工控协议逆向工程

> 在二进制协议解析器中沿具体报文引导的路径分析，再进行符号化重放，提取字节级数据流以推断报文字段边界。它依据保持原值的运算和相似处理轨迹合并字节。作者在四种公开工控协议、每组 1,000 条报文的数据集上，报告平均边界 F1 分数为 0.76、字段完美分割率为 0.67。

- 作者：Yibo Qu; Dongliang Fang; Zhen Wang; Jiaxing Cheng; Shuaizong Si; Yongle Chen; Limin Sun
- 原标题：ICEPRE: ICS Protocol Reverse Engineering via Data-Driven Concolic Execution
- 发表载体：Proceedings of the ACM on Software Engineering (ISSTA 2025)
- 发表状态：期刊论文
- 出版／提交日期：2025 年 6 月 22 日
- 日期依据：ACM 文章页面与出版方提交的 Crossref 元数据均将出版日期列为 2025-06-22；本条目不以 ISSTA 报告日期替代该期刊出版日期。
- DOI：10.1145/3728982
- 来源复核于：2026-10-17
- 收录于：2026-10-17
- 原始论文：<https://dl.acm.org/doi/10.1145/3728982>
- PDF：<https://dl.acm.org/doi/pdf/10.1145/3728982>
- 代码：<https://github.com/QYbPtqyb/ICEPRE>
- BibTeX：<https://awesomerea.org/papers/citations/paper-icepre.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-icepre/>
- 记录 JSON：<https://awesomerea.org/papers/paper-icepre/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-icepre/index.md)

## 研究范围与局限

恢复的是报文语法，并非字段语义、协议状态机或端点等价性。方法需要二进制、加载配置，以及正确识别的初始化、输入和解析函数；尤其在缺少符号时，仍需人工筛选。不支持加密协议和位级字段；被忽略或仅被复制的字节可能遭到错误合并。完美分割率衡量两端边界均正确的字段。量化实验使用四种公开协议的 50 条与 1,000 条报文集合；另行开展的专有协议研究覆盖五个固件目标中的三种协议，在三台设备上进行交互检查，并由人工建立真实标签。这些检查不能证明完整设备行为。

## 与本合集的关联

补充借助固件与混合符号分析推断协议格式的方法，与实时服务端插桩和仅基于流量的字段推断互补。

## 发表与复核说明

出版方将文章编号列为 ISSTA105，并以 CC BY 4.0 授权论文；其数据可用性章节链接了仓库。所审阅的 2025-04-16 代码快照未声明项目级许可证。Python 3 依赖使用兼容版本范围，包括 angr~=9.2.100、Netzob~=2.0.0 与 scapy~=2.5.0；论文说明使用 Ghidra 11.0.3 进行函数分析。仓库包含公开协议配置和一份 Modbus 捕获数据，但没有固件映像；目标二进制与库需要另行提供。论文指定轨迹相似度阈值为 0.9，发布的 InferSyntax.py 则在百分制上使用 99。批量评估器将异常轨迹排除在汇总指标之外。

## 一手来源

1. <https://dl.acm.org/doi/10.1145/3728982>
2. <https://api.crossref.org/works/10.1145/3728982>
3. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/README.md>
4. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/requirements.txt>
5. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/ICEPRE.py>
6. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/Ctracer.py>
7. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/InferSyntax.py>
8. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/config/modbus_config.yaml>
9. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/config/enip_config.yaml>
10. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/config/iec104_config.yaml>
11. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/config/s7comm_config.yaml>
12. <https://github.com/QYbPtqyb/ICEPRE/blob/506bdf1f970460d0eaa52f67ae9ae338795ef48b/evaluation/syntax_evaluation.py>

## 关于此条目

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
