Ceci est une ancienne révision du document !
$ file crackme crackme: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=0xfe11128a5dd83a7776ad2f978b1ab64ba5b7ddba, not stripped
Pour une raison que je ne sais pas expliquer, il est impossible de l'ouvrir avec IDA. C'est parti pour du full gdb !
gdb$ disas main Dump of assembler code for function main: 0x08048f98 <+0>: push ebp 0x08048f99 <+1>: mov ebp,esp 0x08048f9b <+3>: and esp,0xfffffff0 0x08048f9e <+6>: sub esp,0x10 0x08048fa1 <+9>: cmp DWORD PTR [ebp+0x8],0x1 ; check le nombre d'argument 0x08048fa5 <+13>: jg 0x8048fbf <main+39> ; il doit être >1 0x08048fa7 <+15>: mov DWORD PTR [esp],0x80c254d ; "Please enter password ?" 0x08048fae <+22>: call 0x8049990 <puts> 0x08048fb3 <+27>: mov DWORD PTR [esp],0x0 ; push 0 0x08048fba <+34>: call 0x8049770 <exit> ; exit(0) 0x08048fbf <+39>: mov eax,DWORD PTR [ebp+0xc] ; continue ici si au moins un argument est donné 0x08048fc2 <+42>: add eax,0x4 0x08048fc5 <+45>: mov eax,DWORD PTR [eax] ; eax contient notre premier argument (son adresse) 0x08048fc7 <+47>: mov DWORD PTR [esp],eax ; push eax 0x08048fca <+50>: call 0x8048ea2 <check> ; check(argv[1]); 0x08048fcf <+55>: leave 0x08048fd0 <+56>: ret End of assembler dump.
De façon basique, le programme regarde s'il a au moins un argument en entrée. Si ce n'est pas le cas, il retourne un message d'erreur. Dans le cas contraire, il appel la fonction check
avec argv[1]
en argument.