Software obfuscation techniques can prevent binary diffing techniques from locating vulnerable code by obfuscating the third-party code, to achieve the purpose of protecting embedded device software. With the rapid development of binary diffing techniques, they can achieve more and more accurate function matching and identification by extracting the features within the function. This makes existing software obfuscation techniques, which mainly focus on the intra-procedural code obfuscation, no longer effective. In this paper, we propose a new inter-procedural code obfuscation mechanism Khaos, which moves the code across functions to obfuscate the function by using compilation optimizations. Two obfuscation primitives are proposed to separate and aggregate the function, which are called fission and fusion respectively. A prototype of Khaos is implemented based on the LLVM compiler and evaluated on a large number of real-world programs including SPEC CPU 2006 & 2017, CoreUtils, JavaScript engines, etc. Experimental results show that Khaos outperforms existing code obfuscations and can significantly reduce the accuracy rates of five state-of-the-art binary diffing techniques (less than 19%) with lower runtime overhead (less than 7%).
翻译:软件模糊化技术可以防止二进制混混技术通过混淆第三方代码来定位脆弱代码, 从而实现保护嵌入设备软件的目的。 随着二进制脱钩技术的快速开发, 它们可以通过提取函数的特性来实现越来越准确的功能匹配和识别。 这使得现有的软件模糊化技术, 主要是侧重于程序内代码混混混, 不再有效 。 本文中, 我们提议一个新的程序间代码模糊机制 Khaos, 将代码移动到函数之间, 以便通过编译优化来模糊功能。 两种模糊化原始元素被建议分离和合并功能, 分别称为裂变和聚变。 一种卡奥斯原型基于LLLVM编译器实施, 并用大量真实世界程序进行评估, 包括 SPEC CPU 2006 和 201717, CoreUtils, Core UavaScript 引擎等。 实验结果表明, Khaos 超越了现有代码的默认值, 而不是 IMBincrentration% 。