Both high-level and low-level components of a program can be reverse engineered. Reverse engineering refers to the process of attempting to decipher the source code of a piece of software as it is being built. If, on the other hand, the software’s source code is no longer accessible, the process of locating a working copy is known as reverse engineering. Reverse engineering employs a technique known as clean room design in order to avoid copyright violations.