written 6.9 years ago by |
Reverse Engineering:-
It is a process to achieve system specification by thoroughly analyzing, understanding the existing system. This process can be seen as reverse SDLC model, i.e. we try to get higher abstraction level by analyzing lower abstraction levels.
An existing system is previously implemented design, about which we know nothing. Designers then do reverse engineering by looking at the code and try to get the design.
With design in hand, they try to conclude the specifications. Thus, going in reverse from code to system specification. Reverse engineering, in computer programming, is a technique used to analyze software in order to identify and understand the parts it is composed of. The usual reasons for reverse engineering a piece of software are to recreate the program, to build something similar to it, to exploit its weaknesses or strengthen its defenses.
Program Restructuring:-
It is a process to re-structure and re-construct the existing software. It is all about re-arranging the source code, either in same programming language or from one programming language to a different one. Restructuring can have either source code-restructuring and data-restructuring or both.
Re-structuring does not impact the functionality of the software but enhance reliability and maintainability. Program components, which cause errors very frequently can be changed, or updated with re-structuring.
The dependability of software on obsolete hardware platform can be removed via re-structuring.
Reasons for reverse engineering:-
• Interfacing. Reverse engineering can be used when a system is required to interface to another system and how both systems would negotiate is to be established.
• Military or commercial espionage. Learning about an enemy's or competitor's latest research by stealing or capturing a prototype and dismantling it.
• Improve documentation shortcomings. Reverse engineering can be done when documentation of a system for its design, production, operation or maintenance have shortcomings and original designers are not available.
• Obsolescence. Integrated circuits are often designed on proprietary systems, and built on production lines which become obsolete in only a few years.
• Software modernization - often knowledge is lost over time, which can prevent updates and improvements. Reverse engineering is generally needed in order to understand the 'as is' state of existing or legacy software in order to properly estimate the effort required to migrate system knowledge into a 'to be' state.
• Product security analysis. To examine how a product works, what are specifications of its components, estimate costs and identify potential patent infringement.
• Bug fixing. To fix (or sometimes to enhance) legacy software which is no longer supported by its creators (e.g. abandonware).