Un petit crackme pour la forme

 druide

Introduction

Sur le site **********.org j'ai trouvé un « crackme » plutôt simple. Comme je suis bientôt de retour dans un cours d'assembleur je me dis que ça ne fera pas de mal d'en refaire un peu (d'assembleur). En refaire sous la forme d'un « crackme » c'est plus amusant 😎.

Après avoir téléchargé le binaire, je commence par les tests « standards » tel que :


tux@druide:~$ file crackme
crackme20: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.0, not stripped
tux@druide:~$ strings crackme
/lib/ld-linux.so.2
_Jv_RegisterClasses
__gmon_start__
libc.so.6
printf
## Rien d'intéressant à priori
tux@druide:~$ chmod 764 crackme
tux@druide:~$  ./crackme
... Crackme *************** for Linux ...

Entrez le mot de passe pour valider : n_importe_quoi
J''ai bien peur que non... reesaye encore ;-)

La cavalerie

Bon, il est temps d'appeler la cavalerie (IDA), en plus, ça me fait plaisir 😊.


Le
strcmp
saute aux yeux. On voit qu'il est suivit par un

test  eax, eax
jz    short loc_80485A9
Donc, si le registre
eax
est à zéro, on saute à la suite du programme sinon on affiche le message d'erreur. Il ne reste donc plus qu'à changer la valeur de ce registre au bon moment.

GDB

Pour faire ce travail, on va démarrer le programme dans un débuggeur, placer un point d'arrêt à l'adresse 0x804858E, changer la valeur du registre
eax
et laisser le programme suivre son cours normalement. Avec un peu de chance...

tux@druide:~$ gdb ./crackme
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
...
Reading symbols from ./crackme...done.
(gdb) break *0x0804858c
Breakpoint 1 at 0x804858c
(gdb) run
Starting program: /home/tux/crackme
... Crackme ************** for Linux ...

Entrez le mot de passe pour valider : n_importe_quoi

Breakpoint 1, 0x0804858c in main ()
(gdb) info registers eax
eax            0x1	1
(gdb) set $eax=0
(gdb) info registers eax
eax            0x0	0
(gdb) n
Single stepping until exit from function main,
which has no line number information.
Le pass est ********.

0xf7e27a83 in __libc_start_main () from /lib/i386-linux-gnu/libc.so.6
(gdb)


Et voilà.

REM: J'ai caché le mot de passe pour ne pas parasiter le site de challenge.

That's all folks

  • 4 years 1 month before
  • |