Hack-IT: Reverse Engineering – Geheimzahl
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!”.
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.
Als nächstes mit dem Befehl
disass main
die Main Methode des Programms disassemblieren. Daraufhin erscheint der Inhalt der Methode in Maschinencode.
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.
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.
Download: Geheimzahl.zip