Reverse Engineering mit IDA 16.05

1. Einleitung

Reverse Engineering ist der Prozess, bei dem aus einem vorhandenen System oder Produkt die Konstruktionsdetails durch Untersuchung extrahiert werden, um eine nahezu exakte Nachbildung zu erstellen und Weiterentwicklung zu ermöglichen. Es zielt darauf ab, die Strukturen, Zustände und Verhaltensweisen des Objekts zu verstehen und zu replizieren. IDA ist ein wirklich leistungsstarkes Tool für das Reverse Engineering von Software. Es wurde von der Firma Hex-Rays entwickelt und ist eines der bekanntesten und am häufigsten genutztes Programm in diesem Bereich. Mit IDA können Nutzer die Konstruktionsdetails von Software extrahieren, um sie genau nachzubilden und weiterzuentwickeln.

2. Grundlagen:

_images/idaLogo.png

([Abb.1]):

IDA ist eine leistungsfähige Reverse-Engineering-Software, die sowohl von erfahrenen Sicherheitsforschern als auch von Einsteigern genutzt werden kann. Grundlagen von IDA umfassen:

Benutzeroberfläche

Die Benutzeroberfläche von IDA ist intuitiv gestaltet und bietet verschiedene Werkzeuge und Funktionen, die einfach zu nutzen sind. Sie ist in mehrere Bereiche unterteilt, darunter der Code-Viewer, der Symbol-Tisch, der Daten-Browser und das Listing-Fenster.

Projektverwaltung

IDA verfügt über umfassende Funktionen zur Analyse von Binärdateien, darunter automatische Analyse, Symbolauflösung, Funktionserkennung und Datenstruktur-Entschlüsselung. Diese Funktionen ermöglichen es den Benutzern, die Strukturen, Funktionen und Verhaltensweisen von Binärdateien gründlich zu untersuchen.

Analysefunktionen

IDA bietet eine Vielzahl von Analysefunktionen, um die Strukturen, Funktionen und Verhaltensweisen von Binärdateien zu untersuchen. Dazu gehören die automatische Analyse, die Symbolauflösung, die Funktionserkennung und die Entschlüsselung von Datenstrukturen.

Decompiler

IDAs besondere Funktion ist der Decompiler. Er übersetzt den Maschinencode in eine verständlichere Sprache wie C. Das macht den Code leichter verständlich und beschleunigt den Reverse-Engineering-Prozess deutlich.

Scripting und Erweiterbarkeit

IDA bietet umfangreiche Möglichkeiten zur Skripterstellung und Erweiterung, wodurch Benutzer ihre eigenen Analysewerkzeuge und Automatisierungsskripte entwickeln können, um ihre spezifischen Anforderungen zu erfüllen.

3. Versuchsdurchführung

Wir haben folgenden C Code den ein Nutzer nur als Binärdatei zu sehen bekommt.

#include<stdio.h>
#include<string.h>

void flush_stdin() {
   int c;
   while ((c = getchar()) != '\n' && c != EOF);
}
void encrypt(char* hex_string, char* key) {
   int i;
   for (i = 0; hex_string[i] != '\0' && key[i] != '\0'; ++i) {
      hex_string[i] ^= key[i];
   }
}

int pass_one(){
   printf("Enter first password: ");
   char pwd[7];
   fgets(pwd, sizeof(pwd), stdin);
   pwd[strcspn(pwd, "\n")] = '\0';
   if (strcmp(pwd, "abcdef") == 0) {
      printf("Flag: lfjes32rhoohife\n");
      return 1;
   }else{
      return 0;
   }
}

int pass_two(){
   printf("Enter second password: ");
   char pwd[5];
   fgets(pwd, sizeof(pwd), stdin);
   pwd[strcspn(pwd, "\n")] = '\0';
   char *ptr = pwd;
   if(*ptr != 'h'){
      return 0;
   }
   ptr++;
   if(*ptr != 'i'){
      return 0;
   }
   ptr++;
   if(*ptr != 'j'){
      return 0;
   }
   ptr++;
   if(*ptr != 'k'){
      return 0;
   }
   char flag[10] = "43ABF4395C";
   char key[] = "1234";
   encrypt(flag, key);
   printf("Flag %s \n", flag);
   return 1;

}



int main(){
   if(pass_one() == 0){
      printf("Wrong password!\n");
      return 0;
   }
   flush_stdin();
   if(pass_two() == 0) {
      printf("Wrong password!\n");
      return 0;
   }
   return 0;
}

Wenn der Benutzer die Binärdatei ausführt, muss er ein Passwort eingeben, um Zugang zu einem Flag zu erhalten. Danach muss er ein zweites Passwort eingeben, um auf das zweite Flag zuzugreifen, ähnlich wie bei einem CaptureTheFlag-Ereignis. Das erste Flag kann schnell mit den Linux tool strings gefiltert werden.

_images/BinaryStrings.png

Das zweite Flag kann mit diesem Ansatz nicht mehr herausgefiltert werden. Hier bietet sich Reverse-Engineering-Software wie IDA an. Öffnet man die Binärdatei in IDA, stellt die Software den Assemblercode grafisch dar. So kann der Benutzer von einer Funktion zur nächsten springen.

_images/IdaScreenshot.png

Wenn man sich den Code ein wenig ansieht und durch ihn navigiert, kommt man entweder zum Passwort oder zur Flagge, die aber immer noch verschlüsselt ist. Natürlich kann man auch die Flagge entschlüsseln, wenn man den richtigen Verschlüsselungsalgorithmus erraten hat und den Schlüssel kennt.

4. Fazit

IDA ist ein unverzichtbares Werkzeug für Sicherheitsforscher und Entwickler, die tief in die Struktur und Funktionsweise von Software eintauchen möchten. Durch seine umfassenden Analysefunktionen und die Möglichkeit, Maschinencode in eine verständlichere Sprache zu übersetzen, erleichtert IDA den Reverse-Engineering-Prozess erheblich.

Abbildungen:

Abb.1

: Quelle: https://hex-rays.com/wp-content/themes/hx2021/dist/img/how-it-works.png

Reverse Engineering von Software: Prozesse & Funktionsweise - Digital Guide Ionos Quelle: https://www.ionos.de/digitalguide/websites/web-entwicklung/software-reverse-engineering/#:~:text=Im%20Software%2DBereich%20wird%20Reverse,oder%20Analyse%20von%20Konkurrenzprodukten%20eingesetzt.&text=Bezeichnet%20die%20Nachkonstruktion%20eines%20bereits,in%20diesem%20Fall%20einer%20Software.