2020 · 会议论文
BinRec:动态二进制提升与重编译
BinRec: Dynamic Binary Lifting and Recompilation
BinRec 依据动态执行轨迹而非静态反汇编,将可执行文件提升为 LLVM 中间表示,再将其降级为恢复出的二进制,从而可用编译器优化遍对其进行优化、加固或其他变换。追踪阶段在 S²E 中运行二进制,由 S²E 经 QEMU 将执行到的代码翻译为 LLVM 中间表示;BinRec 去除仿真插桩,将多个输入的轨迹合并为一个程序,并加入寄存器去别名、将仿真状态提升为局部变量等优化。恢复出的二进制若进入未被追踪的路径,可配置的处理程序会停止执行、回退到原始代码,或增量提升新路径。作者报告恢复了全部 SPEC CINT2006 基准程序(包括 C++ 程序),并将其用于重新优化、控制流完整性、AddressSanitizer 与 SafeStack 加固,以及对虚拟化混淆代码的部分去混淆。
研究范围与局限
原型只支持单线程的 32 位 x86 Linux ELF 二进制,也不支持自修改代码。恢复出的二进制只支持提升时观察到的控制流路径,因此在未被追踪的输入上的行为取决于所选的缺失处理程序及输入覆盖率。经由 S²E 的提升速度较慢,浮点指令在提升后的代码中以仿真方式执行;在 SPEC 基准上,恢复出的二进制运行时间的几何平均值为未优化输入的 0.98 倍、已优化输入的 1.29 倍。BinRec 不建立栈槽与变量之间的映射。去混淆案例使用的是由作者自己的虚拟化器混淆的两个小程序,而非商业混淆器。与 McSema 和 rev.ng 的比较反映的是 2020 年的版本。
与本合集的关联
补充将可执行文件动态提升为编译器中间表示、再重编译为可运行二进制的研究,与合集中恢复源码级代码而非可重建中间表示的反编译研究互补。
发表与复核详情
- 发表载体
- EuroSys 2020
- 发表状态
- 会议论文
- 出版/提交日期
- 2020 年 4 月 15 日
- 日期依据
- 采用 ACM 在 Crossref 登记的印刷出版日期;在线出版日期在元数据说明中单独记录。本条目不采用 4 月 27—30 日的会议日期。
- DOI
- 10.1145/3342195.3387550
ACM 元数据记载印刷出版于 2020-04-15,在线出版于 2020-04-17,页码为 1–16;Crossref 将标题记为“BinRec”,副标题为“dynamic binary lifting and recompilation”,十二位作者顺序如本条目所列,前三位被标注为同等贡献的共同第一作者。VUSec 托管的 PDF 是 2020-03-30 生成的 16 页 ACM 排版版本。论文给出的地址是 github.com/securesystemslab/BinRec,其 README(2022-11-29)现说明源码发布于 trailofbits/binrec-tob。所审阅的 Trail of Bits 提交(2022-11-22;仓库最后推送于 2023-09-18)采用 MIT 许可,并附 ONR DFARS 资助声明;文档列出 Ubuntu 20.04.03 或 Debian 11.3、LLVM 14、Python 3.9 及 4bd6a45 版本的 s2e-env,且 x86 Linux 是唯一受支持的环境。没有证据表明这一较晚的发布能复现论文中的 SPEC 结果。本次未构建或运行任何内容。
来源复核于
本合集仅做来源复核,未重新运行论文实验。请通过原始论文或 BibTeX 引用原作者。
一手来源
- https://dl.acm.org/doi/10.1145/3342195.3387550
- https://api.crossref.org/works/10.1145/3342195.3387550
- https://download.vusec.net/papers/binrec_eurosys20.pdf
- README.md GitHub · securesystemslab/BinRec · 修订 96b9315
- README.md GitHub · trailofbits/binrec-tob · 修订 e1ceeaa
- LICENSE GitHub · trailofbits/binrec-tob · 修订 e1ceeaa