Il Forum di Orebla.it

Benvenuto nella community di Orebla.it
Oggi è mer 26 giu, 2019 7:02 pm

Tutti gli orari sono UTC + 1 ora




Apri un nuovo argomento Rispondi all’argomento  [ 3 messaggi ] 
Autore Messaggio
Messaggio da leggereInviato: sab 07 lug, 2007 10:59 am 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
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.

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.

_________________
Immagine
Immagine


Top
 Profilo  
 
Messaggio da leggereInviato: mer 11 lug, 2007 11:20 am 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Bel esercizio, ti dirò che più di una volta mi sono immerso nel mondo del reversing, però non sono mai riuscito ad andare oltre agli esercizi semplici trovati sul web. Ma mi sono ripromesso che appena ho due minuti di approfondire l'argomento!

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: mer 11 lug, 2007 2:25 pm 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Il reversing è proprio uno dei campi dell'hacking preferiti (tra l'altro sono anche moderatore della sezione dedicata su HJ...). Sono in cantiere altri esercizi, di cui stavolta non posterò la soluzione.

Anzi, come esercizio complementare a questo vi propongo, invece di risalire semplicemente alla password originale (che potrebbe essere criptata all'interno del programma e non in chiaro come stavolta), di crackare letteralmente il programma, ovvero di modificare l'eseguibile in modo che qualsiasi password venga inserita passi come valida. Non è difficile come cosa, basta semplicemente agire sui due argomenti salvati sullo stack prima che venga effettuata la funzione per il controllo...

_________________
Immagine
Immagine


Top
 Profilo  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 3 messaggi ] 

Tutti gli orari sono UTC + 1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduzione Italiana phpBBItalia.net basata su phpBB.it 2010
phpBB SEO