Reverse engineering (or sometimes back-engineering) is a process that is designed to extract enough data from a product and then to be able to reproduce that product. It may involve moving to creating a product from scratch or from pre-developed components. It can be applied to any product (such as computer technology, manufactured products, biological products, chemical products, etc.) to determine how the components are put together and how it works.
Author/Copyright holder: Georg Wiora. Copyright terms and licence: CC BY-SA 3.0
Anything can be reverse engineered with enough time and resources; this diagram suggest how you might reverse engineer a car.
Reasons for Using Reverse Engineering
The reasons for employing reverse engineering are myriad. Some are legal and ethical and many are not. It can, for example, be applied by the creator of a product when they are unable to remember the steps they employed to create the product in the first place. Equally, it can be used to clone the product and manufacture it more cheaply than the original which may be a more legally and ethically concerning use of reverse engineering.
Common reasons for reverse engineering include:
- Developing interfaces for system interoperability. This may often be used when legacy systems are involved or if original documentation is unavailable.
- Corporate and/or military espionage. Reverse engineering may enable the cloning of competitor’s products or an understanding of how to develop market or military counter-measures for that product.
- Improving product documentation. If product documentation supplied doesn’t mean the standards for easy use, it may be that reverse engineering the product can help articulate the documentation to a higher standard.
- Factoring out obsolescence. Many components of products have a short commercial lifespan; if an existing component cannot be purchased it may be possible to reverse engineer it so that a replacement can be constructed with materials currently available. Reverse engineering may also be required when the original manufacturer no longer supports maintenance of a particular product but maintenance is required.
- Modernizing of software products. Legacy systems may benefit from reverse engineering when the original knowledge of how a specific challenge was tackled has been lost to a business. Reverse engineering can also help with migrating legacy systems to new platforms.
- Security adaptions. Reverse engineering can benefit piracy and copying of systems by removing rights management and it may also be used to develop stricter security protocols by better understanding the operation of the product.
- Fixing product flaws. If you reverse engineer a product, particularly those which are not supported by their original creators, you can often fix problems with the product.
- Cloning. Creating (often illegal) copies of the original product.
- Education. Reverse engineering can serve as an educational tool that enables understanding of successful (and unsuccessful) designs so that this knowledge can be built upon in the future.
- Cost reduction. By understanding what goes into a product – cheaper alternatives may be sourced as replacement parts.
- Redesign/repurposing. Products that are no longer useful may be reverse engineered so that they can be improved upon and made useful once again.
- Competitor intelligence. Learning what your competitors are actually doing as opposed to what they publicly state they are doing.
Author/Copyright holder: IsaacMao. Copyright terms and licence: CC BY 2.0
This example of reverse engineering is highly ambitious – it’s an overview of how the human brain may operate!
There is no single process for reverse engineering. As you can imagine, reverse engineering a software product follows a very different process from reverse engineering a pharmaceutical product. However, the intention of both processes is the same – to determine from the finished product the process by which it is made and what goes into that process.
Reverse Engineering and The Law
Jon Johansen, a leading proponent of open source design, says; “Basically, if reverse engineering is banned, then a lot of the open source community is doomed to fail.”
As you might expect, reverse engineering is a complicated subject in law. Firstly, it is important to note that there is little point in reverse engineering a patented process to duplicate it. Patents are a matter of public record and the process is fully documented. However, many patents are reverse engineered in order to examine whether they impinge on the patents (or copyright) of other intellectual property.
The legal environment for reverse engineering differs from country to country (and sometimes from state to state). This means that before conducting any form of reverse engineering in a design or development project; you should take legal advice. Even seemingly ethical reverse engineering projects may be in contravention of this complex area of law. The last thing you need on any project is to leave you and/or your business open to civil and/or criminal liability.
Author/Copyright holder: Nguyen Hung Vu. Copyright terms and licence: CC BY 2.0
Don’t forget that reverse engineering is unnecessary if the information you seek is already in the public domain (as it is for the Linux Kernel pictured here).
In the same respect if you believe your own intellectual property has been reverse engineered and either your copyright or patents infringed upon – you should take legal advice as to what means of redress are open to you. Be prepared for large legal fees which may, for smaller businesses at least, make it difficult if not impossible to remedy the situation through the courts.
The Take Away
Reverse engineering is a useful design and development technique with many potential applications. However, it is always important to get legal advice prior to conducting reverse engineering exercises and doubly so if you intend the outputs of your reverse engineering to become commercially available. There is no single process across industries for reverse engineering it is simply a process by which you take an end product and deduce how it is made and works.
Resources
There is a Reddit forum (sub-Reddit) dedicated to discussing reverse engineering. As with all Reddit forums there are no guarantees that content will be suitable for work but it may be a useful resource to discuss ethics, legality and techniques - https://www.reddit.com/r/ReverseEngineering/
For those based in the US this is an interesting insight into the legal environment surrounding reverse engineering in software. Note: We would still recommend taking legal advice rather than basing decisions on this information alone. https://www.eff.org/issues/coders/reverse-engineering-faq
NC State University examines the ethical issues regarding reverse engineering here - https://ethics.csc.ncsu.edu/intellectual/reverse/study.php
Hero Image: Author/Copyright holder: Jorge Jaramillo. Copyright terms and licence: CC BY 2.0