SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Kapitel 7 -
                      Debugger
                                          Universität Mannheim
Software Reverse Engineering   Lehrstuhl Praktische Informatik 1
zynamics
• Hersteller von Reverse Engineering Tools
• Fünf Produkte
        BinDiff
        BinNavi
        VxClass (Deutscher IT-Sicherheitspreis 2006)
        BinCrowd
        PDF Tool




                                                             Universität Mannheim
                                   2
 Software Reverse Engineering                     Lehrstuhl Praktische Informatik 1
Was ist ein Debugger (offiziell)?

     Ein Debugger (von engl. bug im Sinne von
     Programmfehler) ist ein Werkzeug zum
     Diagnostizieren, Auffinden und Beheben
     von Fehlern in Computersystemen, dabei
     vor allem in Programmen, aber auch in
     der für die Ausführung benötigten Hardware.
                                             Wikipedia




                                                Universität Mannheim
                               3
Software Reverse Engineering         Lehrstuhl Praktische Informatik 1
Was ist ein Debugger (RE)?

     Ein Debugger (von engl. bug im Sinne von
     Programmfehler) ist ein Werkzeug zum
     Herausfinden der Funktionalität von
     Programmen für die kein Quellcode vorliegt.
                                              Ich




                                                 Universität Mannheim
                               4
Software Reverse Engineering          Lehrstuhl Praktische Informatik 1
Debugging im RE-Kontext
•     Malware-Analyse
•     Aufdeckung von Sicherheitslücken
•     Entdeckung von Lizenzverstößen
•     Behebung von Interoperabilitätsproblemen
•     Erweiterung von Programmen nach Quellcodeverlust




                                                   Universität Mannheim
                                   5
    Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Warum Debugger für RE?
• Statische Analyse oft schwierig
      Verschlüsselung, Packer, ...
• Statische Analyse hat oft nicht alle benötigten
  Informationen
• Manchmal kapiert mans einfach nicht ohne
  Programmausführung




                                                    Universität Mannheim
                                  6
 Software Reverse Engineering            Lehrstuhl Praktische Informatik 1
Verschiedene Debuggertypen
                                  Ziel
      Quelltextdebugger vs. Assemblerdebugger


                               Benutzung
         Lokaler Debugger vs. Remote Debugger

                               Mächtigkeit
        Userland Debugger vs. Kernel Debugger

                                                        Universität Mannheim
                                    7
Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Visual Studio Debugger




                                               Universität Mannheim
                               8
Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
OllyDbg




                                                    Universität Mannheim
                                  9
Software Reverse Engineering             Lehrstuhl Praktische Informatik 1
Immunity Debugger




                                                 Universität Mannheim
                               10
Software Reverse Engineering          Lehrstuhl Praktische Informatik 1
SoftICE




                                                    Universität Mannheim
                                  11
Software Reverse Engineering             Lehrstuhl Praktische Informatik 1
WinDbg




                                                   Universität Mannheim
                                 12
Software Reverse Engineering            Lehrstuhl Praktische Informatik 1
Standardfunktionalität
• Programmzustand untersuchen
         Register, Speicher, Stack, ...
•     Programmzustand verändern
•     Haltepunkte setzen
•     Einzelschrittausführung
•     Bekannte Datenstrukturen einsehen
•     Exception-Handler-Kette einsehen
•     ...



                                                      Universität Mannheim
                                      13
    Software Reverse Engineering           Lehrstuhl Praktische Informatik 1
Windows Debugger
• Meistens mit Hilfe der Windows Debug API
  implementiert
      Funktionalität in kernel32.dll, psapi.dll und dbghelp.dll
• Wichtige Funktionen
      DebugActiveProcess: Prozess debuggen
      WaitForDebugEvent: Wartet auf Debugger-Events
      DebugBreakProcess: Anhalten des Prozesses der vom
       Debugger kontrolliert wird.




                                                             Universität Mannheim
                                  14
 Software Reverse Engineering                     Lehrstuhl Praktische Informatik 1
Laufenden Prozess debuggen
•     Benutzer muss SeDebugPrivilege besitzen
•     OpenProcess
•     DebugActiveProcess
•     WaitForDebugEvent-Schleife
•     DebugSetProcessKillOnExit (Windows XP+)
•     DebugActiveProcessStop (Windows XP+)




                                                    Universität Mannheim
                                   15
    Software Reverse Engineering         Lehrstuhl Praktische Informatik 1
Neuen Prozess debuggen
•     Benutzer muss SeDebugPrivilege besitzen
•     CreateProcess mit Debug-Flags
•     WaitForDebugEvent-Schleife
•     DebugSetProcessKillOnExit (Windows XP+)
•     DebugActiveProcessStop (Windows XP+)




                                                    Universität Mannheim
                                   16
    Software Reverse Engineering         Lehrstuhl Praktische Informatik 1
Die Debugger-Schleife
DEBUG_EVENT event;

for (;;)
{
    WaitForDebugEvent(&event, INFINITE);

       switch(event.dwDebugEventCode)
       {
           // Debug Events werden hier verarbeitet
       }

       ContinueDebugEvent( … );
}




                                                    Universität Mannheim
                               17
Software Reverse Engineering             Lehrstuhl Praktische Informatik 1
Mögliche Debug Events
•     EXCEPTION_DEBUG_EVENT
•     CREATE_THREAD_DEBUG_EVENT
•     CREATE_PROCESS_DEBUG_EVENT
•     EXIT_THREAD_DEBUG_EVENT
•     EXIT_PROCESS_DEBUG_EVENT
•     LOAD_DLL_DEBUG_EVENT
•     UNLOAD_DLL_DEBUG_EVENT
•     OUTPUT_DEBUG_STRING_EVENT
•     RIP_EVENT

                                                   Universität Mannheim
                                   18
    Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Verarbeitung des Programmzustands
• Registerwerte lesen
      OpenThread + GetThreadContext
• Registerwerte schreiben
      OpenThread + GetThreadContext + SetThreadContext
• Speicher auslesen
      VirtualProtextEx + ReadProcessMemory + VirtualProtextEx
• Speicher schreiben
      VirtualProtextEx + WriteProcessMemory + VirtualProtectEx




                                                         Universität Mannheim
                                19
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Exception Events
• EXCEPTION_DEBUG_EVENT
• Treten auf im Falle einer Ausnahmesituation
        Access Violation
        Divide By Zero
        Privileged Instruction
        ...
• Treten auch auf, wenn ein Haltepunkt getroffen oder
  ein Einzelschritt ausgeführt wird



                                                          Universität Mannheim
                                       20
 Software Reverse Engineering                  Lehrstuhl Praktische Informatik 1
Behandlung von Exception Events
EXCEPTION_DEBUG_INFO
DWORD dwFirstChance

   EXCEPTION_RECORD

 DWORD                          ExceptionCode
 DWORD                          ExceptionFlags
 _EXCEPTION_RECORD*             ExceptionRecord
 PVOID                          ExceptionAddress
 DWORD                          NumberParameters
 ULONG_PTR                      ExceptionInformation
                                  [EXCEPTION_MAXIMUM_PARAMETERS]




                                                                Universität Mannheim
                                       21
 Software Reverse Engineering                        Lehrstuhl Praktische Informatik 1
Behandlung von Exception Events
• Herausfinden der genauen Ausnahme
      event.u.Exception.ExceptionRecord.ExceptionCode
• Reguläre Ausnahmen
      First Pass: An Anwendung weitergeben
      Second Pass: Fehlermeldung anzeigen
• Haltepunkt und Einzelschritt Exception
      Verarbeiten im Debugger




                                                         Universität Mannheim
                                 22
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Feature: Software-Haltepunkte
• Möglichkeit ein Programm an einer beliebigen Stelle
  anzuhalten
• Ermöglicht das Überspringen unwichtiger
  Programmpfade
• Originalcode wird durch Haltepunkt-Befehl 0xCC
  ersetzt




                                                  Universität Mannheim
                                23
 Software Reverse Engineering          Lehrstuhl Praktische Informatik 1
Behandlung von Haltepunkten
• Ermittlung der Haltepunkt-Adresse
      Adresskorrektur durchführen
• Originalbefehl wiederherstellen
• Warten bis der Prozess fortgesetzt werden soll
• Einzelschritt ausführen
      Achtung: Race Condition
      Achtung: Was, wenn am nächsten Befehl auch ein BP ist?
• Haltepunkt wiederherstellen
• Prozess weiter ausführen


                                                         Universität Mannheim
                                24
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Feature: Hardware-Haltepunkte
•     Funktionieren ganz anders
•     Maximal 4 Haltepunkte pro CPU
•     Adressen in den Registern DR0 bis DR3
•     DR7 zur Konfiguration der Haltepunkte
•     Vorteil: Modifizieren Originalcode nicht




                                                        Universität Mannheim
                                   25
    Software Reverse Engineering             Lehrstuhl Praktische Informatik 1
Feature: Einzelschrittausführung
• Nur der nächste Befehl soll ausgeführt werden
      Eventuell Verzweigung in Unterfunktion
• Minimale Änderung des Programmzustands
• Vielleicht das wichtigste Feature zum
  Programmverständnis
• Einzelschritt eines Threads wird mit dessen Trap-Flag
  ausgeführt




                                                           Universität Mannheim
                                26
 Software Reverse Engineering                   Lehrstuhl Praktische Informatik 1
Behandlung von Einzelschritten
• Ermittlung der Einzelschrittaddresse
      Keine Addresskorrektur notwendig
• Trap-Flag wird automatisch zurückgesetzt




                                                     Universität Mannheim
                                27
 Software Reverse Engineering             Lehrstuhl Praktische Informatik 1
Feature: Prozedurschritt
• Sprung zum nächsten Befehl
      Ignorieren von Funktionsaufrufen
• Sehr nützlich um bekannte Funktionen zu
  überspringen




                                                     Universität Mannheim
                                28
 Software Reverse Engineering             Lehrstuhl Praktische Informatik 1
Behandlung von Prozedurschritt
• Prozedurschritt wird nie nativ unterstützt
• Stattdessen Simulation
      Ist der aktuelle Befehl ein Funktionsaufruf?
      Nein: Dann Einzelschritt
      Ja: Dann Haltepunkt auf den nächsten Befehl und
       Programm normal ausführen




                                                         Universität Mannheim
                                29
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Feature: Tracemodus
• Ausführen eines Programms und Protokollierung des
  Programmzustands nach jedem Befehl
• Sehr nützlich zum Datensammeln für spätere
  statische Analyse




                                                  Universität Mannheim
                                30
 Software Reverse Engineering          Lehrstuhl Praktische Informatik 1
Behandlung von Tracemodus
• Tracemodus wird nie nativ unterstützt
• Stattdessen Simulation
      Wiederholte Ausführung von Einzelschritten
      Aufzeichnung von Registerwerten und Speicherzellen




                                                         Universität Mannheim
                                31
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Thread Events
• Treten in zwei Fällen auf:
      Ein neuer Thread wird gestartet
      Ein aktiver Thread wird beendet




                                                           Universität Mannheim
                                      32
 Software Reverse Engineering                   Lehrstuhl Praktische Informatik 1
Feature: Threads
• Begrenzte Nützlichkeit beim Reverse Engineering
• Wichtig bei Malware-Analyse
      Einfacher Weg zum Finden von Command-Threads
• Ab und zu ist es nützlich Threads einschlafen zu
  lassen




                                                          Universität Mannheim
                                       33
 Software Reverse Engineering                  Lehrstuhl Praktische Informatik 1
Behandlung von Thread Creation
   CREATE_THREAD_DEBUG_INFO
   HANDLE                 hThread;
   LPVOID                 lpThreadLocalBase;
   LPTHREAD_START_ROUTINE lpStartAddress;




                                                      Universität Mannheim
                               34
Software Reverse Engineering               Lehrstuhl Praktische Informatik 1
Behandlung von Thread Creation
•     CREATE_THREAD_DEBUG_EVENT
•     Thread ID feststellen
•     Thread Zustand feststellen
•     Startadresse feststellen
•     Weitergabe der Informationen an den Benutzer
         Eventuell Programm anhalten




                                                    Universität Mannheim
                                   35
    Software Reverse Engineering         Lehrstuhl Praktische Informatik 1
Behandlung von ExitThread
    EXIT_THREAD_DEBUG_INFO
  DWORD               dwExitCode




                                                   Universität Mannheim
                                   36
Software Reverse Engineering            Lehrstuhl Praktische Informatik 1
Behandlung von Thread Exit
• EXIT_THREAD_DEBUG_EVENT
• Thread ID feststellen
• Weitergabe der Informationen an den Benutzer
      Eventuell Programm anhalten




                                                Universität Mannheim
                                37
 Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Prozess Events
• Treten in vier Fällen auf:
        Ein neuer Prozess wird gestartet
        Der aktive Prozess wird beendet
        Eine DLL wird in den aktiven Prozess geladen
        Eine DLL wird aus dem aktiven Prozess entladen




                                                            Universität Mannheim
                                      38
 Software Reverse Engineering                    Lehrstuhl Praktische Informatik 1
Feature: Prozesse
• Begrenzte Nützlichkeit beim Reverse Engineering
• Wichtig bei der Malware-Analyse
      Häufig starten Malwareprozesse neue Prozesse




                                                           Universität Mannheim
                                        39
 Software Reverse Engineering                   Lehrstuhl Praktische Informatik 1
Behandlung von Process Creation
CREATE_PROCESS_DEBUG_INFO
HANDLE                          hFile
HANDLE                          hProcess
HANDLE                          hThread
LPVOID                          lpBaseOfImage
DWORD                           dwDebugInfoFileOffset
DWORD                           nDebugInfoSize
LPVOID                          lpThreadLocalBase
LPTHREAD_START_ROUTINE          lpStartAddress
LPVOID                          lpImageName
WORD                            fUnicode




                                                              Universität Mannheim
                                     40
 Software Reverse Engineering                      Lehrstuhl Praktische Informatik 1
Behandlung von Process Creation
• CREATE_PROCESS_DEBUG_EVENT
• Ermittlung der geladenen Datei
      Erstaunlich kompliziert (Google: GetFileNameFromHandle)
• Ermittlung weiterer Informationen
      Prozess ID
      Initialer Thread
      Startaddresse
• Weitergabe der Informationen an den Benutzer
      Eventuell Programm anhalten



                                                         Universität Mannheim
                                41
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Behandlung von Process Exit
EXIT_PROCESS_DEBUG_INFO
DWORD                          dwExitCode




                                                       Universität Mannheim
                                    42
Software Reverse Engineering                Lehrstuhl Praktische Informatik 1
Behandlung von Process Exit
• EXIT_PROCESS_DEBUG_EVENT
• Ermittlung des Rückgabewertes
• Beenden des Debuggers




                                                Universität Mannheim
                                43
 Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Behandlung von DLL Loading
   LOAD_DLL_DEBUG_INFO
HANDLE             hFile
LPVOID             lpBaseOfDll
DWORD              dwDebugInfoFileOffset
DWORD              nDebugInfoSize
LPVOID             lpImageName
WORD               fUnicode




                                                      Universität Mannheim
                                     44
Software Reverse Engineering               Lehrstuhl Praktische Informatik 1
Behandlung von DLL Loading
• LOAD_DLL_DEBUG_EVENT
• Ermittlung der geladenen Datei
      Erstaunlich kompliziert (Google: GetFileNameFromHandle)
• Ermittlung weiterer Informationen
      Ladeadresse der Datei im Prozess
      Dateigröße
• Updaten der internen Prozessverwaltung
• Weitergabe der Informationen an den Benutzer
      Eventuell Programm anhalten


                                                         Universität Mannheim
                                45
 Software Reverse Engineering                 Lehrstuhl Praktische Informatik 1
Behandlung von DLL Unloading
 UNLOAD_DLL_DEBUG_INFO
LPVOID             lpBaseOfDll




                                                 Universität Mannheim
                                 46
Software Reverse Engineering          Lehrstuhl Praktische Informatik 1
Behandlung von DLL Unloading
• UNLOAD_DLL_DEBUG_EVENT
• Ermittlung der entladenen Datei
      Erstaunlich einfach
• Updaten der internen Prozessverwaltung
• Weitergabe der Informationen an den Benutzer
      Eventuell Programm anhalten




                                                Universität Mannheim
                                47
 Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Anti-Debugging
• Malware und andere Programme wehren sich aktiv
  gegen Analyse
• Anti-Debugging Code ist nur eine von vielen
  Möglichkeiten
• Vorgehensweisen
      Erkennen eines Debuggers
      Verhindern der Funktion eines Debuggers
      Erschwerung der Analyse




                                                            Universität Mannheim
                                      48
 Software Reverse Engineering                    Lehrstuhl Praktische Informatik 1
Erkennen eines Debuggers
• Offizieller Weg
      IsDebuggerPresent
      CheckRemoteDebuggerPresent
• Dutzende inoffizieller Wege je Debugger
• Erkennen von Veränderungen im Code durch
  Haltepunkten
• Erkennen von Timing-Veränderungen
• Suche nach RE-Tools im Allgemeinen



                                                Universität Mannheim
                                49
 Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Verhindern der Funktionalität
• Verhindern, dass sich ein Debugger an einen Prozess
  klemmt
• Automatisches Entfernen von Haltepunkten
• Gezieltes Auslösen von bekannten Bugs in
  Debuggern




                                                  Universität Mannheim
                                50
 Software Reverse Engineering          Lehrstuhl Praktische Informatik 1
Erschwerung der Analyse
•     Laufzeitpacker benutzen
•     Codeobfuscation
•     Versuchen den Disassembler zu stören
•     Komplizierter Verlauf des Kontrollflusses, etwa über
      Exceptionhandler




                                                       Universität Mannheim
                                   51
    Software Reverse Engineering            Lehrstuhl Praktische Informatik 1
Universität Mannheim
                               52
Software Reverse Engineering        Lehrstuhl Praktische Informatik 1
Referenzen
• Iczelion‘s Win32Asm Tutorials
      http://win32assembly.online.fr/tutorials.html
• MSDN Debugging API
      http://msdn.microsoft.com/en-
       us/library/ms679303(VS.85).aspx
• Gray Hat Python von Justin Seitz
• Advanced Windows Debugging von Hario Herwardt
  und Daniel Pravat



                                                           Universität Mannheim
                                    53
 Software Reverse Engineering                   Lehrstuhl Praktische Informatik 1

Contenu connexe

En vedette

Formale Methoden im Reverse Engineering
Formale Methoden im Reverse EngineeringFormale Methoden im Reverse Engineering
Formale Methoden im Reverse Engineeringzynamics GmbH
 
Architectural Diversity (German)
Architectural Diversity (German)Architectural Diversity (German)
Architectural Diversity (German)zynamics GmbH
 
0-knowledge fuzzing white paper
0-knowledge fuzzing white paper0-knowledge fuzzing white paper
0-knowledge fuzzing white paperVincenzo Iozzo
 
How to really obfuscate your pdf malware
How to really obfuscate   your pdf malwareHow to really obfuscate   your pdf malware
How to really obfuscate your pdf malwarezynamics GmbH
 
Packer Genetics: The selfish code
Packer Genetics: The selfish codePacker Genetics: The selfish code
Packer Genetics: The selfish codejduart
 
Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...
Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...
Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...anthesis GmbH
 
CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung | Fo...
CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung |  Fo...CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung |  Fo...
CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung | Fo...Markus Tonn
 
User Interface Design fürs Internet
User Interface Design fürs InternetUser Interface Design fürs Internet
User Interface Design fürs InternetMatthias C. Schroeder
 
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013Ingo Hartlief FRICS
 
"Richtig" kommunizieren mit Facebook und Twitter
"Richtig" kommunizieren mit Facebook und Twitter"Richtig" kommunizieren mit Facebook und Twitter
"Richtig" kommunizieren mit Facebook und Twittersozialinfo
 
Présentation natalie cerny
Présentation natalie cerny Présentation natalie cerny
Présentation natalie cerny NatalieCerny
 
Estructura interna de la materia
Estructura interna de la materiaEstructura interna de la materia
Estructura interna de la materiaPaulatroncosoReyes
 
CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...
CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...
CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...Markus Tonn
 
Los 10 inventos que cambiaron el mundo
Los 10 inventos que cambiaron el  mundoLos 10 inventos que cambiaron el  mundo
Los 10 inventos que cambiaron el mundokarenmanosalva1
 
Internet y periodismo electrónico mayen
Internet y periodismo electrónico mayenInternet y periodismo electrónico mayen
Internet y periodismo electrónico mayenmayenmejia
 
CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...Markus Tonn
 
CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...Markus Tonn
 
Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)tschikarski
 
Perspectiva Pacients CAS
Perspectiva Pacients CASPerspectiva Pacients CAS
Perspectiva Pacients CASJaume Vidal
 

En vedette (20)

Formale Methoden im Reverse Engineering
Formale Methoden im Reverse EngineeringFormale Methoden im Reverse Engineering
Formale Methoden im Reverse Engineering
 
Architectural Diversity (German)
Architectural Diversity (German)Architectural Diversity (German)
Architectural Diversity (German)
 
0-knowledge fuzzing white paper
0-knowledge fuzzing white paper0-knowledge fuzzing white paper
0-knowledge fuzzing white paper
 
How to really obfuscate your pdf malware
How to really obfuscate   your pdf malwareHow to really obfuscate   your pdf malware
How to really obfuscate your pdf malware
 
Packer Genetics: The selfish code
Packer Genetics: The selfish codePacker Genetics: The selfish code
Packer Genetics: The selfish code
 
Referenzen Oberberg-Online 2009
Referenzen Oberberg-Online 2009Referenzen Oberberg-Online 2009
Referenzen Oberberg-Online 2009
 
Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...
Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...
Grundlagen des Berichtswesens und Arbeiten mit Berichten in SAP Business ByDe...
 
CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung | Fo...
CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung |  Fo...CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung |  Fo...
CONSULT 2010 | Bochum: Foerderung - Finanzierung fuer Existenzgruendung | Fo...
 
User Interface Design fürs Internet
User Interface Design fürs InternetUser Interface Design fürs Internet
User Interface Design fürs Internet
 
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
 
"Richtig" kommunizieren mit Facebook und Twitter
"Richtig" kommunizieren mit Facebook und Twitter"Richtig" kommunizieren mit Facebook und Twitter
"Richtig" kommunizieren mit Facebook und Twitter
 
Présentation natalie cerny
Présentation natalie cerny Présentation natalie cerny
Présentation natalie cerny
 
Estructura interna de la materia
Estructura interna de la materiaEstructura interna de la materia
Estructura interna de la materia
 
CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...
CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...
CONSULT 2010 | Steinheim: Foerderung - Finanzierung fuer Existenzgruendung | ...
 
Los 10 inventos que cambiaron el mundo
Los 10 inventos que cambiaron el  mundoLos 10 inventos que cambiaron el  mundo
Los 10 inventos que cambiaron el mundo
 
Internet y periodismo electrónico mayen
Internet y periodismo electrónico mayenInternet y periodismo electrónico mayen
Internet y periodismo electrónico mayen
 
CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Doerentrup: Foerderung - Finanzierung fuer Existenzgruendung |...
 
CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...
CONSULT 2010 | Waldfeucht: Foerderung - Finanzierung fuer Existenzgruendung |...
 
Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)
 
Perspectiva Pacients CAS
Perspectiva Pacients CASPerspectiva Pacients CAS
Perspectiva Pacients CAS
 

Similaire à Uni mannheim debuggers

Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsAndreas Schreiber
 
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnitFrank Sons
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisRoland Ewald
 
Java für eingebettete Systeme
Java für eingebettete SystemeJava für eingebettete Systeme
Java für eingebettete Systemerdmeyer
 
Die Macht der Zahlen
Die Macht der ZahlenDie Macht der Zahlen
Die Macht der ZahlenGerrit Beine
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018André Krämer
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsRobin Sedlaczek
 
ONE Konferenz: Von der Idee zur App
ONE Konferenz: Von der Idee zur AppONE Konferenz: Von der Idee zur App
ONE Konferenz: Von der Idee zur AppNetcetera
 
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungDevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungMarc Müller
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareAndreas Schreiber
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Nico Orschel
 
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source JavaJBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Javacamunda services GmbH
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous IntegrationMilena Reichel
 
Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013Nico Orschel
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018Christian Mücke
 

Similaire à Uni mannheim debuggers (20)

Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
"Es rechnet sich!" - Argumente für den Einsatz von PHPUnit
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der Praxis
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Mobile Applikationen: Entwicklung, Rollout, Wartung - Tipps und Tricks für di...
Mobile Applikationen: Entwicklung, Rollout, Wartung - Tipps und Tricks für di...Mobile Applikationen: Entwicklung, Rollout, Wartung - Tipps und Tricks für di...
Mobile Applikationen: Entwicklung, Rollout, Wartung - Tipps und Tricks für di...
 
Java für eingebettete Systeme
Java für eingebettete SystemeJava für eingebettete Systeme
Java für eingebettete Systeme
 
Die Macht der Zahlen
Die Macht der ZahlenDie Macht der Zahlen
Die Macht der Zahlen
 
Codeception VisualCeption
Codeception VisualCeptionCodeception VisualCeption
Codeception VisualCeption
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio Extensions
 
ONE Konferenz: Von der Idee zur App
ONE Konferenz: Von der Idee zur AppONE Konferenz: Von der Idee zur App
ONE Konferenz: Von der Idee zur App
 
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software EntwicklungDevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
DevDay 2016 Keynote - Die Evolution agiler Software Entwicklung
 
Softwaretests: Werkzeuge zur Automatisierung
Softwaretests: Werkzeuge zur AutomatisierungSoftwaretests: Werkzeuge zur Automatisierung
Softwaretests: Werkzeuge zur Automatisierung
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013
 
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source JavaJBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
 
Software Metrics and Continuous Integration
Software Metrics and Continuous IntegrationSoftware Metrics and Continuous Integration
Software Metrics and Continuous Integration
 
Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013Testing XAML-based Windows Store Apps mit VS 2013
Testing XAML-based Windows Store Apps mit VS 2013
 
ADF Software Factory
ADF Software FactoryADF Software Factory
ADF Software Factory
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 

Uni mannheim debuggers

  • 1. Kapitel 7 - Debugger Universität Mannheim Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 2. zynamics • Hersteller von Reverse Engineering Tools • Fünf Produkte  BinDiff  BinNavi  VxClass (Deutscher IT-Sicherheitspreis 2006)  BinCrowd  PDF Tool Universität Mannheim 2 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 3. Was ist ein Debugger (offiziell)? Ein Debugger (von engl. bug im Sinne von Programmfehler) ist ein Werkzeug zum Diagnostizieren, Auffinden und Beheben von Fehlern in Computersystemen, dabei vor allem in Programmen, aber auch in der für die Ausführung benötigten Hardware. Wikipedia Universität Mannheim 3 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 4. Was ist ein Debugger (RE)? Ein Debugger (von engl. bug im Sinne von Programmfehler) ist ein Werkzeug zum Herausfinden der Funktionalität von Programmen für die kein Quellcode vorliegt. Ich Universität Mannheim 4 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 5. Debugging im RE-Kontext • Malware-Analyse • Aufdeckung von Sicherheitslücken • Entdeckung von Lizenzverstößen • Behebung von Interoperabilitätsproblemen • Erweiterung von Programmen nach Quellcodeverlust Universität Mannheim 5 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 6. Warum Debugger für RE? • Statische Analyse oft schwierig  Verschlüsselung, Packer, ... • Statische Analyse hat oft nicht alle benötigten Informationen • Manchmal kapiert mans einfach nicht ohne Programmausführung Universität Mannheim 6 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 7. Verschiedene Debuggertypen Ziel Quelltextdebugger vs. Assemblerdebugger Benutzung Lokaler Debugger vs. Remote Debugger Mächtigkeit Userland Debugger vs. Kernel Debugger Universität Mannheim 7 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 8. Visual Studio Debugger Universität Mannheim 8 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 9. OllyDbg Universität Mannheim 9 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 10. Immunity Debugger Universität Mannheim 10 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 11. SoftICE Universität Mannheim 11 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 12. WinDbg Universität Mannheim 12 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 13. Standardfunktionalität • Programmzustand untersuchen  Register, Speicher, Stack, ... • Programmzustand verändern • Haltepunkte setzen • Einzelschrittausführung • Bekannte Datenstrukturen einsehen • Exception-Handler-Kette einsehen • ... Universität Mannheim 13 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 14. Windows Debugger • Meistens mit Hilfe der Windows Debug API implementiert  Funktionalität in kernel32.dll, psapi.dll und dbghelp.dll • Wichtige Funktionen  DebugActiveProcess: Prozess debuggen  WaitForDebugEvent: Wartet auf Debugger-Events  DebugBreakProcess: Anhalten des Prozesses der vom Debugger kontrolliert wird. Universität Mannheim 14 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 15. Laufenden Prozess debuggen • Benutzer muss SeDebugPrivilege besitzen • OpenProcess • DebugActiveProcess • WaitForDebugEvent-Schleife • DebugSetProcessKillOnExit (Windows XP+) • DebugActiveProcessStop (Windows XP+) Universität Mannheim 15 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 16. Neuen Prozess debuggen • Benutzer muss SeDebugPrivilege besitzen • CreateProcess mit Debug-Flags • WaitForDebugEvent-Schleife • DebugSetProcessKillOnExit (Windows XP+) • DebugActiveProcessStop (Windows XP+) Universität Mannheim 16 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 17. Die Debugger-Schleife DEBUG_EVENT event; for (;;) { WaitForDebugEvent(&event, INFINITE); switch(event.dwDebugEventCode) { // Debug Events werden hier verarbeitet } ContinueDebugEvent( … ); } Universität Mannheim 17 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 18. Mögliche Debug Events • EXCEPTION_DEBUG_EVENT • CREATE_THREAD_DEBUG_EVENT • CREATE_PROCESS_DEBUG_EVENT • EXIT_THREAD_DEBUG_EVENT • EXIT_PROCESS_DEBUG_EVENT • LOAD_DLL_DEBUG_EVENT • UNLOAD_DLL_DEBUG_EVENT • OUTPUT_DEBUG_STRING_EVENT • RIP_EVENT Universität Mannheim 18 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 19. Verarbeitung des Programmzustands • Registerwerte lesen  OpenThread + GetThreadContext • Registerwerte schreiben  OpenThread + GetThreadContext + SetThreadContext • Speicher auslesen  VirtualProtextEx + ReadProcessMemory + VirtualProtextEx • Speicher schreiben  VirtualProtextEx + WriteProcessMemory + VirtualProtectEx Universität Mannheim 19 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 20. Exception Events • EXCEPTION_DEBUG_EVENT • Treten auf im Falle einer Ausnahmesituation  Access Violation  Divide By Zero  Privileged Instruction  ... • Treten auch auf, wenn ein Haltepunkt getroffen oder ein Einzelschritt ausgeführt wird Universität Mannheim 20 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 21. Behandlung von Exception Events EXCEPTION_DEBUG_INFO DWORD dwFirstChance EXCEPTION_RECORD DWORD ExceptionCode DWORD ExceptionFlags _EXCEPTION_RECORD* ExceptionRecord PVOID ExceptionAddress DWORD NumberParameters ULONG_PTR ExceptionInformation [EXCEPTION_MAXIMUM_PARAMETERS] Universität Mannheim 21 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 22. Behandlung von Exception Events • Herausfinden der genauen Ausnahme  event.u.Exception.ExceptionRecord.ExceptionCode • Reguläre Ausnahmen  First Pass: An Anwendung weitergeben  Second Pass: Fehlermeldung anzeigen • Haltepunkt und Einzelschritt Exception  Verarbeiten im Debugger Universität Mannheim 22 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 23. Feature: Software-Haltepunkte • Möglichkeit ein Programm an einer beliebigen Stelle anzuhalten • Ermöglicht das Überspringen unwichtiger Programmpfade • Originalcode wird durch Haltepunkt-Befehl 0xCC ersetzt Universität Mannheim 23 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 24. Behandlung von Haltepunkten • Ermittlung der Haltepunkt-Adresse  Adresskorrektur durchführen • Originalbefehl wiederherstellen • Warten bis der Prozess fortgesetzt werden soll • Einzelschritt ausführen  Achtung: Race Condition  Achtung: Was, wenn am nächsten Befehl auch ein BP ist? • Haltepunkt wiederherstellen • Prozess weiter ausführen Universität Mannheim 24 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 25. Feature: Hardware-Haltepunkte • Funktionieren ganz anders • Maximal 4 Haltepunkte pro CPU • Adressen in den Registern DR0 bis DR3 • DR7 zur Konfiguration der Haltepunkte • Vorteil: Modifizieren Originalcode nicht Universität Mannheim 25 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 26. Feature: Einzelschrittausführung • Nur der nächste Befehl soll ausgeführt werden  Eventuell Verzweigung in Unterfunktion • Minimale Änderung des Programmzustands • Vielleicht das wichtigste Feature zum Programmverständnis • Einzelschritt eines Threads wird mit dessen Trap-Flag ausgeführt Universität Mannheim 26 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 27. Behandlung von Einzelschritten • Ermittlung der Einzelschrittaddresse  Keine Addresskorrektur notwendig • Trap-Flag wird automatisch zurückgesetzt Universität Mannheim 27 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 28. Feature: Prozedurschritt • Sprung zum nächsten Befehl  Ignorieren von Funktionsaufrufen • Sehr nützlich um bekannte Funktionen zu überspringen Universität Mannheim 28 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 29. Behandlung von Prozedurschritt • Prozedurschritt wird nie nativ unterstützt • Stattdessen Simulation  Ist der aktuelle Befehl ein Funktionsaufruf?  Nein: Dann Einzelschritt  Ja: Dann Haltepunkt auf den nächsten Befehl und Programm normal ausführen Universität Mannheim 29 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 30. Feature: Tracemodus • Ausführen eines Programms und Protokollierung des Programmzustands nach jedem Befehl • Sehr nützlich zum Datensammeln für spätere statische Analyse Universität Mannheim 30 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 31. Behandlung von Tracemodus • Tracemodus wird nie nativ unterstützt • Stattdessen Simulation  Wiederholte Ausführung von Einzelschritten  Aufzeichnung von Registerwerten und Speicherzellen Universität Mannheim 31 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 32. Thread Events • Treten in zwei Fällen auf:  Ein neuer Thread wird gestartet  Ein aktiver Thread wird beendet Universität Mannheim 32 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 33. Feature: Threads • Begrenzte Nützlichkeit beim Reverse Engineering • Wichtig bei Malware-Analyse  Einfacher Weg zum Finden von Command-Threads • Ab und zu ist es nützlich Threads einschlafen zu lassen Universität Mannheim 33 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 34. Behandlung von Thread Creation CREATE_THREAD_DEBUG_INFO HANDLE hThread; LPVOID lpThreadLocalBase; LPTHREAD_START_ROUTINE lpStartAddress; Universität Mannheim 34 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 35. Behandlung von Thread Creation • CREATE_THREAD_DEBUG_EVENT • Thread ID feststellen • Thread Zustand feststellen • Startadresse feststellen • Weitergabe der Informationen an den Benutzer  Eventuell Programm anhalten Universität Mannheim 35 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 36. Behandlung von ExitThread EXIT_THREAD_DEBUG_INFO DWORD dwExitCode Universität Mannheim 36 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 37. Behandlung von Thread Exit • EXIT_THREAD_DEBUG_EVENT • Thread ID feststellen • Weitergabe der Informationen an den Benutzer  Eventuell Programm anhalten Universität Mannheim 37 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 38. Prozess Events • Treten in vier Fällen auf:  Ein neuer Prozess wird gestartet  Der aktive Prozess wird beendet  Eine DLL wird in den aktiven Prozess geladen  Eine DLL wird aus dem aktiven Prozess entladen Universität Mannheim 38 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 39. Feature: Prozesse • Begrenzte Nützlichkeit beim Reverse Engineering • Wichtig bei der Malware-Analyse  Häufig starten Malwareprozesse neue Prozesse Universität Mannheim 39 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 40. Behandlung von Process Creation CREATE_PROCESS_DEBUG_INFO HANDLE hFile HANDLE hProcess HANDLE hThread LPVOID lpBaseOfImage DWORD dwDebugInfoFileOffset DWORD nDebugInfoSize LPVOID lpThreadLocalBase LPTHREAD_START_ROUTINE lpStartAddress LPVOID lpImageName WORD fUnicode Universität Mannheim 40 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 41. Behandlung von Process Creation • CREATE_PROCESS_DEBUG_EVENT • Ermittlung der geladenen Datei  Erstaunlich kompliziert (Google: GetFileNameFromHandle) • Ermittlung weiterer Informationen  Prozess ID  Initialer Thread  Startaddresse • Weitergabe der Informationen an den Benutzer  Eventuell Programm anhalten Universität Mannheim 41 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 42. Behandlung von Process Exit EXIT_PROCESS_DEBUG_INFO DWORD dwExitCode Universität Mannheim 42 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 43. Behandlung von Process Exit • EXIT_PROCESS_DEBUG_EVENT • Ermittlung des Rückgabewertes • Beenden des Debuggers Universität Mannheim 43 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 44. Behandlung von DLL Loading LOAD_DLL_DEBUG_INFO HANDLE hFile LPVOID lpBaseOfDll DWORD dwDebugInfoFileOffset DWORD nDebugInfoSize LPVOID lpImageName WORD fUnicode Universität Mannheim 44 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 45. Behandlung von DLL Loading • LOAD_DLL_DEBUG_EVENT • Ermittlung der geladenen Datei  Erstaunlich kompliziert (Google: GetFileNameFromHandle) • Ermittlung weiterer Informationen  Ladeadresse der Datei im Prozess  Dateigröße • Updaten der internen Prozessverwaltung • Weitergabe der Informationen an den Benutzer  Eventuell Programm anhalten Universität Mannheim 45 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 46. Behandlung von DLL Unloading UNLOAD_DLL_DEBUG_INFO LPVOID lpBaseOfDll Universität Mannheim 46 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 47. Behandlung von DLL Unloading • UNLOAD_DLL_DEBUG_EVENT • Ermittlung der entladenen Datei  Erstaunlich einfach • Updaten der internen Prozessverwaltung • Weitergabe der Informationen an den Benutzer  Eventuell Programm anhalten Universität Mannheim 47 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 48. Anti-Debugging • Malware und andere Programme wehren sich aktiv gegen Analyse • Anti-Debugging Code ist nur eine von vielen Möglichkeiten • Vorgehensweisen  Erkennen eines Debuggers  Verhindern der Funktion eines Debuggers  Erschwerung der Analyse Universität Mannheim 48 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 49. Erkennen eines Debuggers • Offizieller Weg  IsDebuggerPresent  CheckRemoteDebuggerPresent • Dutzende inoffizieller Wege je Debugger • Erkennen von Veränderungen im Code durch Haltepunkten • Erkennen von Timing-Veränderungen • Suche nach RE-Tools im Allgemeinen Universität Mannheim 49 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 50. Verhindern der Funktionalität • Verhindern, dass sich ein Debugger an einen Prozess klemmt • Automatisches Entfernen von Haltepunkten • Gezieltes Auslösen von bekannten Bugs in Debuggern Universität Mannheim 50 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 51. Erschwerung der Analyse • Laufzeitpacker benutzen • Codeobfuscation • Versuchen den Disassembler zu stören • Komplizierter Verlauf des Kontrollflusses, etwa über Exceptionhandler Universität Mannheim 51 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 52. Universität Mannheim 52 Software Reverse Engineering Lehrstuhl Praktische Informatik 1
  • 53. Referenzen • Iczelion‘s Win32Asm Tutorials  http://win32assembly.online.fr/tutorials.html • MSDN Debugging API  http://msdn.microsoft.com/en- us/library/ms679303(VS.85).aspx • Gray Hat Python von Justin Seitz • Advanced Windows Debugging von Hario Herwardt und Daniel Pravat Universität Mannheim 53 Software Reverse Engineering Lehrstuhl Praktische Informatik 1