Software Reverse Engineering

Software reverse engineering (SRE) is the practice of analyzing a software system, either in whole or in part, to extract design and implementation information. A typical SRE scenario would involve a software module that has worked for years and carries several rules of a business in its lines of code; unfortunately the source code of the application has been lost – what remains is “native” or “binary” code. Reverse engineering skills are also used to detect and neutralize viruses and malware, and to protect intellectual property. Computer programmers proficient in SRE will be needed should software components like these need to be maintained, enhanced, or reused. It became frightfully apparent during the Y2K crisis that reverse engineering skills were not commonly held amongst programmers. Since that time, much research has been under way to formalize just what types of activities fall into the category of reverse engineering, so that these skills could be taught to computer programmers and testers. To help address the lack of SRE education, several peer-reviewed articles on SRE, software re-engineering, software reuse, software maintenance, software evolution, and software security were gathered with the objective of developing relevant, practical exercises for instructional purposes. The research revealed that SRE is fairly well described and all related activities mostly fall into one of two categories: software-development-related and software-security-related. Hands-on reversing exercises were developed in the spirit of these two categories with the goal of providing a baseline education in reversing both Wintel machine code and Java bytecode.

[1]  Anas N. Al-Rabadi,et al.  A comparison of modified reconstructability analysis and Ashenhurst‐Curtis decomposition of Boolean functions , 2004 .

[2]  Alex Kalinovsky Covert Java: Techniques for Decompiling, Patching, and Reverse Engineering , 2004 .

[3]  Hausi A. Müller,et al.  Reverse engineering: a roadmap , 2000, ICSE '00.

[4]  Bruce W. Weide,et al.  Reverse Engineering of Legacy Code Exposed , 1995, 1995 17th International Conference on Software Engineering.

[5]  Arie van Deursen,et al.  Experiences in teaching software evolution and program comprehension , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[6]  Gerald M. Weinberg,et al.  Psychology of computer programming , 1971 .

[7]  Muhammad Raza Ali,et al.  Why teach reverse engineering? , 2005, ACM SIGSOFT Softw. Eng. Notes.

[8]  Gerardo Canfora,et al.  New Frontiers of Reverse Engineering , 2007, Future of Software Engineering (FOSE '07).