Wie so oft werden wir auch bei dieser Challenge (crack1) einfach nur mit den Worten
“get the password”
begrüßt. Dieses Passwort sollen wir aus einer Binärdatei extrahieren.
Sehen wir uns also als Erstes den Typ des Binarys an:
rup0rt@lambda:~$ file crack1
crack1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=0x4579db2a2ebe3b4e83948f7a650dc3fced1d812d, not stripped
Es handelt sich um ein einfaches Linux-32bit-Programm.
Wir führen das Programm zunächst einmal aus um uns einen Überblick über dessen Funktionsweise zu verschaffen:
creeq@linux:~/ATAST2012$ ./crack1 Password Required : 12345 Wrong !!!! better luck next time :D
Es wird eine Passwortabfrage durchgeführt, die uns anschließend, bei Eingabe von “12345”, mit “falsch” beantwortet wird. Unser Ziel ist es daher, den Programmcode zu untersuchen um festzustellen, wie genau das Passwort überprüft wird und so an die korrekte Lösung zu gelangen.
Dafür nutzen wir “objdump” um an den Assembler-Code des Binarys zu gelangen. Dabei fallen folgende Inhalte in der <main>-Funktion auf:
804865f: mov eax,DWORD PTR [esp+0x2c] 8048663: mov edx,DWORD PTR [esp+0x2c] 8048667: movzx edx,BYTE PTR [esp+edx*1+0x32] 804866c: xor edx,0x21 804866f: mov BYTE PTR [esp+eax*1+0x68],dl 8048673: mov eax,DWORD PTR [esp+0x2c] 8048677: mov DWORD PTR [esp+0x8],eax 804867b: lea eax,[esp+0x68] 804867f: mov DWORD PTR [esp+0x4],eax 8048683: lea eax,[esp+0x54] 8048687: mov DWORD PTR [esp],eax 804868a: call 80484d0 <strncmp@plt> 804868f: test eax,eax 8048691: jne 804869a <main+0x106> 8048693: add DWORD PTR [esp+0x2c],0x1 8048698: jmp 80486ad <main+0x119>
In Zeile 4 wird eine XOR-Operation auf einen statischen Byte-Wert angewendet. Dies ist für gewöhnlich nur dann der Fall, wenn Daten im Programm versteckt wurden. Anschließend (Zeile 13) wird die “strcmp”-Funktion ausgeführt um den mit XOR erhaltenen Wert, mit den von uns eingegebenen Passwort-Buchstaben zu vergleichen. Zuletzt (Zeile 15) wird geprüft, ob die Zeichen überein stimmen und bei Erfolg der Buchstaben-Zähler (Zeile 17) erhöht.
Continue reading