Opaque predicate
In computer programming, an opaque predicate is a predicate, an expression that evaluates to either "true" or "false", for which the outcome is known by the programmer a priori, but which, for a variety of reasons, still needs to be evaluated at run time.{{Cite book |last1=Caballero |first1=Juan |url=https://books.google.com/books?id=2_R6DAAAQBAJ&dq=Opaque+predicate&pg=PA167 |title=Detection of Intrusions and Malware, and Vulnerability Assessment: 13th International Conference, DIMVA 2016, San Sebastián, Spain, July 7-8, 2016, Proceedings |last2=Zurutuza |first2=Urko |last3=Rodríguez |first3=Ricardo J. |date=2016-06-17 |publisher=Springer |isbn=978-3-319-40667-1 |language=en}} Opaque predicates have been used as watermarks, as they will be identifiable in a program's executable.{{Cite book |last1=Chaki |first1=Rituparna |url=https://books.google.com/books?id=RXb_CgAAQBAJ&dq=Opaque+predicate&pg=PA162 |title=Advanced Computing and Systems for Security: Volume 2 |last2=Cortesi |first2=Agostino |last3=Saeed |first3=Khalid |last4=Chaki |first4=Nabendu |date=2015-11-18 |publisher=Springer |isbn=978-81-322-2653-6 |language=en}} They can also be used to prevent an overzealous optimizer from optimizing away a portion of a program. Another use is in obfuscating the control or dataflow of a program to make reverse engineering harder.
External links
- [https://www.researchgate.net/publication/238730564_A_Method_for_Watermarking_Java_Programs_via_Opaque_Predicates "A Method for Watermarking Java Programs via Opaque Predicates"]