AbstractThe increasing use of cloud computing and remote execution have made program security especially important.Code obfuscation has been proposed to make the understanding of programs more complicated to attackers. In thispaper, we exploit multi-core processing to substantially increase the complexity of programs, making reverse engi-neering more complicated. We propose a novel method that automatically partitions any serial thread into an arbitrarynumber of parallel threads, at the basic-block level. The method generates new control-ﬂow graphs, preserving theblocks’ serial successor relations and guaranteeing that one basic-block is active at a time using guards. The methodgenerates m n different combinations for m threads and n basic-blocks, signiﬁcantly complicating the execution state.We provide a correctness proof for the algorithm and implement the algorithm in the LLVM compilation framework.Keywords: Security, Obfuscation, Multi-threading.1. IntroductionWith the advent of cloud computing, software se-curity becomes especially important [1]. In particu-lar, software security researchers have been concernedto evaluate the methods that protect software systemsagainst reverse engineering threats. Those can be ex-ploitedbysoftwarehackersto discoverthe softwarevul-nerabilities and inject malicious code.One practical security approach is to use softwareobfuscation; it is a software security mechanism thattransforms the original program into a functionally-equivalent counterpart [2, 3]; the obfuscated programhas the same semantics as the original, but it is muchmore complex to understand by reverse engineers [4].Parallelism and multi-threading have been proposedto increase performance. Parallel programs are notori-ously difﬁcult to debug and reason about, and for thatreason parallelism is a nice ingredient for obfuscation.
The transformation includes methods such as insertion of dead or irrelevant code, extension to loop conditions, and conversion of a reducible into a non-reducible flow graph. One of the most important methods to do this is to increase parallelism of the code by two methods. First, redundant non-profitable task can be created then a portion of code is paralleled with this task, so the hacker cannot deduce which thread will have the actual portion to be run. Second, a sequence of data dependent statements in a portion of code can be splitted, then they run in parallel. The control for the correct execution will be using synchronization primitives @cite_2 . The latter is the closest to our method, however it splits simple, in-order sequence of instructions (without control-flow dependence) rather than general, complex, control-flow graphs as per our method.
@cite_2
2146567535
We identify three types of attack on the intellectual property contained in software and three corresponding technical defenses. A defense against reverse engineering is obfuscation, a process that renders software unintelligible but still functional. A defense against software piracy is watermarking, a process that makes it possible to determine the origin of software. A defense against tampering is tamper-proofing, so that unauthorized modifications to software (for example, to remove a watermark) will result in nonfunctional code. We briefly survey the available technology for each type of defense.