Reverse engineering
MachinesEdit
Naarmate computer-aided design (CAD) populairder is geworden, is reverse engineering een haalbare methode geworden om een 3D virtueel model te maken van een bestaand fysiek onderdeel voor gebruik in 3D CAD, CAM, CAE, of andere software. Het reverse-engineering proces houdt in dat een object wordt opgemeten en vervolgens gereconstrueerd als een 3D model. Het fysieke object kan worden gemeten met behulp van 3D scantechnologieën zoals CMM’s, laserscanners, digitizers met gestructureerd licht, of industriële CT scanning (computertomografie). De opgemeten gegevens alleen, gewoonlijk voorgesteld als een puntenwolk, missen topologische informatie en ontwerpintentie. De eerstgenoemde informatie kan worden teruggewonnen door de puntenwolk om te zetten in een driehoekig net. Reverse engineering heeft tot doel verder te gaan dan het produceren van een dergelijke mesh en de ontwerpintentie terug te vinden in de vorm van eenvoudige analytische oppervlakken (vlakken, cilinders, enz.) en eventueel NURBS-oppervlakken om een CAD-model te produceren met een representatie van de grenzen. Met behulp van een dergelijk model kan een ontwerp worden aangepast aan nieuwe eisen, kan een productieplan worden gegenereerd, enz.
Hybride modellering is een veelgebruikte term wanneer NURBS en parametrische modellering samen worden toegepast. Het gebruik van een combinatie van geometrische en vrije-vorm oppervlakken kan een krachtige methode van 3D modellering opleveren. Gebieden met vrije vorm data kunnen gecombineerd worden met exacte geometrische oppervlakken om een hybride model te creëren. Een typisch voorbeeld hiervan is de reverse engineering van een cilinderkop, die vrijgevormde gegoten kenmerken bevat, zoals watermantels en machinaal bewerkte gebieden met hoge tolerantie.
Reverse engineering wordt ook gebruikt door bedrijven om bestaande fysieke geometrie in digitale productontwikkelingsomgevingen te brengen, om een digitaal 3D record van hun eigen producten te maken, of om producten van concurrenten te beoordelen. Het wordt gebruikt om te analyseren hoe een product werkt, wat het doet, welke onderdelen het heeft; de kosten te schatten; potentiële octrooi-inbreuk te identificeren; enz.
Value engineering, een verwante activiteit die ook door bedrijven wordt gebruikt, omvat het deconstrueren en analyseren van producten. Het doel is echter om mogelijkheden te vinden om kosten te besparen.
SoftwareEdit
In 1990 definieerde het Institute of Electrical and Electronics Engineers (IEEE) (software) reverse engineering (SRE) als “het proces van het analyseren van een onderwerpsysteem om de componenten van het systeem en hun onderlinge relaties te identificeren en om representaties van het systeem te maken in een andere vorm of op een hoger abstractieniveau” waarbij het “onderwerpsysteem” het eindproduct is van softwareontwikkeling. Reverse engineering is uitsluitend een proces van onderzoek, en het onderzochte softwaresysteem wordt niet gewijzigd, hetgeen anders re-engineering of herstructurering zou zijn. Reverse engineering kan worden uitgevoerd vanuit elk stadium van de produktcyclus, niet noodzakelijk vanuit het functionele eindprodukt.
Er zijn twee componenten bij reverse engineering: herdocumentatie en ontwerpherstel. Her-documentatie is het creëren van een nieuwe representatie van de computercode, zodat deze gemakkelijker te begrijpen is. Ondertussen is design recovery het gebruik van deductie of redeneren vanuit algemene kennis of persoonlijke ervaring van het product om de functionaliteit van het product volledig te begrijpen. Het kan ook worden gezien als “achterwaarts gaan door de ontwikkelingscyclus”. In dit model wordt de output van de implementatiefase (in de vorm van broncode) teruggekoppeld naar de analysefase, in een omkering van het traditionele watervalmodel. Een andere term voor deze techniek is “program comprehension”. De Working Conference on Reverse Engineering (WCRE) wordt jaarlijks gehouden om de technieken van reverse engineering te onderzoeken en uit te breiden. Computer-aided software engineering (CASE) en geautomatiseerde code-generatie hebben een grote bijdrage geleverd op het gebied van reverse engineering.
Software anti-tamper technologie zoals obfuscation wordt gebruikt om zowel reverse engineering als re-engineering van propriëtaire software en software-aangedreven systemen tegen te gaan. In de praktijk doen zich twee belangrijke vormen van reverse engineering voor. In het eerste geval is de broncode van de software reeds beschikbaar, maar worden aspecten van het programma op een hoger niveau ontdekt, die misschien slecht gedocumenteerd zijn of gedocumenteerd zijn maar niet langer geldig zijn. In het tweede geval is er geen broncode voor de software beschikbaar, en worden alle pogingen om een mogelijke broncode voor de software te ontdekken beschouwd als reverse engineering. Het tweede gebruik van de term is voor de meeste mensen meer vertrouwd. Reverse engineering van software kan gebruik maken van de clean room design techniek om inbreuk op het auteursrecht te voorkomen.
Op een verwante noot, black box testing in software engineering heeft veel gemeen met reverse engineering. De tester beschikt meestal over de API, maar heeft als doel bugs en ongedocumenteerde features te vinden door het product van buitenaf in elkaar te rammen.
Andere doeleinden van reverse engineering zijn security auditing, het verwijderen van kopieerbeveiliging (“cracking”), het omzeilen van toegangsbeperkingen die vaak aanwezig zijn in consumentenelektronica, het op maat maken van embedded systemen (zoals motormanagement systemen), in-house reparaties of retrofits, het mogelijk maken van extra functies op goedkope “kreupele” hardware (zoals sommige chip-sets van grafische kaarten), of zelfs het louter bevredigen van de nieuwsgierigheid.
Binary softwareEdit
Binary reverse engineering wordt uitgevoerd als de broncode van een programma niet beschikbaar is. Dit proces wordt ook wel reverse code engineering of RCE genoemd. Bijvoorbeeld, decompilatie van binaries voor het Java platform kan worden bereikt door gebruik te maken van Jad. Een beroemd geval van reverse engineering was de eerste niet-IBM implementatie van het PC BIOS, waarmee de historische IBM PC-compatibiliteitsindustrie van start ging die gedurende vele jaren het overheersende computerhardwareplatform is geweest. Reverse engineering van software wordt in de VS beschermd door de “fair use”-uitzondering in de auteurswet. De Samba-software, die systemen waarop geen Microsoft Windows draait in staat stelt bestanden te delen met systemen waarop dat wel het geval is, is een klassiek voorbeeld van reverse engineering van software, aangezien het Samba-project niet-gepubliceerde informatie over de werking van Windows voor het delen van bestanden moest reverse-engineeren, zodat computers waarop geen Windows draait dit konden emuleren. Het Wine project doet hetzelfde voor de Windows API, en OpenOffice.org is een partij die dat doet voor de Microsoft Office bestandsformaten. Het ReactOS project is nog ambitieuzer in zijn doelstellingen door te streven naar binaire (ABI en API) compatibiliteit met de huidige Windows besturingssystemen van de NT tak, waardoor software en stuurprogramma’s geschreven voor Windows kunnen draaien op een clean-room reverse-engineered vrije software (GPL) tegenhanger. WindowsSCOPE maakt reverse-engineering van de volledige inhoud van het live geheugen van een Windows systeem mogelijk, inclusief een grafische reverse-engineering van alle lopende processen op binair niveau.
Een ander klassiek, zij het niet bekend, voorbeeld is dat in 1987 Bell Laboratories het Mac OS System 4.1, dat oorspronkelijk op de Apple Macintosh SE draaide, reverse-engineerde zodat het op hun eigen RISC machines kon draaien.
Technieken voor binaire softwareEdit
Rever-engineering van software kan met verschillende methoden worden bereikt.De drie belangrijkste groepen van software reverse-engineering zijn
- Analyse door observatie van informatie-uitwisseling, het meest voorkomend bij protocol reverse-engineering, waarbij bus-analyzers en packet-sniffers worden gebruikt, zoals voor het verkrijgen van toegang tot een computerbus of computernetwerkverbinding en het onthullen van de verkeersgegevens daarop. Het gedrag van de bus of het netwerk kan dan worden geanalyseerd om een standalone implementatie te produceren die dat gedrag nabootst. Dat is vooral nuttig voor reverse engineering van apparaatstuurprogramma’s. Soms wordt reverse engineering op embedded systemen sterk bevorderd door hulpmiddelen die opzettelijk door de fabrikant worden geïntroduceerd, zoals JTAG poorten of andere debug-middelen. In Microsoft Windows zijn low-level debuggers zoals SoftICE populair.
- Disassembleren met behulp van een disassembler, wat betekent dat de ruwe machinetaal van het programma wordt gelezen en begrepen in zijn eigen termen, enkel met behulp van machinetaal mnemonics. Dit werkt op elk computerprogramma, maar kan enige tijd in beslag nemen, vooral voor degenen die niet gewend zijn aan machinecode. De Interactive Disassembler is een bijzonder populair hulpmiddel.
- Decompilatie met behulp van een decompiler, een proces dat probeert, met wisselende resultaten, de broncode in een of andere high-level taal na te maken voor een programma dat alleen in machinecode of bytecode beschikbaar is.
SoftwareclassificatieEdit
Softwareclassificatie is het proces van het identificeren van overeenkomsten tussen verschillende softwarebinaire bestanden (zoals twee verschillende versies van hetzelfde binaire bestand), dat wordt gebruikt om code-relaties tussen softwaremonsters op te sporen. Deze taak werd traditioneel handmatig uitgevoerd om verschillende redenen (zoals patch-analyse voor het opsporen van kwetsbaarheden en inbreuk op auteursrechten), maar het kan nu enigszins automatisch worden gedaan voor grote aantallen samples.
Deze methode wordt vooral gebruikt voor lange en grondige reverse engineering taken (volledige analyse van een complex algoritme of groot stuk software). In het algemeen wordt statistische classificatie als een moeilijk probleem beschouwd, wat ook geldt voor softwareclassificatie, en er zijn dus weinig oplossingen/tools die deze taak goed aankunnen.
BroncodeEdit
Een aantal UML-tools noemt het proces van importeren en analyseren van broncode om UML-diagrammen te genereren “reverse engineering”. Zie Lijst van UML-tools.
Hoewel UML één benadering van “reverse engineering” is, hebben recentere ontwikkelingen in de internationale normalisatie-activiteiten geleid tot de ontwikkeling van het Knowledge Discovery Metamodel (KDM). De standaard levert een ontologie voor de intermediaire (of geabstraheerde) weergave van programmeertaalconstructies en hun onderlinge relaties. KDM, een norm van de Object Management Group (die op weg is om ook een ISO-norm te worden), begint ingang te vinden in de industrie met de ontwikkeling van hulpmiddelen en analyse-omgevingen die de extractie en analyse van broncode, binaire code en byte-code kunnen leveren. Voor de analyse van broncode maakt de granulaire architectuur van KDM het mogelijk om softwaresysteemstromen (gegevens-, besturings- en aanroepkaarten), architecturen en kennis van bedrijfslagen (regels, termen en processen) te extraheren. De standaard maakt het gebruik van een gemeenschappelijk gegevensformaat (XMI) mogelijk, waardoor de verschillende lagen van systeemkennis kunnen worden gecorreleerd, hetzij voor gedetailleerde analyse (zoals root cause, impact), hetzij voor afgeleide analyse (zoals extractie van bedrijfsprocessen). Hoewel de inspanningen om taalconstructies weer te geven nooit ophouden vanwege het aantal talen, de voortdurende evolutie van softwaretalen en de ontwikkeling van nieuwe talen, staat de standaard het gebruik van extensies toe om de brede talenreeks en de evolutie te ondersteunen. KDM is compatibel met UML, BPMN, RDF en andere standaarden, waardoor migratie naar andere omgevingen mogelijk wordt en zo systeemkennis kan worden benut voor inspanningen als transformatie van softwaresystemen en analyse van de bedrijfslaag van ondernemingen.
ProtocolsEdit
Protocols zijn sets van regels die berichtformaten beschrijven en de manier waarop berichten worden uitgewisseld: de protocol-statusmachine. Dienovereenkomstig kan het probleem van protocol reverse-engineering worden onderverdeeld in twee subproblemen: berichtformaat en toestandsmachine reverse-engineering.
De berichtformaten werden traditioneel reverse-engineered door een vervelend handmatig proces, waarbij geanalyseerd werd hoe protocol implementaties berichten verwerken, maar recent onderzoek stelde een aantal automatische oplossingen voor. Typisch, de automatische benaderingen groeperen waargenomen berichten in clusters door gebruik te maken van verschillende clustering analyses, of zij emuleren de protocol implementatie die de berichtverwerking traceert.
Er is minder werk geweest op het gebied van reverse-engineering van state-machines van protocollen. In het algemeen kan het protocol state-machines worden geleerd, hetzij door middel van een proces van offline leren, die passief observeert communicatie en probeert te bouwen van de meest algemene state-machine accepteren alle waargenomen sequenties van berichten, en online leren, die interactieve generatie van sonderen sequenties van berichten en het luisteren naar antwoorden op die sonderen sequenties mogelijk maakt. In het algemeen is bekend dat offline leren van kleine toestandsmachines NP-compleet is, maar online leren kan in polynomiale tijd worden gedaan. Een automatische offline aanpak is gedemonstreerd door Comparetti et al. en een online aanpak door Cho et al.
Andere componenten van typische protocollen, zoals encryptie en hash functies, kunnen ook automatisch worden omgekeerd. De automatische aanpak traceert de uitvoering van protocol-implementaties en probeert buffers in het geheugen op te sporen die onversleutelde pakketten bevatten.
Integrale circuits/smartcards
Rever-engineering is een invasieve en destructieve vorm van het analyseren van een smartcard. De aanvaller gebruikt chemicaliën om laag na laag van de smartcard weg te etsen en maakt foto’s met een rasterelektronenmicroscoop (SEM). Die techniek kan het volledige hardware- en softwaregedeelte van de smartcard blootleggen. Het grote probleem voor de aanvaller is om alles in de juiste volgorde te brengen om uit te vinden hoe alles werkt. De makers van de kaart proberen sleutels en operaties te verbergen door geheugenposities door elkaar te halen, bijvoorbeeld door bus scrambling.
In sommige gevallen is het zelfs mogelijk om een sonde aan te brengen om spanningen te meten terwijl de smartcard nog operationeel is. De makers van de kaart gebruiken sensoren om die aanval te detecteren en te voorkomen. Deze aanval komt niet vaak voor omdat hij zowel een grote investering in inspanning als speciale apparatuur vereist die over het algemeen alleen beschikbaar is voor grote chipfabrikanten. Bovendien levert deze aanval weinig op, omdat vaak andere beveiligingstechnieken worden gebruikt, zoals schaduwrekeningen. Het is nog onzeker of aanvallen op chip-en-PIN-kaarten om encryptiegegevens te kopiëren en vervolgens PIN-codes te kraken, een kosteneffectieve aanval op multifactorauthenticatie zouden zijn.
Volledige reverse engineering verloopt in verschillende grote stappen.
De eerste stap nadat met een SEM beelden zijn gemaakt, is het aan elkaar hechten van de beelden, wat nodig is omdat elke laag niet in één enkele opname kan worden vastgelegd. Een SEM moet over het gebied van de schakeling vegen en verscheidene honderden beelden nemen om de volledige laag te bestrijken. Het aan elkaar hechten van de beelden neemt honderden foto’s als input en levert één enkel goed overlappend beeld van de volledige laag op.
Daarna moeten de aan elkaar geplakte lagen worden uitgelijnd, omdat het monster na het etsen niet telkens in precies dezelfde positie ten opzichte van de SEM kan worden gebracht. Daarom zullen de gestikte versies elkaar niet op de juiste manier overlappen, zoals op het echte circuit. Meestal worden drie overeenkomstige punten geselecteerd, en op basis daarvan wordt een transformatie toegepast.
Om de circuitstructuur te extraheren, moeten de uitgelijnde, gestikte beelden worden gesegmenteerd, waardoor de belangrijke circuits worden uitgelicht en worden gescheiden van de oninteressante achtergrond en isolerende materialen.
Ten slotte kunnen de draden van de ene laag naar de volgende worden getraceerd, en kan de netlijst van het circuit, die alle informatie van het circuit bevat, worden gereconstrueerd.
Militaire toepassingenEdit
Reverse engineering wordt vaak gebruikt door mensen om technologieën, apparaten of informatie van andere naties te kopiëren die zijn verkregen door reguliere troepen in het veld of door inlichtingenoperaties. Het werd vaak gebruikt tijdens de Tweede Wereldoorlog en de Koude Oorlog. Hier zijn bekende voorbeelden uit de Tweede Wereldoorlog en later:
- Jerrycan: Britse en Amerikaanse strijdkrachten merkten dat de Duitsers benzineblikken hadden met een uitstekend ontwerp. Zij maakten kopieën van die blikken, die in de volksmond “Jerry cans” werden genoemd.”
- Panzerschreck: De Duitsers maakten tijdens de Tweede Wereldoorlog een Amerikaanse bazooka buit en bouwden die om tot de grotere Panzerschreck.
- Tupolev Tu-4: In 1944 werden drie Amerikaanse B-29 bommenwerpers op missies boven Japan gedwongen te landen in de Sovjet-Unie. De Sovjets, die niet over een soortgelijke strategische bommenwerper beschikten, besloten de B-29 te kopiëren. Binnen drie jaar hadden ze de Tu-4 ontwikkeld, een bijna perfecte kopie.
- SCR-584 radar: gekopieerd door de Sovjet-Unie na de Tweede Wereldoorlog, het is bekend om een paar modificaties – СЦР-584, Бинокль-Д.
- V-2 raket: Technische documenten voor de V-2 en aanverwante technologieën werden aan het eind van de oorlog door de westerse geallieerden in beslag genomen. De Amerikanen richtten hun reverse engineering inspanningen via Operation Paperclip, die leidde tot de ontwikkeling van de PGM-11 Redstone raket. De Sovjets maakten gebruik van buitgemaakte Duitse ingenieurs om technische documenten en plannen te reproduceren en werkten met buitgemaakte hardware om hun kloon van de raket, de R-1, te maken. Zo begon het naoorlogse Sovjet raketprogramma, dat leidde tot de R-7 en het begin van de ruimtewedloop.
- K-13/R-3S raket (NATO rapportage naam AA-2 Atoll), een Sovjet reverse-engineered kopie van de AIM-9 Sidewinder, werd mogelijk gemaakt nadat een Taiwanese AIM-9B een Chinese MiG-17 raakte zonder te exploderen in september 1958. De raket kwam vast te zitten in het casco, en de piloot keerde terug naar de basis met wat Sovjet wetenschappers zouden omschrijven als een universitaire cursus in raketontwikkeling.
- BGM-71 TOW raket: In mei 1975 liepen onderhandelingen tussen Iran en Hughes Missile Systems over coproductie van de TOW en Maverick raketten vast door onenigheid in de prijsstructuur, de daaropvolgende revolutie van 1979 maakte een einde aan alle plannen voor een dergelijke coproductie. Iran slaagde er later in de raket aan reverse-engineering te onderwerpen en produceert nu zijn eigen kopie, de Toophan.
- China heeft vele voorbeelden van Westerse en Russische hardware aan reverse-engineering onderworpen, van gevechtsvliegtuigen tot raketten en HMMWV-wagens, zoals de MiG-15 (die de J-7 werd) en de Su-33 (die de J-15 werd). Meer recente analyses van China’s militaire groei hebben gewezen op de inherente beperkingen van reverse engineering voor geavanceerde wapensystemen.
- Tijdens de Tweede Wereldoorlog bestudeerden Poolse en Britse cryptografen buitgemaakte Duitse “Enigma”-codeermachines voor berichten op zwakke punten. Hun werking werd vervolgens gesimuleerd op elektromechanische apparaten, “bommen”, die alle mogelijke scrambler-instellingen van de “Enigma”-machines uitprobeerden die hielpen bij het breken van gecodeerde berichten die door de Duitsers waren verzonden.
- Ook tijdens de Tweede Wereldoorlog analyseerden en versloegen Britse wetenschappers een reeks steeds geavanceerdere radionavigatiesystemen die door de Luftwaffe werden gebruikt om ’s nachts geleide bombardementsmissies uit te voeren. De Britse tegenmaatregelen tegen het systeem waren zo doeltreffend dat in sommige gevallen Duitse vliegtuigen door signalen ertoe werden gebracht op RAF-bases te landen, omdat zij dachten dat zij op Duits grondgebied waren teruggekeerd.
GenetwerkenEdit
Reverse engineering-concepten zijn ook toegepast op de biologie, meer bepaald op de taak om de structuur en functie van genregulerende netwerken te begrijpen. Zij regelen bijna elk aspect van biologisch gedrag en stellen cellen in staat fysiologische processen uit te voeren en te reageren op verstoringen. Het begrijpen van de structuur en het dynamisch gedrag van gen-netwerken is daarom één van de grootste uitdagingen van de systeembiologie, met onmiddellijke praktische gevolgen in verschillende toepassingen die verder gaan dan fundamenteel onderzoek.Er zijn verschillende methoden voor reverse engineering van gen-regulerende netwerken door gebruik te maken van moleculaire biologie en data science methoden. Ze zijn over het algemeen onderverdeeld in zes klassen:
- Coexpressiemethoden zijn gebaseerd op de notie dat als twee genen een vergelijkbaar expressieprofiel vertonen, zij verwant kunnen zijn, hoewel uit coexpressie niet zonder meer een oorzakelijk verband kan worden afgeleid.
- Genevolgorde motief methoden analyseren gen promotors om specifieke transcriptie factor bindende domeinen te vinden. Als een transcriptiefactor wordt voorspeld om een promoter van een specifiek gen te binden, kan een regulerend verband worden verondersteld.
- Chromatine ImmunoPrecipitatie (ChIP) methoden onderzoeken het genoom-brede profiel van DNA-binding van gekozen transcriptiefactoren om hun downstream gennetwerken af te leiden.
- Orthologie methoden brengen gennetwerk kennis van de ene soort naar de andere.
- Literatuur methoden implementeren text mining en handmatig onderzoek om putatieve of experimenteel bewezen gen-netwerk verbindingen te identificeren.
- Transcriptionele complexen methoden maken gebruik van informatie over eiwit-eiwit interacties tussen transcriptiefactoren, waardoor het concept van gen-netwerken uit te breiden tot transcriptionele regulerende complexen.
Vaak wordt de betrouwbaarheid van gen-netwerken getest door genetische perturbatie-experimenten gevolgd door dynamische modellering, gebaseerd op het principe dat het verwijderen van één netwerkknooppunt voorspelbare effecten heeft op het functioneren van de resterende knooppunten van het netwerk.Toepassingen van de reverse engineering van gen-netwerken lopen uiteen van het begrijpen van mechanismen van plantenfysiologie tot het aanwijzen van nieuwe doelwitten voor antikankertherapie.
Overlapping met octrooirecht
Reverse engineering is in de eerste plaats van toepassing op het verkrijgen van inzicht in een proces of artefact waarbij de wijze van constructie, gebruik of interne processen niet duidelijk is gemaakt door de maker ervan.
Gepatenteerde artikelen hoeven op zichzelf niet te worden reverse-engineered om te kunnen worden bestudeerd, want de essentie van een octrooi is dat uitvinders zelf een gedetailleerde openbare bekendmaking verzorgen, en in ruil daarvoor wettelijke bescherming van de uitvinding in kwestie ontvangen. Een voorwerp dat onder één of meer octrooien is geproduceerd, kan echter ook andere technologie bevatten die niet is geoctrooieerd en niet openbaar is gemaakt. Een veel voorkomend motief voor reverse engineering is dan ook om na te gaan of een product van een concurrent inbreuk maakt op octrooien of het auteursrecht schendt.