Whether you are rebuilding a software program, replicating a car engine or simply taking apart a music system, you can learn several things - simple or difficult – by dismembering these things. Reverse Engineering follows a similar course and is simply defined as a process of taking apart an object to understand its functions in order to duplicate or enhance its features or quality.
Reverse Engineering can also be defined as the process of obtaining a geometric CAD model from 3-D points acquired by scanning or digitizing existing parts and products. It digitally captures the physical entities of a component and is often defined by researchers with respect to their specific task.
Earlier, Reverse engineering was mainly applied to hardware, but now it is widely done at numerous levels, such as manufacturing software, industrial design, jewellery design, databases, and others.
Why Reverse Engineering?
The major question that arises while understanding Reverse Engineering is why people are eagerly adopting this type of engineering?
From being a perfect learning tool, compressing product development time and error, to creating products with new as well as better features and qualities, Reverse Engineering has several benefits and reasons for becoming extremely popular. Here are some other important benefits of Reverse Engineering:
Assists with the maintenance and identification of side effects and anomalies.
A three-dimensional product or model can be quickly captured in digital form, re-modelled, and exported for rapid prototyping, tooling or rapid manufacturing.
Helps in strengthening the good features of a product.
Can be used to update obsolete materials or antiquated manufacturing processes with more current, less-expensive technologies.
Provides proper system documentation which makes recovery of lost information easy.
Allows people to make new compatible products that are cheaper than those currently in the market.
For making software interoperate more effectively or to bridge different operating systems or databases.
To uncover the uncoordinated features of commercial products.
Determine whether a product is capable of living up to its advertised claims.
The above list is not exhaustive and there are many more reasons of using Reverse Engineering.
Process of Reverse Engineering:
The generic process of Reverse Engineering is completed in three stages. Each of these stages have respective importance and are followed to get best results.
Scanning: This stage is mainly concerned with scanning strategy. Selecting correct scanning technique, preparing the part to be scanned and performing the actual scanning to capture information that describes all geometric features of the parts such as steps, slots, pockets and holes all is done in this stage. Furthermore scanning consists of two different types scanners:
The focus of this stage is to import the point cloud data, reduce the noise in the data collected as well as reducing the number of points. Predefined filters are used to perform these tasks. This stage also allows the user to merge multiple scan data sets. The output of the point processing phase is a clean, merged, point cloud data is set in the most convenient format.
Application Geometric Model Development:
This phase depends very much on the real purpose for reverse engineering. It involves importing the designed CAD model and superimposing the scanned point cloud data set of the manufactured part. The output of this phase is geometric model in one of the proprietary formats such as IGES, VDA, STL, DXF, OBJ, VRML, ISO G Code, etc.
Tools Used for Reverse Engineering:
Reverse engineering fuels entire technical industry and paves the way for competition. Reverse engineers work on hard problems like integrating software with proprietary protocols and code. Also, they are often tasked with unravelling the mysteries of new products released by competitors. The boom in reverse engineering has therefore caused a boom in the tools used to execute the process of Reverse Engineering. Following are some of these tools that are prominently used for Reverse Engineering:
Debuggers are further divided into two categories:
User-mode: Run like normal programs under OS and are subject to the same rules as normal programs. Can only debug other user level processes.
Kernel-mode: Part of the OS and can device drivers and even the OS itself.
Fault Injection Tools:
These tools can supply malformed or improperly formatted input to a target software process. The failures in programs can be analysed to determine whether errors exist in the targeted software. There are some failures that have security implications, such as failures that allow an attacker direct access to the host computer or network.
Fault injection tools fall into two categories:
Host-based fault injectors operate like debuggers and can attach to a process and alter program states.
Network-based fault injectors manipulate network traffic to determine the effect on the receiver.
Although classic approaches to fault injection often make use of source code instrumentation some modern fault injectors pay more attention to tweaking program input.
A disassembler is a tool that converts machine-readable code into assembly language, which is a human-readable form of machine code. Disassemblers reveal which machine instructions are being used in the code. Machine code is usually specific to a given hardware architecture (such as the PowerPC chip or Intel Pentium chip). Thus, disassemblers are written expressly for the target hardware architecture.
The Reverse Complier or Decompiler:
The Reverse Compiler or a Decompiler is a tool that converts assembly code or machine code into source code in a higher level language such as C. Furthermore, decompilers also exist to transform intermediate languages such as Java byte code and Microsoft Common Runtime Language (CRL) into source code such as Java.
These tools are extremely helpful in determining higher level logic such as loops, switches, and if-then statements and are much like disassemblers but take the process one step further which is really important. A good disassembler or a compiler pair can be used to compile its own collective output back into the same binary.
There are various Reverse Engineering tools, like debuggers, Valgrind, PEID, JAVAsnoop, Ollydbg and othes, that can help reverse engineer programs or applications. With the great assistance of these Reverse engineering tools one can enjoy state-of-the-art facilities as they ensure one does not have to repeat the work that has already been done by someone else and allows freedom to choose the appropriate program. Therefore, by using the above mentioned tools and their information reverse engineering will not only be easy but also hassle free.