Login #1 for Unix

Stato
Discussione chiusa ad ulteriori risposte.

imported_BlackLight

Utente Silver
16 Agosto 2007
211
8
1
98
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:

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...
 
ehm, metti il tutorila fra i tags [ o t ] [ / o t ] (non che sia ot ovviamente basta che non si veda subito)
provo subito mi sa che prima devo installare lelib di qt
 
Beh il 'tutorial' serve semplicemente a far vedere in che modo è possibile entrare in possesso della password originale...la seconda parte l'ho lasciata come esercizio ;)
 
FFatto!
finalmente sto prendendo la mano con ddd/dissy(objdump front end :))/biew, anche se olly è tutta un'altra storia *sigh*
 
BlackLight ha detto:
Infatti ho fatto questo tutorial proprio alla luce della scarsità di CrackMe che si trovano per Linux :wink:

fantastico!
purtroppo di crack non so niente... mi metto a cercare objdump.
cosa? uno zip? li odio gli zip -.-"
 
Beh objdump dovrebbe essere installato di default sulla maggior parte delle distro Linux, e in ogni caso, se non è disponibile, per il disassembly si può sempre ricorrere al caro gdb.
 
BlackLight ha detto:
Beh objdump dovrebbe essere installato di default sulla maggior parte delle distro Linux, e in ogni caso, se non è disponibile, per il disassembly si può sempre ricorrere al caro gdb.

sì, c'è di default! che gaf... :slick1:
 
Appena craccato e si tratta del mio primo crackme con lq Qt ;) sono contento ghghgh Nell allegato c'è la soluzione e come al solito NON leggetelo se volete riuscirci da soli ciao alla prossima
 
appena crackato...anche per me era il primo con utilizzo di qt...anche se non è stato molto più difficili degli altri....una semplice spulciatina con objdump e poi con gdb...
 
Stato
Discussione chiusa ad ulteriori risposte.