Reverse engineering software
Reverse engineering originates from mechanical engineering. Even today, 3D scanning, computer tomography, ultrasonic measurement, and other methods are used to obtain information in order to understand how a machine or mechanical device works. Reverse engineering literally reverses the engineering process in which components of a product are designed and assembled to create a functional device.
Reverse engineering aims to uncover information on how a product’s individual components function, helping you gain a complete understanding of each component and the system as a whole. This is precisely why this process is often applied to competing products: in order to be able to improve or adapt a product and survive in the competitive market. Reverse engineering has many other uses and is not limited to hardware. But how and why is reverse engineering used for software?
The redesign of software
Reverse engineering code allows programmers to reverse the development and production processes of software and gain a valuable look behind the scenes of a program. The deconstruction and reverse engineering of software provides insight into the source code of an application. If the code is known, software can be read by experts without any issues. It is then possible for them to understand, rewrite, or rebuild the program's architecture, functionality, and internal structures. The understanding of a software's processes gained from the reverse engineering of software also allows errors in the program to be rectified. In software development, reverse engineering is mainly used for the development of new products and the troubleshooting or analysis of competing products.
Describes the redesign of an existing product – in this case software. The product is "disassembled" in order to understand its structure and function. The aim of reverse engineering software is to reproduce the code of an existing program. In this way the software can be optimized, errors in functionality can be corrected, competitor programs can be analyzed, and new products can be developed.
Processes of reverse engineering software
Reverse engineering is required both for the investigation of industrially manufactured products and for the reconstruction of software. The reconstruction of software usually describes one of the following three processes:
- The development of software source code
- Tracking the rules of a communication protocol
- The subsequent creation of a prototype
Recovering software source code
A source code is the text of a computer program written in a programming language. The computer automatically converts this human-readable text into a machine-readable language. In order to be able to open up software source code, the translation of the machine languages must be reversed. A decompiler is used for this purpose. This is a computer program that generates a human-readable source code from the binary machine code. This process of retranslating the machine-readable binary code into a human-readable source code takes place automatically.
If the binary code cannot be completely reconstructed, a disassembler can be used. This program converts the binary-coded machine language into a human readable assembler language, which is then manually analyzed. In most cases it is not possible for programmers to reconstruct the complete source code. In principle, this isn't a problem, since reverse engineering code is more about understanding the grand scheme of things, rather than being able to map the original code completely. Even partial codes can be used to perform behavioral analyses of the software or to correct errors. Software developers in particular very often use decompilers and disassemblers.
Understanding the rules of a communication protocol
Reverse engineering is also used when developers want to write drivers for operating systems but the knowledge about the exact functioning and structure of the operating system is secret. With the help of a “sniffer,” the rules of a communication protocol are made accessible. The sniffer is a software tool for analyzing data traffic in a network. For example, the tool can detect anomalies in the data exchange between two devices. The evaluation of such communication methods provides programmers with information about which rules the corresponding protocol follows.
Subsequent creation of a software prototype
In this case, the term “code feedback” is used rather than “reverse engineering.” The reconstructed source code of software is modified and transferred into a prototype to be processed there further. Now, software projects with the graphical modeling language UML can be completed and subsequently generated.
When is reverse engineering used for software?
Reverse engineering code can be used in different areas to accomplish tasks, including:
- Testing and quality management of software
- Further development of software
- Investigation of network communication protocols
- Detection of computer viruses, trojans, extortion software, and other malicious programs
- Moving or maintenance of abandoned programs
- Search for software bugs
- General examination of a file format for your own understanding
- Improve software compatibility with third-party platforms and software
- Use of undocumented platform functions
In addition, reverse engineering software can be used to analyze competing products. Although many companies prohibit the reverse engineering of their products and state this in their licensing terms, the analysis of protocols is not legally affected. This is the case because the software itself is not subject to investigation by reverse engineering tools. In addition, such licensing clauses don’t apply in many countries. The users of purchased software are legally entitled to apply reverse engineering in order to check its application security and to correct errors.
Reverse engineering software provides programmers and developers with valuable insight into how digital applications work. This enables targeted troubleshooting and can provide helpful input for developing new software.