Reverse engineering, also called back engineering, is the process by which a man-made object is deconstructed to reveal its designs, architecture, or to extract knowledge from the object; similar to scientific research, the only difference being that scientific research is about a natural phenomenon. Reverse engineering is taking apart an object to see how it works in order to duplicate or enhance the object.
Software reverse engineering is done to retrieve the source code of a program because the source code was lost, to study how the program performs certain operations, to improve the performance of a program, to fix a bug (correct an error in the program when the source code is not available), to identify malicious content in a program such as a virus or to adapt a program written for use with one microprocessor for use with another.
Reverse engineer specialist should not only be an expert in languages such as C/C++, Python and/or Java, but also have a deep understanding of firmware and binary disassembly, and what altering execution sections would accomplish. Collaborate with a team of experienced malware analysts and researchers.
Project scenarios for the reverse engineering work include cyber system and protocol research, hardware and/or software reverse engineering, and the documentation of findings and recommendations to the customer to solve their mission needs. The viability and potential impact of the findings will often require team members to develop proof-of-concept exploitations or modifications based on identified vulnerabilities.