Code obfuscation is the technique used to make source code elusive. Advantages of doing this are protecting intellectual property, reducing security exposure, size reduction or minification and library linking (to avoid DLL Hell). It is also considered a form of security. Types of obfuscations include simple keyword substitution, use or non-use of whitespace to create artistic effects, clever self-generating or heavily compressed programs, and programs that are valid and operate similarly in multiple programming languages.
Programmers may deliberately obfuscate code to conceal its purpose, to deter reverse engineering, or as a puzzle or recreational challenge for readers. Java and .NET languages are far easier to reverse engineer because they compile into intermediate code, instead of machine code. Programs known as obfuscators can be used to transform this human-readable code into obfuscated code using various techniques. Obfuscation by code morphing refers to obfuscating machine language or object code rather than obfuscating the source code. Obfuscation is also used as a technique in the process known as application hardening, which also includes such techniques as tamper detection and response, application encryption, etc.