Indistinguishable Predicates: A New Tool for Obfuscation
Opaque predicates are a commonly used technique in program obfuscation, intended to add complexity to control flow and to insert dummy code or watermarks. We survey a number of methods to remove opaque predicates from obfuscated programs, hence defeating the intentions of the obfuscator. Our main contribution is an obfuscation technique that introduces opaque constant predicates that are provably indistinguishable from obfuscations of certain other predicates in the program. Our technique resists all known efficient static attacks on opaque predicates. We present an evaluation of our implementation of the scheme. This includes measurements of its performance impact on an obfuscated instance versus a vanilla one and an experimental verification that the obfuscator is functionality preserving.