2024 · 会议论文

D-Helix:基于符号差分的通用反编译器测试框架

D-Helix: A Generic Decompiler Testing Framework Using Symbolic Differentiation

在无需源码的前提下,逐函数测试反编译器对二进制的处理。RECOMPILER 修复反编译所得的 C 代码,使单个函数能够重新编译;SYMDIFF 借助打过补丁的 angr 与 PROMPT 符号执行器,比较原始二进制函数与重新编译后的反编译函数的符号模型;TUNER 通过切换反编译器的启发式规则,定位造成偏差的规则,并在部分情况下予以规避。作者在 Ghidra 10.0 与 angr 9.2.30 上,使用来自 coreutils、util-linux 及六个热门 GitHub C 项目的 2,004 个二进制与目标文件,得到 93K 个反编译函数;报告发现 4,515 个反编译错误的函数,复现 8 个已知缺陷,发现 17 个此前未知的缺陷,并自动修复 7 个缺陷。

研究范围与局限

仅测试了 Ghidra 与 angr,未测试 Hex-Rays、Binary Ninja、RetDec 或基于大语言模型的反编译器;作者估计,若要支持中间表示尚未受支持的反编译器,至少需要 40 天的符号执行引擎开发工作。结果是对作者所选 2,004 个 x86-64 Linux 输入的函数级符号等价检查,这些输入由 GCC 11.1.0 与 Clang 16.0.0 按各项目默认优化选项构建,并排除了大于 30 MiB 的二进制。覆盖并不完整:RECOMPILER 能重新编译 Ghidra 反编译函数的 72.4% 与 angr 反编译函数的 45.0%,SYMDIFF 又分别成功分析其中的 91.3% 与 93.9%。符号执行限制循环次数,默认超时为两分钟,将全局变量视为常量,且不解析浮点约束;精度上的取舍会导致误报,误报情况基于每个反编译器 100 个函数的样本测量。TUNER 在其检查的 443 处偏差中自动修复了 72 处。函数通过检查并不能证明整个程序正确。

与本合集的关联

补充直接基于二进制的反编译器自动正确性测试,与 DecompileBench 等输出基准及反编译保真度的定性研究互补。

发表与复核详情

发表载体
USENIX Security 2024
发表状态
会议论文
出版/提交日期
2024 年 8 月
日期依据
采用 USENIX 官方 BibTeX(month = aug)及第 33 届 USENIX Security Symposium(2024 年 8 月 14–16 日)最终版 PDF 封面所载的出版月份,不推定具体出版日。

未核实论文 DOI 或 arXiv 标识符;本条目采用经审阅的 USENIX Security 2024 报告页面与 usenixsecurity24-zou.pdf 配对规则。USENIX BibTeX 给出第 33 届 USENIX Security Symposium、页码 397–414、出版方 USENIX Association 及八月份;报告页面另链接附录 PDF、幻灯片与预发表版 PDF。论文印有 github.com/purseclab/Dhelix,GitHub API 报告该仓库不存在;代码链接采用 purseclab/D-helix,其 README 引用了本论文。在所审阅的提交 fda23ef(2024-09-12)中,仓库声明 BSD-3-Clause 许可证。README 为 P-code 与 VEX 两种变体固定 angr、claripy 与 pyvex 的提交,提供针对 angr、claripy、PROMPT(使用 clang 3.8 构建)及 Ghidra 提交 15d22e8 的补丁,并使用 Z3 4.9.1。dataset 目录包含 2,004 个已编译的输入文件,这些文件仍受其上游项目许可证约束。本次仅阅读源码与文档文件,未下载二进制,也未运行代码或实验。

来源复核于

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

报告条目过时 建议修正翻译

一手来源

  1. https://www.usenix.org/conference/usenixsecurity24/presentation/zou
  2. https://www.usenix.org/system/files/usenixsecurity24-zou.pdf
  3. README.md GitHub · purseclab/D-helix · 修订 fda23ef
  4. LICENSE GitHub · purseclab/D-helix · 修订 fda23ef
  5. dataset GitHub · purseclab/D-helix · 修订 fda23ef