Reverse Engineering

ReverseEngineering is about presenting a piece of software at a higher level of abstraction. It can be based on sources or on binaries:

Reverse Engineering Source Code

When reverse engineering source code, you try to analyze it in order to present it at higher levels of abstraction. TheSourceCodeIsTheDesign, and ReverseEngineeringTools can help you to actually see this design. This can be done in several ways:

Reverse Engineering without the Sources

Without the source, you may be able to recover a new source text from an executable. For example, the source recovery company does some very clever tricks to recover CobolLanguage sources from mainframe loads -- using all possible knowledge about compilers used and all their weird flags.

An alternative is to distill a (possibly secret) API from a binary: this is what MattPietrek has done with the Windows API.

Product reverse engineering may involve describing the functionality and requirements for an existing product, which then can be rebuilt in a completely new way (similar to the way in which StarOffice mimics Office functionality).

Legal Issues

The legal issues of reverse engineering are discussed by Cristina Cifuentes and Anne Fitzgerald in IEEE IT Professional, Vol. 1, No. 2, March/April 1999, (Cristina also did some exciting work in the area of binary translation turning sparc code into pentium code and vice versa).

Reverse Engineering resources

ReverseEngineering is a subject of ongoing research: topics include design pattern extraction, clone detection for finding (almost) duplicate code, decompilation, and architecture extraction. The researchers even try to invent clever tricks for dealing with LegacyCode. For recent research results, follow the IEEE Working Conference on Reverse Engineering (WCRE), in 2001 in Stuttgart, Germany (see

Last but not least, there is a separate wiki providing a roadmap to reverse and re-engineering research available at the ProgramTransformationWiki.

-- ArieVanDeursen

Reverse Engineering Illustrated

Clean Room Design ( -- One person or group takes a device apart and describes what it does in as much detail as possible at a higher level of abstraction than the specific code. That description is then given to another group or person who has absolutely no knowledge of the specific device in question. This second party then builds a new device based on the description. The end result is a new device that works identically to the original but was created without any possibility of specifically copying the original.

EditText of this page (last edited November 9, 2014) or FindPage with title or text search