Ecco un mio crackme per Linux, sviluppato con le librerie Qt, per allenare le vostre abilitàdi reverser.
http://digilander.libero.it/BlackLight86/crackme.zip
Quando lo eseguite vi verràchiesta una password, che ovviamente non conoscete. Il vostro compito è entrare in possesso di questa password o bypassare il controllo, crackando l'eseguibile stesso.
--SOLUZIONE PARTE 1--
[OT]
Come crackarlo. Passatelo a objdump in modo da avere l'elenco delle funzioni disponibili al suo interno, e guardate bene. Vi ritroverete davanti a una funzione del genere:
Come potete intuire dal nome della funzione (MainPanel::checkPwd) è questa la funzione da crackare per bypassare la password. Diamo l'eseguibile in pasto a gdb e disassembliamo la funzione in questione:
Tra le prime righe del codice disassemblato ci ritroviamo qualcosa del genere:
Ovvero una call ad una funzione che opera su QString e poco dopo un salto condizionato, quindi il controllo avviene qui. Gli argomenti della funzione che effettua l'uguaglianza tra le due stringhe sono salvati sullo stack, anzi abbiamo un indizio esplicito:
Andiamo a vedere cosa c'è a quell'indirizzo:
Ed ecco a voi la vostra password.
[/OT]
--ESERCIZIO--
La soluzione sopra vi consente di trovare la password originale. Provate invece a crackare l'applicazione in modo che ogni password inserita sia ritenuta corretta. Aiutino: basta lavorare un minimo sugli argomenti passati alla funzione per il confronto delle password...
http://digilander.libero.it/BlackLight86/crackme.zip
Quando lo eseguite vi verràchiesta una password, che ovviamente non conoscete. Il vostro compito è entrare in possesso di questa password o bypassare il controllo, crackando l'eseguibile stesso.
--SOLUZIONE PARTE 1--
[OT]
Come crackarlo. Passatelo a objdump in modo da avere l'elenco delle funzioni disponibili al suo interno, e guardate bene. Vi ritroverete davanti a una funzione del genere:
Codice:
0804be90 <_ZN9MainPanel8checkPwdEv>:
804be90: 55 push %ebp
804be91: 89 e5 mov %esp,%ebp
804be93: 56 push %esi
804be94: 53 push %ebx
804be95: 83 ec 28 sub $0x28,%esp
804be98: 8b 75 08 mov 0x8(%ebp),%esi
...........
Come potete intuire dal nome della funzione (MainPanel::checkPwd) è questa la funzione da crackare per bypassare la password. Diamo l'eseguibile in pasto a gdb e disassembliamo la funzione in questione:
Codice:
(gdb) disas _ZN9MainPanel8checkPwdEv
Dump of assembler code for function _ZN9MainPanel8checkPwdEv:
0x0804be90 <_ZN9MainPanel8checkPwdEv+0>: push %ebp
0x0804be91 <_ZN9MainPanel8checkPwdEv+1>: mov %esp,%ebp
0x0804be93 <_ZN9MainPanel8checkPwdEv+3>: push %esi
..........
Tra le prime righe del codice disassemblato ci ritroviamo qualcosa del genere:
Codice:
0x0804beab <_ZN9MainPanel8checkPwdEv+27>: movl $0x804c50f,(%esp)
0x0804beb2 <_ZN9MainPanel8checkPwdEv+34>: push %ebx
0x0804beb3 <_ZN9MainPanel8checkPwdEv+35>: call 0x804b898 <_ZeqRK7QStringPKc@plt>
0x0804beb8 <_ZN9MainPanel8checkPwdEv+40>: mov 0xffffffe8(%ebp),%edx
0x0804bebb <_ZN9MainPanel8checkPwdEv+43>: mov %al,%bl
0x0804bebd <_ZN9MainPanel8checkPwdEv+45>: mov (%edx),%eax
0x0804bebf <_ZN9MainPanel8checkPwdEv+47>: dec %eax
0x0804bec0 <_ZN9MainPanel8checkPwdEv+48>: add $0x10,%esp
0x0804bec3 <_ZN9MainPanel8checkPwdEv+51>: test %eax,%eax
0x0804bec5 <_ZN9MainPanel8checkPwdEv+53>: mov %eax,(%edx)
0x0804bec7 <_ZN9MainPanel8checkPwdEv+55>: je 0x804bf30 <_ZN9MainPanel8checkPwdEv+160>
0x0804bec9 <_ZN9MainPanel8checkPwdEv+57>: test %bl,%bl
0x0804becb <_ZN9MainPanel8checkPwdEv+59>: je 0x804bf50 <_ZN9MainPanel8checkPwdEv+192>
Ovvero una call ad una funzione che opera su QString e poco dopo un salto condizionato, quindi il controllo avviene qui. Gli argomenti della funzione che effettua l'uguaglianza tra le due stringhe sono salvati sullo stack, anzi abbiamo un indizio esplicito:
Codice:
0x0804beab <_ZN9MainPanel8checkPwdEv+27>: movl $0x804c50f,(%esp)
Andiamo a vedere cosa c'è a quell'indirizzo:
Codice:
(gdb) x/s 0x804c50f
0x804c50f <_ZTS6QGList+55>: "crackme"
Ed ecco a voi la vostra password.
[/OT]
--ESERCIZIO--
La soluzione sopra vi consente di trovare la password originale. Provate invece a crackare l'applicazione in modo che ogni password inserita sia ritenuta corretta. Aiutino: basta lavorare un minimo sugli argomenti passati alla funzione per il confronto delle password...