Reverse Engineering
Reverse Engineering
Reverse engineering
Reverse engineering is the process of discovering the technological principles of a device, object or system through
analysis of its structure, function and operation. It often involves taking something (e.g., a mechanical device,
electronic component, or software program) apart and analyzing its workings in detail to be used in maintenance, or
to try to make a new device or program that does the same thing without using or simply duplicating (without
understanding) any part of the original.
Reverse engineering has its origins in the analysis of hardware for commercial or military advantage.[1] The purpose
is to deduce design decisions from end products with little or no additional knowledge about the procedures involved
in the original production. The same techniques are subsequently being researched for application to legacy software
systems, not for industrial or defence ends, but rather to replace incorrect, incomplete, or otherwise unavailable
documentation.[2]
Motivation
Reasons for reverse engineering:
• Interoperability.
• Lost documentation: Reverse engineering often is done because the documentation of a particular device has been
lost (or was never written), and the person who built it is no longer available. Integrated circuits often seem to
have been designed on obsolete, proprietary systems, which means that the only way to incorporate the
functionality into new technology is to reverse-engineer the existing chip and then re-design it.
• Product analysis. To examine how a product works, what components it consists of, estimate costs, and identify
potential patent infringement.
• Digital update/correction. To update the digital version (e.g. CAD model) of an object to match an "as-built"
condition.
• Security auditing.
• Acquiring sensitive data by disassembling and analysing the design of a system component [3]
• Military or commercial espionage. Learning about an enemy's or competitor's latest research by stealing or
capturing a prototype and dismantling it.
• Removal of copy protection, circumvention of access restrictions.
• Creation of unlicensed/unapproved duplicates.
• Materials harvesting, sorting, or scrapping.[4]
• Academic/learning purposes.
• Curiosity
• Competitive technical intelligence (understand what your competitor is actually doing versus what they say they
are doing)
• Learning: learn from others' mistakes. Do not make the same mistakes that others have already made and
subsequently corrected
Binary software
This process is sometimes termed Reverse Code Engineering, or RCE.[8] As an example, decompilation of binaries
for the Java platform can be accomplished using Jad. One famous case of reverse engineering was the first non-IBM
implementation of the PC BIOS which launched the historic IBM PC compatible industry that has been the
overwhelmingly dominant computer hardware platform for many years. An example of a group that
reverse-engineers software for enjoyment is CORE which stands for "Challenge Of Reverse Engineering". Reverse
engineering of software is protected in the U.S. by the fair use exception in copyright law.[9] The Samba software,
which allows systems that are not running Microsoft Windows systems to share files with systems that are, is a
classic example of software reverse engineering,[10] since the Samba project had to reverse-engineer unpublished
information about how Windows file sharing worked, so that non-Windows computers could emulate it. The Wine
project does the same thing for the Windows API, and OpenOffice.org is one party doing this for the Microsoft
Office file formats. The ReactOS project is even more ambitious in its goals, as it strives to provide binary (ABI and
API) compatibility with the current Windows OSes of the NT branch, allowing software and drivers written for
Reverse engineering 3
Source code
A number of UML tools refer to the process of importing and analysing source code to generate UML diagrams as
"reverse engineering". See List of UML tools.
Legality
In the United States even if an artifact or process is protected by trade secrets, reverse-engineering the artifact or
process is often lawful as long as it is obtained legitimately.[21] Patents, on the other hand, need a public disclosure
of an invention, and therefore, patented items do not necessarily have to be reverse-engineered to be studied.
(However, an item produced under one or more patents could also include other technology that is not patented and
not disclosed.) One common motivation of reverse engineers is to determine whether a competitor's product contains
patent infringements or copyright infringements.
The reverse engineering of software in the US is generally illegal because most EULA prohibit it, and courts have
found such contractual prohibitions to override the copyright law; see Bowers v. Baystate Technologies.[22] [23]
Article 6 of the 1991 EU Computer Programs Directive allows reverse engineering for the purposes of
Reverse engineering 5
interoperability, but prohibits it for the purposes of creating a competing product, and also prohibits the public
release of information obtained though reverse engineering of software.[24] [25] [26]
See also
• Antikythera mechanism
• Benchmarking
• Bus analyzer
• Chonda
• Clean room design
• Code morphing
• Connectix Virtual Game Station
• Decompiler
• Digital Millennium Copyright Act (DMCA)
• Forensic engineering
• Interactive Disassembler
• Knowledge Discovery Metamodel
• List of production topics
• Logic analyzer
• Paycheck (film)
• Value engineering
• Cryptanalysis
• Software archaeology
References
[1] Chikofsky, E. J.; Cross, J. H., II (1990). "Reverse Engineering and Design Recovery: A Taxonomy". IEEE Software 7 (1): 13–17.
doi:10.1109/52.43044.
[2] A Survey of Reverse Engineering and Program Comprehension. Michael L. Nelson, April 19, 1996, ODU CS 551 - Software Engineering
Survey
[3] Internet Engineering Task Force RFC 2828 Internet Security Glossary
[4] http:/ / scrappingmetal. blogspot. com/ 2010/ 10/ reverse-engineering. html
[5] T. Varady, R. R. Martin, J. Cox, Reverse Engineering of Geometric Models—An Introduction, Computer Aided Design 29 (4), 255-268,
1997.
[6] Chikofsky, E.J.; J.H. Cross II (January 1990). "Reverse Engineering and Design Recovery: A Taxonomy in IEEE Software". IEEE Computer
Society: 13–17.
[7] Warden, R. (1992). Software Reuse and Reverse Engineering in Practice. London, England: Chapman & Hall. pp. 283–305.
[8] Chuvakin, Anton; Cyrus Peikari (January 2004). Security Warrior (1st ed.). O'Reilly.
[9] See Samuelson, Pamela; Scotchmer, Suzanne (2002). "The Law and Economics of Reverse Engineering" (http:/ / www. yalelawjournal. org/
the-yale-law-journal/ content-pages/ the-law-and-economics-of-reverse-engineering/ ). Yale Law Journal 111 (7): 1575–1663.
doi:10.2307/797533. .
[10] "Samba: An Introduction" (http:/ / www. samba. org/ samba/ docs/ SambaIntro. html). 2001-11-27. . Retrieved 2009-05-07.
[11] W. Cui, J. Kannan, and H. J. Wang. Discoverer: Automatic protocol reverse engineering from network traces. In Proceedings of 16th
USENIX Security Symposium on USENIX Security Symposium, pages 1-14.
[12] W. Cui, M. Peinado, K. Chen, H. J. Wang, and L. Irún-Briz. Tupni: Automatic reverse engineering of input formats. In Proceedings of the
15th ACM Conference on Computer and Communications Security, pages 391-402. ACM, Oct 2008.
[13] P. M. Comparetti, G. Wondracek, C. Kruegel, and E. Kirda. Prospex: Protocol specification extraction. In Proceedings of the 2009 30th
IEEE Symposium on Security and Privacy, pages 110-125, Washington, 2009. IEEE Computer Society.
[14] E. M. Gold. Complexity of automaton identification from given data. Information and Control, 37(3):302-320, 1978.
[15] D. Angluin. Learning regular sets from queries and counterexamples. Information and Computation, 75(2):87-106, 1987.
[16] C.Y. Cho, D. Babic, R. Shin, and D. Song. Inference and Analysis of Formal Models of Botnet Command and Control Protocols (http:/ /
www. domagoj-babic. com/ index. php/ Pubs/ CCS10botnets), 2010 ACM Conference on Computer and Communications Security.
[17] Polyglot: automatic extraction of protocol message format using dynamic binary analysis (http:/ / bitblaze. cs. berkeley. edu/ papers/
polyglot_ccs07_av. pdf). J. Caballero, H. Yin, Z. Liang, and D. Song. Proceedings of the 14th ACM conference on Computer and
Reverse engineering 6
Further reading
• Eilam, Eldad (2005). Reversing: Secrets of Reverse Engineering. Wiley Publishing. pp. 595. ISBN 0764574817.
• James, Dick (January 19, 2006). "Reverse Engineering Delivers Product Knowledge; Aids Technology Spread"
(http://electronicdesign.com/Articles/Index.cfm?AD=1&ArticleID=11966). Electronic Design. Penton
Media, Inc. Retrieved 2009-02-03.
• Raja, Vinesh; Fernandes, Kiran J. (2008). Reverse Engineering - An Industrial Perspective. Springer. pp. 242.
ISBN 978-1-84628-855-5.
• Thumm, Mike (2007). "Talking Tactics" (http://ewh.ieee.org/r5/denver/sscs/References/2007_09_Torrance.
pdf). IEEE 2007 Custom Integrated Circuits Conference (CICC). IEEE, Inc. Retrieved 2009-02-03.
• Cipresso, Teodoro (2009). "Software Reverse Engineering Education" (http://www.reversingproject.info).
SJSU Master's Thesis. ProQuest UML. Retrieved 2009-08-22.
External links
• Java Call Trace to UML Sequence Diagram (https://sourceforge.net/projects/javacalltracer/) A reverse
engineering tool for Java. This tool helps you to reverse engineer UML Sequence Diagram for your java program
at runtime. It works well with both complex java programs (that have multiple threads) and J2EE applications
deployed on Application Servers.
• CASE Tools for Reverse Code Engineering (http://case-tools.org/reverse_engineering.html)
• The Reverse Code Engineering Community (http://community.reverse-engineering.net/)
Article Sources and Contributors 7
License
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/