  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.
