Dr. Evil's Bombe (Binary Bomb Lab) | Teil 1

Zum Ende dieses Semsters hatten wir die Aufgabe bekommen eine Binary Bomb zu entschärfen.
Diese Bombe hat mehrere Phasen (6 offizielle Phasen und 1 geheime Phase).

Im folgenden werde ich mich mit dem Entschärfen der "Bombe" beschäftigen. Hierzu verwende ich ein Linux System (Ubuntu 14.04 LTS) mit den Tools:
  • gdb (GNU Debugger)
  • strings (Tool um alle Strings auszugeben die in einem Programm "hardgecoded" sind)
  • objdump (Disassembler)


Einführung:

Zunächst einmal, jeder einzelne von uns hatte speziell angepasste "Bomben" bekommen. In diesen angepassten Versionen wurden lediglich die Algorithmen angepasst.

Phase 1:

Die erste Phase ist eine Übung zum Aufwärmen.
Der String, welcher benötigt wird um die Bombe zu entschärfen befindet sich im Klartext im Programm sprich es wurde "hardgecoded". Das würde z.B. so aussehen:
Beispiel der If-Abfrage






Nachdem wir nun wissen, dass der String sich im Klartext im Programm befindet, können wir mal per strings uns alle Strings die in dem Programm so vorkommen ausgeben lassen:

Wenn wir uns nun die Ausgabe etwas näher ansehen finden wir einen längeren Text, welcher auf seltsameweise umgebrochen ist. Dieser sieht wie folgt aus:
Der gesuchte String
Wenn wir nun alle Zeichen entfernen, welche den Satz unverständlich bzw. unleserlich machen entfernen kommen wir auf folgenden Satz:

"You know you've gear-up when it takes full power to taxi." (wichtig hierbei ist der Punkt am Ende des Satzes)

Man könnte diese Zeichenkette auch aus den Registern auslesen. Allerdings bekommt man den Satz dann von hinten nach vorn geschrieben.

Wenn wir uns nun die Funktion "phase_1" per objdump disassemblieren lassen, können wir folgenden Code sehen.
( root@local:~/> objdump -d bombe > disasm_bomb.txt )
































Wenn wir uns die Befehle welche mit movabs beginnen näher ansehen dann fällt auf, dass immmer absolute Hexwerte in das Register RAX geschrieben wird.
Wenn wir uns diese Werte nun rausschreiben, sehen wir folgendes:
 Wir können nun einzeln die ganzen Hex-Werte in einen String umwandeln lassen und danach umdrehen lassen.
Z.B. wäre der erste Wert als String folgender: wonk uoY   






Wenn wir nun den Text als Lösung für unsere erste Phase eingeben können wir mit Phase 2 weiter machen.

Zusammenfassend, der gesuchte String befindet sich im Klartext in diesem Programm-Abschnitt. Man muss eben wissen wo man sucht oder man sieht sich die Werte mal etwas genauer an, welche in die Register geschrieben werden. Man kann natürlich ebenfalls erkennen, dass es sich um einen String handeln muss, da am Ende eine Funktion namens "strings_not_equal" aufgerufen wird. 

Auf geht's zu Phase 2: > WEITER!
 

Kommentare

Beliebte Posts aus diesem Blog

[ENGLISH] Capture the Flag at UCF - Write Up - Crypto - XORLY