Hack-IT: Reverse Engineering – Geheimzahl

2016-11-12 von Mario

Bei diesem Hack-IT liegt eine Binärdatei vor, welche unter Linux ausführbar ist und mit der Programmiersprache C erstellt wurde.

Nach der Ausführung soll eine Geheimzahl eingegeben werden. Wird die falsche Zahl eingegeben, so erscheint die Meldung “Falsch!”.

re01

Eine Möglichkeit, die richtige Zahl herauszufinden, wäre es, einfach ein Skript zu erstellen, welches alle Möglichkeiten durchprobiert. An dieser Stelle soll ein anderer eleganterer Weg dargestellt werden.

Mit dem GNU Debugger (GDB) kann das Programm in Maschinencode umgewandelt bzw. angezeigt werden. Dafür in der Konsole folgenden Befehl verwenden:

gdb hackme.o

Als nächstes im gdb folgende Einstellung setzen:

set disassembly-flavor intel

Dadurch wird eine bessere “Lesbarkeit” der Speicheradressen gewährleistet.

re02

Als nächstes mit dem Befehl

disass main

die Main Methode des Programms disassemblieren. Daraufhin erscheint der Inhalt der Methode in Maschinencode.

re03

In C werden Eingaben durch den User klassisch durch die Funktion “scanf” realisiert. Die Verwendung der Funktion

ist unter “call 0x4004f0 <__isoc99_scanf@plt>” zu finden.

re04

Nach der Eingabe muss der eingegebene Wert in einen Speicherbereich verschoben werden (die nachfolgende Zeile). An dieser Stelle wird es spannend, da als nächstes ein Vergleich folgt. Ist der Vergleich richtig, erhalten wir eine Erfolgs- oder Fehlermeldung.

Es wird die Speicheradresse mit dem Wert “0x539” verglichen. Dabei handelt es sich um einen Hexadezimalwert. Einfach mit einem Taschenrechner umwandeln und die Lösung ist gefunden.

re05

 

Download: Geheimzahl.zip

Kategorie: IT-Security Schlagwörter: , , ,