The obfuscation process is not built on a very new concept.
If someone is asked to hide something (still making it publicly accessible),
then the way is encryption and decryption. The encryption is nothing but
converting an understandable language to a non-understandable language; decryption
is just the vice versa. However, the method for encrypting data may not be
identical to decryption. So there exists a one-to-one relation between the data
to be encrypted and the encrypted presentation of data.
The Obfuscators used to work in almost a similar fashion
(How they differ: Obfuscators really do not need decryptions) as we have just
discussed above. Obfuscation is a general word used for protecting programming
codes and not the general data. This has become very much popular in recent
years as languages like Java and .NET gained their popularities. Unlike C or C++
(where we are directly getting the machine codes), in modern languages we are
getting an intermediate stage which makes reverse engineering easier. And it
already helped many hackers to bypass the license, take the pieces out of the
programs, steal them and make it own.
Here is a point for those who are still thinking that
Obfuscators are the same as the encryption and decryption process. It is not
exactly like that. Actually, the obfuscators do not need decryptions. An
obfuscated program keeps staying in plain view, but reaches far away from human
beings/hackers. An obfuscated program runs much faster than the normal programs
as few optimizations are also getting associated in the process of obfuscation.