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

Die ersten zwei Phasen haben wir ja mittlerweile ganz gut gemeistert.
Probieren wir uns im dritten Teil an Phase 3.

Vorweg sei einmal gesagt, dass es für die Phase mehrere Lösungsmöglichkeiten gibt / geben kann.

Wenn wir uns nun einmal den ersten Teil der dritten Phase näher anschauen. Wieder einmal, habe ich ein wichtiges Kriterium gelb markiert. Von hier aus werden wir die Lösung Schritt für Schritt entwickeln.


Erster Teil der Phase 3
Was bezweckt dieses Jump-Statement? Und warum ist es wichtig?


Das es wichtig ist liegt zum einen daran, dass danach sofort ein callq <explode_bomb> folgt und wie wir bereits wissen wollen wir den Aufruf dieser Methode unterbinden, da wir ja nunmal hier sind um die Bombe zu entschärfen.

Was hier gerade eigentlich vergleicht wurde ist ebenfalls sehr interessant. Gehen wir das mal Schritt weise an:

  • Zuvor wurde die Methode sscanf aufgerufen ( C++ Reference ). 
  • Danach wurde %eax mit $0x2 verglichen
Soweit sogut. Nach einem Methodenaufruf befindet sich im Register EAX (unter 64bit System RAX genannt) immer der Rückgabewert der Funktion. Wenn wir uns nun wieder die C++ Reference Doku dazu ansehen finden wir folgendes:

On success, the function returns the number of items in the argument list successfully filled. This count can match the expected number of items or be less (even zero) in the case of a matching failure.In the case of an input failure before any data could be successfully interpreted, EOF is returned.
Was wir daraus schließen können ist, dass wir mindestens drei Zeichen/Zahlen oder sonst etwas eingeben müssen. Um endlich herauszufinden wie wir wirklich unsere Eingabe formatieren müssen werfen wir einen Blick in das Register %esi sobald folgender Befehl ausgeführt wurde:

mov    $0x4026bc,%esi

Wir sehen nach was wir darin finden mit folgendem Befehl: x/s $esi
Als Ergebnis erhalten wir: 0x4026bc: "%d %c %d"

Tada! Wir müssen also etwas wie: 5 x 20 (Beispielhaft gewählt) eingeben.

Somit können wir uns über n (next instruction) durch klicken bis:

cmp    DWORD PTR [rsp+0xc],0x7

Falls ich bis hier noch nicht erwähnt haben sollte, dass wir meistens im Register RSP unsere Eingaben finden (oft sogar noch mit Offset) dann habe ich dies so eben getan.
D.h. wir finden in rsp+0xc unsere 5. Wir können dies mit dem Befehl x (examine) erreichen, da wir hier ein Pointer vor uns haben.

x/d $rsp+0xc

Also wir vergleichen nun unsere Eingabe auf den Wert 7. Allerdings folgt danach ein Jump-Above welches wir nicht auslösen möchten da wir sonst sofort unsere allseits bekannte Methode explode_bomb aufrufen würden.

Wir schließen daraus, dass unsere Zahl <= 7 sein muss. In diesem Fall begnügen wir uns damit, dass wir mit der Zahl 5 einen soliden und richtigen Treffer gelandet haben.

Unsere erste Zahl (sprich die 5) beeinflusst unsere weitere Vorgehensweise und somit unsere Lösung. In diesem Fall springen wir mit Hilfe unserer 5 anfolgenden Befehl ( zunächst aber noch den 2. Teil der dritten Phase als Assembler Code )


Teil 2 von Phase 3


Wir befinden uns an Adresse 4010fa
Dort finden wir unser benötigtes "Compare".

cmp    DWORD PTR [rsp+0x8],0x100

Unsere letzte Zahl (sprich unsere 20) wird nun mit 0x100 verglichen.
Da wir ja alle im alltäglichen Leben nichts anderes tun außer Hex in Dezimal umzurechnen erkennt unser trainiertes Auge natürlich sofort, dass es sich hierbei um die Zahl 256 handelt.

Jetzt müssen wir nur noch das Geheimnis unseres Buchstaben lösen. 



Teil 3 von Phase 3

Wir kommen wie bereits bekannt per "n" weiter und gelangen zum letzten Vergleich:

cmp    al,BYTE PTR [rsp+0x7]

Wir können uns per p/d $al einmal das Register ausgeben lassen uns sehen eine 108. Dies können wir in der ASCII Tabelle nachschlagen und sehen es ist ein kleines "L".

Somit hätten wir Phase 3 ebenfalls erfolgreich abgeschlossen!

Webseite: http://r3d-soft.de
Web-YouTube Downloader: http://youtube.r3d-soft.de
MediaDownloader als Programm: http://download.r3d-soft.de (Downloade Musik, Videos und vieles mehr!)

Kommentare

Beliebte Posts aus diesem Blog

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

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