[论文解读] Translingual Obfuscation
本文提出了一种新型软件保护技术——跨语言混淆(translingual obfuscation),将C程序翻译为Prolog以利用Prolog的独特特性(如合一与回溯)来混淆数据布局和控制流。作者实现了一款名为Babel的工具,展示了该方法在性能开销仅略高于商业工具的前提下,实现了高效且隐蔽的混淆。
Program obfuscation is an important software protection technique that prevents attackers from revealing the programming logic and design of the software. We introduce translingual obfuscation, a new software obfuscation scheme which makes programs obscure by "misusing" the unique features of certain programming languages. Translingual obfuscation translates part of a program from its original language to another language which has a different programming paradigm and execution model, thus increasing program complexity and impeding reverse engineering. In this paper, we investigate the feasibility and effectiveness of translingual obfuscation with Prolog, a logic programming language. We implement translingual obfuscation in a tool called BABEL, which can selectively translate C functions into Prolog predicates. By leveraging two important features of the Prolog language, i.e., unification and backtracking, BABEL obfuscates both the data layout and control flow of C programs, making them much more difficult to reverse engineer. Our experiments show that BABEL provides effective and stealthy software obfuscation, while the cost is only modest compared to one of the most popular commercial obfuscators on the market. With BABEL, we verified the feasibility of translingual obfuscation, which we consider to be a promising new direction for software obfuscation.
研究动机与目标
- 为应对日益增长的对抵御逆向工程与去混淆攻击的稳健软件混淆技术的需求。
- 探索利用一种编程范式中的固有语言特性来混淆另一种编程语言编写的程序的可行性。
- 开发一种结合语言翻译与语义混淆效果的实用混淆方法,不依赖虚拟化或复杂加密技术。
- 评估跨语言混淆对最先进的逆向工程与二进制差异分析工具的抗性。
- 证明通过跨范式翻译实现的混淆可在极低性能成本下实现强安全性。
提出的方法
- 将选定的C函数翻译为Prolog谓词,以利用Prolog的逻辑编程范式及其执行模型。
- 利用Prolog的合一与回溯机制,以一种难以通过静态或动态分析理解的方式混淆控制流与数据布局。
- 设计一种“混淆性”翻译方案,在保留C内存模型部分特性的基础上引入Prolog特有的语义,形成混合执行模型。
- 在名为Babel的工具中实现该方法,该工具选择性地将C代码翻译为Prolog,同时保持程序语义不变。
- 使用符号执行与二进制差异分析工具(BinDiff、CoP)评估其对逆向工程与相似性检测的抗性。
- 通过对比Babel输出与领先商业混淆工具在执行时间与二进制大小方面的表现,评估性能开销。
实验结果
研究问题
- RQ1将命令式C代码翻译为类似Prolog的逻辑编程语言,是否能显著增加逆向工程的难度?
- RQ2跨语言混淆在多大程度上能抵抗现代去混淆技术(如从内到外与从外到内分析)?
- RQ3跨语言混淆在多大程度上能有效规避BinDiff与CoP等二进制差异分析工具?
- RQ4与现有商业混淆工具相比,跨语言混淆的性能开销如何?
- RQ5语言转换与语言固有特性相结合,是否能产生强于传统方法的混淆效果?
主要发现
- Babel通过利用Prolog的合一与回溯机制,成功混淆了C程序的控制流与数据布局,使逆向工程显著复杂化。
- Babel生成的混淆二进制文件可有效抵抗最先进的二进制差异分析工具(如BinDiff与CoP),表明其具备强隐蔽性与抗性。
- 针对基于虚拟化的混淆技术(如解码-分发分析)的去混淆技术,对Babel的跨语言方法完全无效,原因在于其根本性的范式转变。
- Babel引入的性能开销适中,与领先商业混淆工具相当,具备实际部署的可行性。
- 通过结合C内存语义与Prolog逻辑执行模型所形成的混合执行模型,其混淆强度超越了单一语言所能达到的效果。
- 跨语言混淆表明,利用语言的独特特性进行混淆是一种可行且前景广阔的新型软件保护方向。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。