2025 · 会议论文

TypeForge:为去符号二进制合成并选择最适配的复合数据类型

TypeForge: Synthesizing and Selecting Best-Fit Composite Data Types for Stripped Binaries

TypeForge 从去符号二进制中恢复复合数据类型,包括结构体布局、联合体以及指针引用和嵌套关系。它在 Ghidra 反编译器推断出的变量之上构建全程序类型流图,传播成员偏移与大小,切断由类型转换和联合体引起的冲突边,并合成候选类型声明。大语言模型只在这些静态合成的候选中进行选择:每个候选通过反编译器的重定类型接口应用,再以双败淘汰赛比较所得伪代码的可读性。作者在 OSPREY 的 coreutils 数据集上报告复合类型识别 F1 为 81.7%、布局恢复 F1 为 88.2%、关系恢复 F1 为 72.1%。

研究范围与局限

恢复的是成员偏移、大小和类型间关系,而非原始类型名或成员名;由于名称不可得,关系是否正确以布局匹配判定。主要评测使用 OSPREY 的数据集,包括 GNU coreutils 与 Howard 数据集中较大的程序,涵盖超过 10,000 个函数和 11,000 个复合类型变量,优化级别为 O0–O3,真实标签取自调试信息;论文未按架构分别报告结果。基线比较中,OSPREY 的结果由其作者提供,运行时间为估算值,ReSym 的数据取自其已发表结果,因此并非所有基线均经重新运行。保守地删除冲突边可能遗漏有效成员;合并或展平成员的编译器优化会降低较高优化级别下的准确率。约 75% 的运行时间用于大语言模型选择阶段;默认模型为 GPT-4o mini,每轮比较执行三次。下游可读性与漏洞检测示例属于案例研究,不能证明语义等价。

与本合集的关联

补充以静态分析恢复复合类型与结构体布局、进而提升反编译结果可读性的方法,与基于学习的变量命名、数据结构符号恢复及大语言模型改写反编译输出的研究互补。

发表与复核详情

发表载体
IEEE S&P 2025
发表状态
会议论文
出版/提交日期
2025 年(具体日期未核实)
日期依据
IEEE Xplore 与出版方提交的 Crossref 元数据确认出版年份为 2025。两者均列出 2025 年 5 月 12 日,即 5 月 12—15 日研讨会的首日;IEEE 于 2025 年 6 月 16 日将文章加入 Xplore。本条目不将这两个日期视为已核实的出版日。
DOI
10.1109/SP61157.2025.00193

IEEE Xplore 与 Crossref 的标题、六位作者顺序和 DOI 一致;按标题检索 arXiv 未发现预印本。两者均列出按文章计的页码 1–18,而仓库提供的 BibTeX 为 2847–2864;引用信息不记录这两种页码范围。作者托管的 PDF 是最终论文,包含 S&P 元评审附录。所审阅的 2026-03-17 快照在审阅时与 dev 分支相同,是在 Ghidra 11.0.3 上测试的 Ghidra 扩展;其 Python 3.13 选择脚本固定 LangChain 0.3.23 与 openai 1.75.0,README 示例使用 gpt-4.1-mini,而非论文中的 GPT-4o mini。提取真实标签需要 DWARF 4 调试信息。LICENSE 文件采用 BSD 3-Clause 风格条款,另加在学术工作中须引用论文的要求;README 徽章标为 BSD 3-Clause,GitHub 则报告 NOASSERTION,因此本条目不认定单一许可证。Evaluation.md 链接的是 LLM 选择阶段之前、由早期版本生成的数据,说明投稿后于 2025 年 6 月修复了影响类型识别的缺陷,并且未公开变量对齐评估脚本,因此仅凭发布内容无法重新计算论文指标。本次未运行代码、调用模型或下载数据。

来源复核于

本合集仅做来源复核,未重新运行论文实验。请通过原始论文或 BibTeX 引用原作者。

一手来源

  1. https://ieeexplore.ieee.org/document/11023499
  2. https://api.crossref.org/works/10.1109/SP61157.2025.00193
  3. https://noobone123.github.io/papers/typeforge-sp25.pdf
  4. README.md GitHub · noobone123/TypeForge · 修订 0f2ceff
  5. LICENSE GitHub · noobone123/TypeForge · 修订 0f2ceff
  6. Evaluation.md GitHub · noobone123/TypeForge · 修订 0f2ceff
  7. scripts/README.md GitHub · noobone123/TypeForge · 修订 0f2ceff
  8. scripts/requirements.txt GitHub · noobone123/TypeForge · 修订 0f2ceff
  9. scripts/judge/README.md GitHub · noobone123/TypeForge · 修订 0f2ceff
  10. scripts/judge/llm.py GitHub · noobone123/TypeForge · 修订 0f2ceff