Reverse engineering in the realm of software is the process of taking a functioning, fully-developed piece of software and, based on the functionality it demonstrates, re-discovering the original source code either through a manual but more often through an automated process. Decompilation and disassembly are also synonyms for reverse engineering.
There are some legitimate reasons and situations in which reverse engineering is both acceptable and beneficial. Educational arenas provide one possible justification as the discovery of how to implement a certain feature can certainly be a didactic experience. One other possibility is the automated translation of outdated code in outdated programming languages into newer, more frequently-used languages. The Coret project is such a venture and information regarding its attempts to automatically generate more up-to-date object-oriented code can be found at http://hpv17.infosys.tuwien.ac.at/Research/reng.english/. Clearly, reverse engineering has tangible benefits in this arena as programmers can potentially be spared the exercise of having to relearn programming languages that are outdated just for the purpose of porting code to a new language.
Particularly in the face of the Y2K problem, when the industry is experiencing vast shortages of programmers capable of dealing with legacy code, reverse engineering through automated processes presents itself as one viable tool that could help get necessary work done.
Unfortunately, the principle of reverse engineering is applied all too often by companies using reverse engineering to secure undue financial gain. This will be discussed in more detail in the next section.
NEXT: Illegal Uses
Ted LeVan   |   Huat Chye Lim   |   Marissa Mayer   |   Ann Rose Van
Computer Science 201 Final Project