Software obfuscation is the deliberate act of creating obfuscated code by making source or machine code difficult to understand from a human point of view. This may be by either ad-hoc heuristic techniques, or by cryptographic techniques based on hard problems.
Software obfuscation refers to one of two subjects:
- The deliberate act of creating obfuscated code by making source or machine code difficult to understand from a human point of view in an ad-hoc manner.
- A cryptographic approach to obfuscation e.g. Indistinguishability Obfuscation
Programmers may deliberately obfuscate code to conceal its purpose (security through obscurity) or its logic, in order to prevent tampering, deter reverse engineering, or as a puzzle or recreational challenge for someone reading the source code. Programs known as obfuscators transform readable code into obfuscated code using various techniques; including cryptographic techniques. This approach (at best) increases the time and effort required to reverse-engineer the program, but it does not make doing so infeasible.
The cryptographic approach to obfuscation attempts to build obfuscated programs from cryptographic hardness assumptions, such that de-obfuscating the program is infeasible.