Ingenieurs moeten soms omgekeerd denken om een product te analyseren. Een werktuigbouwkundig ingenieur kan bijvoorbeeld conclusies trekken over de productie van een product op basis van het ontwerp en de fysieke eigenschappen. Ze kunnen misschien zelfs hetzelfde product produceren als ze er een grondige kennis van hebben.
Je kunt reverse engineering ook vergelijken met het bewijzen van wiskundige vergelijkingen. Dus, hoe wordt reverse engineering gebruikt?
Wat is reverse-engineering?
Reverse engineering is het proces waarbij een systeem wordt geanalyseerd met als doel het te reproduceren of te verbeteren. Als je kijkt naar de werkgebieden van reverse engineering, zie je dat je het voor veel verschillende doeleinden kunt gebruiken. Als je het vanuit een cybersecurity-perspectief bekijkt, is het mogelijk om de volgende bewerkingen uit te voeren met reverse engineering-methoden:
- Bronanalyse van niet-open source software
- Kwetsbaarheidsanalyse
- Malware-analyse
- Kraken en patchen
Je kunt zien dat reverse engineering tegenwoordig zelfs in computerspellen wordt gebruikt. Ontwikkelaars maken bijvoorbeeld vaak softwaremodificaties met behulp van reverse engineering-methoden.
Op het gebied van reverse engineering zijn er twee verschillende analysemethoden: statisch en dynamisch. U voert statische analyse uit wanneer u een programma analyseert zonder het daadwerkelijk uit te voeren. Een dynamische analysemethode daarentegen vereist dat u het programma uitvoert om het gedrag en de gegevens die het gebruikt te observeren.
Maar voordat u analyses uitvoert voor reverse engineering, zijn er enkele belangrijke termen die u moet kennen hoe computerarchitectuur werkt.
Grote delen van computerarchitectuur
Reverse engineering is praktisch onmogelijk, tenzij u de computerarchitectuur begrijpt. Je moet de vier hoofdonderdelen bestuderen:
- Invoer: Een reeks methoden voor het invoeren van gegevens.
- CPU: De CPU verwerkt binnenkomende gegevens en geeft deze door aan de eigenaars. Het is de centrale verwerkingseenheid.
- Geheugen: De ruimte die tijdelijk gegevens bevat tijdens de verwerking.
- Uitgang: Het resultaat dat de eindgebruiker ziet.
U kunt al deze hoofdzaken in gedachten houden met een voorbeeld, bijvoorbeeld wanneer u op de letter A op uw toetsenbord drukt. Wanneer u erop drukt, vindt er een invoergebeurtenis plaats. Na deze fase verwerkt de CPU de gegevens en gebruikt een kleine ruimte in het geheugen om deze op te slaan. Ten slotte ziet u de letter A op uw scherm en beëindigt u het proces met uitvoer.
Duik in de diepten van de CPU
Als je echt een expert in reverse engineering wilt worden en diep in dit onderwerp wilt duiken, moet je gedetailleerde kennis hebben van hardware, lage talen en vooral de CPU. De belangrijkste onderwerpen die u moet weten over de CPU zijn:
- Controle-eenheid: Dit is verantwoordelijk voor de verwerking van gegevens in de CPU en de overdracht ervan naar de relevante velden. Je kunt dit apparaat zien als een controlemechanisme voor routering.
- ALU: Dit staat voor Arithmetic Logic Unit. Hier vinden enkele rekenkundige en logische bewerkingen plaats. Als je dieper in de wiskunde graaft, zul je zien dat de vier basisbewerkingen in wezen variaties op optellen zijn. De ALU is dus gebaseerd op aggregatie. Twee aftrekken van drie is bijvoorbeeld hetzelfde als min twee optellen bij drie.
- Registreert: Dit zijn de gebieden binnen de CPU die de verwerkte gegevens bevatten. Er zijn verschillende soorten registers, net zoals er verschillende soorten variabelen zijn in een programmeertaal. Een register is verantwoordelijk voor het bijhouden van het type en de kenmerken van de gegevens die eraan zijn toegewezen.
- Signalen: Als u wilt dat de CPU veel verschillende bewerkingen tegelijkertijd uitvoert, is een bepaalde methode nodig om ze te organiseren. De elementen die dit doen worden signalen genoemd. Elke transactie handelt volgens signalen die ervoor zorgen dat ze een ander proces niet verstoort.
- Bus: Het pad dat door de gegevens wordt gebruikt om van de ene eenheid naar de andere te gaan. Merk op hoe de naam transport suggereert.
Concepten die u vaak zult horen in reverse engineering
Begrijpen hoe de CPU gegevens verwerkt en in het geheugen opslaat, naast het concept van registers, kan erg handig zijn bij reverse engineering. U kunt met name het onderstaande diagram gebruiken om het concept geheugen beter te begrijpen:
Ten slotte moet u voor reverse engineering-analyse enkele basisconcepten over registers kennen. Ze zijn een van de onderwerpen waar u zich het meest op zult richten. Hier zijn enkele uitleg over gegevens, verwijzingen en indexregisters die op de meest beknopte manier nuttig voor u zullen zijn:
- 1. EAX: Staat voor Accumulator Register. Het slaat hier meestal gegevens op die onder de categorie rekenkundige bewerkingen vallen.
- 2. EBX: Staat voor Basisregister. Het speelt een rol bij indirecte adressering.
- 3. EDX: Staat voor Gegevensregister. EDX helpt andere registers.
- 4. EIP: Staat voor Instructiewijzer. Bevat het adres van het domein dat moet worden uitgevoerd.
- 5. ESP: Bevat het basisadres.
- 6. ESI: bevat de bronindexinformatie.
- 7. EDI: Behoudt de bestemmingsindexinformatie.
U moet deze allemaal afzonderlijk onderzoeken om hun nuances te begrijpen. Maar als je naar de basis kijkt en de bedrijfslogica probeert te begrijpen, ongeacht met welke processorarchitectuur je werkt, zal code-analyse voor reverse engineering vrij eenvoudig zijn.
Reverse engineering begint vaak met machinecode. Misschien begrijp je veel van de bovenstaande termen als je bekend bent met assembleren of het beheerst 32-bits of 64-bits processorarchitecturen. Als u assemblage van de grond af wilt leren, is dit uiterst nuttig bij reverse engineering.
Wat ga je hiermee doen?
Als u een goede kennis heeft van reverse engineering, kunt u code-analyse uitvoeren, ongeacht het besturingssysteem of de processorarchitectuur waarmee u werkt. Het is bijvoorbeeld mogelijk om gekraakte versies van veel programma's of computerspellen te vinden. Dit is een volledig illegale methode.
Als u echter een ethische cyberbeveiligingsprofessional wilt worden, moet u reverse-engineers gebruiken om te begrijpen waarom deze gekraakte programma's worden gekraakt. Als u verder wilt gaan met reverse engineering of net begint, zou het een goede keuze zijn als u probeert meer te weten te komen over de relatie tussen hardware en machinecode.