Page 135 - 《软件学报》2024年第6期
P. 135
谢汶兵 等: 二进制翻译技术综述 2711
翻译技术实现了从 ARMv8 客户机到 x86-64 主机的异构虚拟化系统 Captive.
5.5 安全研究
随着网络技术的不断发展, 计算机系统的安全问题越来越引起人们的关注. 其中程序行为监控、数据流分析、
代码访问权限设定等成为研究的焦点. 二进制翻译被认为是一种特殊的反向编译技术, 近年来被广泛应用于软件
安全研究.
● 内核代码安全. 内核代码复杂且庞大, 其中驱动程序代码是产生漏洞的主要部分. 如何有效地分析内核驱动
模块代码是一个严峻的挑战. Cota 等人 [171] 使用动态二进制翻译技术模拟相同指令集架构或跨指令集架构的虚拟
机, 并且监控用户态及系统态的所有指令和数据, 从而对包括内核在内的整个虚拟机代码进行安全分析.
● 恶意代码识别. Shan 等人 [200] 提出了恶意代码检测器 BTMD, 它基于动静结合的二进制翻译技术来检测恶
意软件并阻止其执行. Spreitzenbarth 等人 [201] 提出了 Mobile-Sandbox, 它是一种将机器学习与二进制翻译相结合的
代码分析器. Mobile-Sandbox 包含 3 个步骤: (1) 静态分析部分用于分析应用程序, 以获得应用程序的总体概况.
(2) 动态分析部分在模拟器中执行应用程序并记录应用程序的每个操作. (3) 将静态分析期间收集的信息应用于机
器学习技术, 以检测恶意应用程序.
衡量二进制翻译框架优劣的关键指标.
● 污点分析. 动态分析平台 PANDA [35] 建立在 QEMU 全系统仿真基础之上, 具有记录和重放执行的能力, 支持
单一的动态污点分析. Cao 等人 [202] 实现了名为 TimePlayer 的原型系统, TimePlayer 利用 PANDA 提供的记录和重
放特性来检测未初始化变量的引用, 在检测到差异之后, 利用符号化污点分析进一步确定未初始化变量的位置.
Valgrind [16] 利用动态二进制翻译技术将程序变换为 VEX IR, 然后基于影子内存对中间代码做插桩分析, 实时跟踪
程序内存信息, 提供包括内存错误捕获、指针未释放、非法地址访问等程序行为分析.
● 控制流图恢复. Garba 等人 [203] 基于 SATURN 混淆工具将二进制代码提升至编译器中间语言 LLVM IR, 采
用迭代控制流图构造算法恢复混淆的二进制程序的控制流图. Kan 等人 [204] 提出一种恢复原始控制流图的自动化
方法, 实现了对 Android 原生二进制代码的反混淆分析.
此外, 二进制翻译技术也被应用到逆向工程中. 例如文献 [205] 提出一种构建于程序动态二进制分析基础之
上的协议模型逆向提取方法, 旨在解决如何根据网络应用程序的动态执行过程逆向获取协议消息格式、协议模型
等问题.
5.6 小 结
本节分别从软件迁移、程序分析与优化、二进制符号执行、虚拟化、安全研究等方面介绍了二进制翻译技
术在现实任务中的典型应用. 除了上述应用外, 也有研究者致力于将二进制翻译技术应用到其他任务中, 例如无序
微架构替代 [4,206] 、异构移动计算 [34] 、嵌入式应用迁移 [49,54,134] 、体系结构仿真 [49,178,180] 、VLIW 处理器的并行特性
利用 [169,180] 、处理器能耗效率提升 [159,207] 、内存事务转换等 [208] .
6 未来方向展望
(1) 新型高效翻译框架构建
自从最早期的二进制翻译系统推出以来, 二进制翻译技术在性能优化、功能开发、应用领域部署等方面不断
突破, 取得了丰硕的研究成果. 虽然不同任务场景对二进制翻译的需求各不相同, 但翻译效率和功能正确性始终是
目前, 业界已存在多种不同框架的二进制翻译系统, 但它们大多针对特定领域或特定处理器设计. 由于不同处
理器平台之间的差异, 这些二进制翻译系统在框架设计和优化上或多或少存在定制化, 可扩展性较差. 此外, 现有
的二进制翻译系统对于浮点指令和向量指令的翻译效率较低. 开源项目 QEMU 作为业界研究最广泛的翻译器, 具
有较强的平台可扩展性. 然而, QEMU 采用纯软件模拟指令的方法, 翻译效率较低, 与本地原生执行相比相差甚远.
近年来, 一些研究者致力于将 LLVM 编译框架引入到二进制翻译研究中. LLVM 编译器具有强大的中间表示以及
简洁灵活的编程接口, 为新型二进制翻译框架的设计提供了研究基础. 然而, 基于 LLVM 设计的二进制翻译框架