Reverse engineering is het uit elkaar halen van een object om te zien hoe het werkt om het object te dupliceren of te verbeteren. De praktijk, overgenomen uit oudere industrieën, wordt nu vaak gebruikt computer hardware en software. Bij reverse engineering van software wordt de machinecode van een programma (de reeks van 0’s en 1’s die naar de logische processor worden gestuurd) teruggekoppeld naar de broncode waarin het programma is geschreven, met behulp van programmeertaalverklaringen.
Software reverse engineering wordt gedaan om de broncode van een programma terug te vinden omdat de broncode verloren is gegaan, om te bestuderen hoe het programma bepaalde bewerkingen uitvoert, om de prestaties van een programma te verbeteren, om een bug te herstellen (een fout in het programma corrigeren wanneer de broncode niet beschikbaar is), om kwaadaardige inhoud in een programma zoals een virus op te sporen of om een programma dat is geschreven voor gebruik met een bepaalde microprocessor te gebruiken voor gebruik met een andere. Reverse engineering met het doel programma’s te kopiëren of te dupliceren kan een schending van het auteursrecht vormen. In sommige gevallen verbiedt de gebruikslicentie van software uitdrukkelijk reverse engineering.
Iemand die reverse engineering op software toepast, kan verschillende gereedschappen gebruiken om een programma uit elkaar te halen. Eén gereedschap is een hexadecimale dumper, die de binaire getallen van een programma afdrukt of weergeeft in hexadecimaal formaat (dat gemakkelijker te lezen is dan een binair formaat). Door de bitpatronen te kennen die de processorinstructies voorstellen, alsook de instructielengtes, kan de “reverse engineer” bepaalde delen van een programma identificeren om te zien hoe ze werken. Een ander veelgebruikt gereedschap is de disassembler. De disassembler leest de binaire code en toont dan elke uitvoerbare instructie in tekstvorm. Een disassembler kan het verschil niet zien tussen een uitvoerbare instructie en de gegevens die door het programma worden gebruikt, dus wordt een debugger gebruikt, waarmee de disassembler kan voorkomen dat hij de gegevensgedeelten van een programma disassembleert. Deze tools kunnen door een cracker worden gebruikt om een computersysteem aan te passen en er toegang toe te krijgen of om andere schade aan te richten.
Hardware reverse engineering houdt in dat een apparaat uit elkaar wordt gehaald om te zien hoe het werkt. Als een processorfabrikant bijvoorbeeld wil zien hoe een processor van een concurrent werkt, kan hij een processor van de concurrent kopen, deze uit elkaar halen en vervolgens een processor maken die er op lijkt. Dit proces is echter in veel landen illegaal. In het algemeen vereist reverse engineering van hardware veel expertise en is het vrij duur.
Een andere vorm van reverse engineering is het maken van 3D-afbeeldingen van gefabriceerde onderdelen wanneer er geen blauwdruk beschikbaar is, om het onderdeel opnieuw te kunnen fabriceren. Om een onderdeel te reverse engineeren, wordt het onderdeel gemeten met een coördinatenmeetmachine (CMM). Tijdens het meten wordt een 3-D beeld gegenereerd en op een monitor weergegeven. Nadat de meting is voltooid, wordt het beeld gedimensioneerd. Met deze methoden kan elk onderdeel worden reverse-engineered.
De term forward engineering wordt soms gebruikt in tegenstelling tot reverse engineering.