Reverse engineering

Reverse engineering is het onderzoeken van een product (meestal een product van een concurrent, een wapen dat van een tegenstander is gestolen, een stuk software of een communicatieprotocol) om daaruit af te leiden wat de eisen zijn waaraan het product probeert te voldoen, of om de precieze interne werking ervan te achterhalen. Dit doet men mogelijk (maar zeker niet uitsluitend) met het doel een concurrerend product te ontwerpen.

Een voorbeeld van reverse engineering aan de hand van een Mercedes Benz Silberpfeil racewagen uit 1954. Het origineel (1) wordt tijdens een 14 uur durend proces gescand (2), waardoor een puntenwolk van 98 miljoen punten ontstaat. Deze puntenwolk wordt gereduceerd (3) tot lijnen met een afstand van twee centimeter. Op basis hiervan wordt met een CAD programma in circa 80 uur een model geconstrueerd (4). Op basis van het CAD-model wordt de auto exact nagebouwd (5).

Een kenmerkend voorbeeld is de eerste pc van Compaq. Klakkeloos kopiëren van de BIOS-chip zou copyright-problemen opgeleverd hebben met IBM. Door reverse engineering toe te passen op de BIOS-chip van een IBM-PC, slaagde Compaq erin een pc te maken die hetzelfde functioneerde als een IBM-PC. Hierdoor was het mogelijk dezelfde software te laten functioneren op een Compaq-PC. Echter de prijs van de pc lag lager dan die van IBM. Deze manier van werken is door vele andere bedrijven toegepast, zodat de meeste pc's tegenwoordig in feite gekloonde IBM-PC's zijn.

Reverse engineering is een legale manier van ontwikkelen, maar dient (vaak) te gebeuren onder strikte juridische voorwaarden. Zo moet een ingenieur die geen kennis heeft van het origineel, aan de hand van instructies, gemaakt door de partij die reverse engineering heeft toegepast, het product in elkaar zetten.

Met reverse engineering wordt ook bedoeld het (geautomatiseerde) proces waarmee 3GL wordt overgezet naar 4GL.

Reverse engineering wordt ook gebruikt voor het verwijderen van kopieerbeveiligingen in software, het zogenaamde cracken.

De term reverse engineering slaat ook op het omzetten in een CAD-model van een door een kunstenaar of ontwerper met de hand gemaakt prototype van een nieuw object (bijvoorbeeld, de carrosserie van een wagen, of het omhulsel van een broodrooster). Die omzetting is gebaseerd op het scannen van het object, via een laserscanner, een 3D-coördinatenmeetmachine of een stereocamera.

Een noodzakelijke stap in reverse engineering is vaak het omzetten van het onderzochte artefact in voor mensen leesbare broncode, waaruit dat artefact dan weer te maken is. In geval van computerprogrammatuur, waarbij dat maakproces assembleren en/of compileren is, wordt dit proces disassembleren resp. decompileren genoemd. Het hangt sterk af van de gebruikte programmeertalen in hoeverre dit proces automatisch uit te voeren is. Ook op bestaande broncode is reverse engineering mogelijk: dan gaat het om het afleiden van modellen - bijvoorbeeld UML-diagrammen - die het systeem op een verhelderendere manier beschrijven dan de code zelf doet.