Software Reverse Engineering. Jacco Krijnen



Vergelijkbare documenten
Module 4 Hoofdstuk 1. Programmeertalen

Linux Assembly Uitwerkingen van de vragen en opdrachten

Computerarchitectuur en netwerken. Memory management Assembler programmering

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Zelftest Inleiding Programmeren

Computerarchitectuur en netwerken. Memory management Assembler programmering

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Hoe werkt een rekenmachine?

Geheugen en Adressering. Binding. Binding (2) Logische en Fysieke adresruimten. relocatie register. Dynamic loading

TCP-IP message van partner PLC naar Alarmsysteem met als inhoud alarmen en analoge waarden in Format code 01.

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Een overzicht van het.net platform

1 Inleiding in Functioneel Programmeren

Inleiding Visual Basic en VBA. Karel Nijs 2009/01

4Passief: n Afluisteren. n Geen gegevens gewijzigd of vernietigd. n Via de routers van WAN. n Via draadloze verbindingen. 4Fysieke afsluiting

STUDIEWIJZER PRACTICAL REVERSE ENGINEERING AND MALWARE ANALYSIS BACHELOR IN DE TOEGEPASTE INFORM ATICA SEMESTER 4 ACADEMIEJAAR

1.Noem de vijf categorieën waarin programmeertalen kunnen worden ingedeeld en geef van elke categorie één voorbeeld.

Geheugenbeheer. ICT Infrastructuren 2 december 2013

Les 11: systeemarchitectuur virtuele machines

Cursus Programmeren en Dataverwerking.

De CPU in detail Hoe worden instruc4es uitgevoerd? Processoren 28 februari 2012

AANVALLEN OP WES3 + LEN SPEK & HIDDE WIERINGA

Smartphones onder vuur

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces?

De standaard programmeertaal

Samenvatting Computer Architectuur

von-neumann-architectuur Opbouw van een CPU Processoren 1 december 2014

Zelftest Informatica-terminologie

COMP 4580 Computer Security

Ontwerp van Informatiesystemen

Inhoudsopgave. Optimalisatie van de mmips. Forwarding optie 1. Design flow. implementation

Hoofdstuk 7. Computerarchitectuur

Hoe werkt een computer precies?

Virtueel Geheugen en demand paging (1)

Computerarchitectuur. H&P Appendix A: Instruction Set Principles

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Vakgroep CW KAHO Sint-Lieven

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo)

Het besturingssysteem of operating system, vaak afgekort tot OS is verantwoordelijk voor de communicatie van de software met de hardware.

Computerarchitectuur. Terugblik / discussie / oefenopgaven

Java. Basissyllabus. Egon Pas

Perceptive Process. Release Notes. Version: 3.5.x

computerarchitectuur antwoorden

Debugging in embedded en native systemen met GDB

9 Meer over datatypen

17 Operaties op bits Bitoperatoren en bitexpressies

Computerarchitectuur en Netwerken. Computerarchitectuur

BuildingOn WebOTP.

Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/

Correspondentie inzake overnemen of reproductie kunt u richten aan:

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Datastructuren en algoritmen

Modelleren en Programmeren

Linux Assembly. The choice of a GNU generation

Kwetsbaarheden in BIOS/UEFI

Nederlandse versie. Inleiding. Inhoud van de verpakking. Aansluitingen. DS010 Multi Panel & Card Reader 53-in-1

Thinking of Development

Linux Assembly. The choice of a GNU generation

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

n o F o r t h voor MSP430 Launchpad 1. Memory map Er zijn twee ROM gebieden (alle getallen zijn hex): , verdeeld in vier blokken van 40

Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets)

Technische Informatie

Programmeren in Java

Controleer voordat je met de installatie begint of alle benodigde onderdelen aanwezig zijn. In de verpakking dient aanwezig te zijn:

Hyper-V vs ESX in het datacenter

ROM en RAM in een ROMforth

Python (gem=1,86) Java (gem=1,57) Enquete cursus informatica 1e bachelors oefeningen beter aansluiten bij project?

Modelleren en Programmeren

Centrale begrippen hoofdstuk 3. Waarom multiprogramming? Vandaag. processen proces state: running, ready, blocked,... Vragen??

Memory Management. Virtual Memory. Eisen Memory Management. Verdelen geheugen over meerdere processen

Modelleren en Programmeren

Overerving & Polymorfisme

Linux Assembly. The choice of a GNU generation

Basisconcept VHDL. Digitaal Ontwerpen Tweede studiejaar. Wim Dolman. Engineering, leerroute Elektrotechniek Faculteit Techniek

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: , Appendix A.

CONFIDENTIEEL. EIB-RPT van 12. Samenvatting

Compilers.

Leza biedt gebruikers de mogelijkheid om pc s, laptops en servers te back-uppen en back-ups te herstellen.

Webwinkel in het D-cluster van de opleiding Logistiek

Een gelinkte lijst in C#

Transcriptie:

Software Reverse Engineering Jacco Krijnen

Opbouw Inleiding en definitie Techniek Assemblers/Disassemblers Compilers/Decompilers Toepassingen Security Overige Softwarebeveiliging Piracy Anti RE technieken

Definities Reverse Engineering is the process of extracting the knowledge or design blueprints from anything man-made. Software Reverse Engineering

Clean room design IBM, 1981 Populaire pc s Nog weinig standaarden op het gebied van hardware Columbia Data Products, 1982 Maakte eerste IBM compatible IBM s BIOS reverse engineered Clean room design

Clean room design Team 1 bestudeert originele software (RE) stelt specificaties op Team 2 Implementeert de specificatie van team 1 Het principe is gebaseerd op het feit dat team 2 geen kennis heeft van de code. Effectief tegen copyright bescherming, niet tegen patent

Clean room design BIOS Huidige software Reverse engineeren van compleet software pakket vaak niet zinvol (te veel moeite) Soms wel bepaalde onderdelen.doc formaat in openoffice/libreoffice

Techniek

Abstractieniveaus programmeertalen C#/Python/Haskell C, Fortran, COBOL Assembly Machinecode High level (hoge mate van abstractie) Low level (lage mate van abstractie)

Abstractielagen in programmeertalen Compiler High level (hoge mate van abstractie) Low level (lage mate van abstractie)

Abstractielagen in programmeertalen High level (hoge mate van abstractie) Decompiler (!?) Low level (lage mate van abstractie)

Compiler Commentaar en documentatie worden verwijderd Optimalisaties (programmatransformaties) Machinecode kent geen identifiers (variabelenamen, functienamen) en geen typesysteem Compiling is Lossy Many to many Compleet herstel van sourcecode bijna altijd onmogelijk

Machine Language Machine language instructionset: een verzameling opcodes van b bytes architectuur specifiek Intel x86 00110001 ( ) 00001111 (Pop 32 bits van de stack) http://download.intel.com/products/processor/manual/325462.pdf

Hexeditors

Assemblers/Disassemblers Assembly language Verzameling mnemoics die 1 op 1 corresponderen met een specifieke machinetaal Intel x86 xor ( ) pop (Pop 32 bits van de stack) Assembler: Assembly Machinecode Disassembler: Machinecode Assembly Wat is code, wat is data?

Decompiler Disassembler helpt, maar assembly is nog zeer low-level Een decompiler bestaat net als compiler uit aantal vaste stappen Parser/Loader Disassembler Disassembly naar Intermediate Representation Program analysis Code generation

Decompiler Programma-analyse mov eax,[ebx+0x04] add eax,[ebx+0x08] sub [ebx+0x0c],eax eax = m[ebx+0x04]; eax += m[ebx+0x08]; m[ebx+0x0c] -= eax; eax = m[ebx+0x04] + m[ebx+0x08]; m[ebx+0x0c] -= eax; m[ebx+0x0c] -= m[ebx+0x04] + m[ebx+0x08]; x.a -= x.b + x.c; Voorbeeld naar http://en.wikipedia.org/wiki/decompiler

Decompiler Control flow jmp naar functieaanroep, while of for. Type analyse Primitieve types af te leiden uit opcodes Structs af te leiden uit memory gebruik

Decompiler Aantal C decompilers bekend Java en C# (.NET) Java Bytecode/MSIL

Toepassingen

Toepassingen Malware detectie en analyse Software lekken Cryptografie (Software engineering)

Malicious software Static/dynamic analysis Bescherming Static: Code obfuscation, watermarking Dynamic: Packing, antidebugger

Malicious software en lekken Malware wil Verspreiden Infecteren Java (april 2013)

RE in Cryptografie Kerckhoffs principe Hoe te kraken? Reverse engineering! Maak een lijst met magic constants AES: segment van de S-Box Doorzoek machinecode met hexeditor, of debugger (IDA pro)

RE in Cryptografie Implementatiefouten Cisco IOS (2013) MS Windows 2000 PRNG (2007) Plaintext wordt niet verwijderd na encryptie Wachtwoord blijft in geheugen UI Gebruik bekende implementaties! http://www.moserware.com/2009/09/s tick-figure-guide-to-advanced.html

Softwarebeveiliging

Piracy Digitale content is heel makkelijk te verplaatsen dupliceren Software piracy het onbevoegd gebruik maken, kopieren of verkopen van software

Serial numbers Komen samen met de software geleverd Worden gevalideerd met geheim algoritme Problemen Keys kunnen gedeeld worden Reverse engineering keygenerators Starcraft 1 Checksum algoritme

Packing (malware) Packing is het versleutelen of comprimeren van een groot gedeelte van de machinecode. Voornamelijk bij malware Hindert statische analyse Wat te doen met de key?

Anti debugger (malware) Detecteer dat een debugger attached is IsDebuggerPresent Windows API Code checksums Sterke combinatie met packing Eventueel false positives

Code obfuscation Obfuscator past code aan zodat Transparant voor de processor Onleesbaar voor reverse engineer Resilient Potency

Code obfuscation Een opaque predicate is een boolean expressie die runtime moet worden geevalueerd, maar reduceert tot een constante waarde Bekend bij de programmeur // nuttige code if(x + 1 == x + 2 1) { // nuttige code } else { // junk code }

Jump table spoofing Een jump table is een array met pointers naar mogelijke vervolg executiepaden low level implementatie van branching (if-then-else, switch) Aanpak Neem het adres van een normale jmp (bv een functieaanroep) Stel een tabel op met spookadressen samen met het echte adres Gebruik een opaque expression die evalueert naar de juiste index van de tabel

Jump table spoofing initializeimportant(); jmp 0x0000002A edx ebx 0x00314159 0x00123123 0x00141421 mov eax, opaqueexpr jmp [ebx + eax] 0x0000002A 0x00404404 0x00123456

Tot slot Reversing: Secrets of Reverse Engineering